MySQL学习笔记(四)

版权声明:本文为自学而写,如有错误还望指出,谢谢^-^ https://blog.csdn.net/weixin_43871369/article/details/89518756

10. 使用数据处理函数

10.1 文本处理函数

一些常见的文本处理函数。例如left(),right(),length(),locate(),lower(),upper(),ltrim(),rtrim(),substring()等等

mysql> select t_name,upper(t_name) as name_uppercase
    -> from test;
+--------+----------------+
| t_name | name_uppercase |
+--------+----------------+
| Tom    | TOM            |
| Jerry  | JERRY          |
| Helen  | HELEN          |
| Halen  | HALEN          |
| Bob    | BOB            |
+--------+----------------+
5 rows in set (0.13 sec)

10.2 时间和日期处理函数

常用的日期和时间处理函数如下:

AddDate()---------------------增加一个日期(天、周等)

AddTime()--------------------增加一个时间(时、分等)

CurDate()--------------------返回当前日期

CurTime()--------------------返回当前时间

Date()-------------------------返回日期时间的日期部分

DateDiff()--------------------计算两个日期之差

Year(),Month(),Day(),Hour(),Minute(),Second()(年月日时分秒)

Now()返回当前时间和日期

DayOfWeek()对应一个日期,返回对应的星期几

mysql> select dayofweek(now());
+------------------+
| dayofweek(now()) |
+------------------+
|                5 |
+------------------+
1 row in set (0.08 sec)
mysql> select curdate();
+------------+
| curdate()  |
+------------+
| 2019-04-25 |
+------------+
1 row in set (0.00 sec)
mysql> select * from test;
+------+---------+------------------------------------+---------------------+
| t_id | t_name  | t_text                             | t_time              |
+------+---------+------------------------------------+---------------------+
|    5 | Tom     | This is a cat                      | 2019-04-25 16:13:39 |
|    4 | Jerry   | This is a mouse                    | 2019-04-25 15:40:55 |
|    6 | Helen   | She is a student in middle school. | 2019-04-25 16:13:39 |
|    1 | Halen   | NULL                               | 2019-04-25 16:17:21 |
|    3 | Bob     | NULL                               | 2019-04-25 16:17:21 |
|    7 | Erdison | NULL                               | 2019-05-04 00:00:00 |
+------+---------+------------------------------------+---------------------+
6 rows in set (0.00 sec)

mysql> select t_name,t_time from test
    -> where date(t_time) between '2019-04-25' and '2019-05-04';
+---------+---------------------+
| t_name  | t_time              |
+---------+---------------------+
| Tom     | 2019-04-25 16:13:39 |
| Jerry   | 2019-04-25 15:40:55 |
| Helen   | 2019-04-25 16:13:39 |
| Halen   | 2019-04-25 16:17:21 |
| Bob     | 2019-04-25 16:17:21 |
| Erdison | 2019-05-04 00:00:00 |
+---------+---------------------+
6 rows in set (0.10 sec)

10.3 数值处理函数

常用的数值处理函数有Abs(),Cos(),Exp(),Mod(),Pi(),Rand(),Sin(),Sqrt(),Tan()等,较为简单,例子,略。

11. 汇总数据

11.1 聚集函数

AVG(),COUNT(),MAX(),MIN(),SUM()分别对某列进行操作

其中COUNT(*)与COUNT(column)分别表示对表中的行进行计数,不管是否是NULL值。而后者忽略NULL值,针对非NULL值进行计数。

mysql> select * from test;
+------+---------+------------------------------------+---------------------+
| t_id | t_name  | t_text                             | t_time              |
+------+---------+------------------------------------+---------------------+
|    5 | Tom     | This is a cat                      | 2019-04-25 16:13:39 |
|    4 | Jerry   | This is a mouse                    | 2019-04-25 15:40:55 |
|    6 | Helen   | She is a student in middle school. | 2019-04-25 16:13:39 |
|    1 | Halen   | NULL                               | 2019-04-25 16:17:21 |
|    3 | Bob     | NULL                               | 2019-04-25 16:17:21 |
|    7 | Erdison | NULL                               | 2019-05-04 00:00:00 |
+------+---------+------------------------------------+---------------------+
6 rows in set (0.00 sec)
mysql> select avg(t_id) as avg_id,
    -> count(*) as all_column,
    -> count(t_text) as part_column,
    -> max(t_id) as max_id,
    -> sum(t_id) as sum_id from test;
+--------+------------+-------------+--------+--------+
| avg_id | all_column | part_column | max_id | sum_id |
+--------+------------+-------------+--------+--------+
| 4.3333 |          6 |           3 |      7 |     26 |
+--------+------------+-------------+--------+--------+
1 row in set (0.02 sec)

11.2 聚集不同值函数

这时需要用到关键词distinct来标注,此时聚集函数只处理数据不同的行,默认是all。

mysql> update test
    -> set t_name='Helen'
    -> where t_id in(1,3);
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> select * from test;
+------+---------+------------------------------------+---------------------
| t_id | t_name  | t_text                             | t_time
+------+---------+------------------------------------+---------------------
|    5 | Tom     | This is a cat                      | 2019-04-25 16:13:39
|    4 | Jerry   | This is a mouse                    | 2019-04-25 15:40:55
|    6 | Helen   | She is a student in middle school. | 2019-04-25 16:13:39
|    1 | Helen   | NULL                               | 2019-04-25 16:17:21
|    3 | Helen   | NULL                               | 2019-04-25 16:17:21
|    7 | Erdison | NULL                               | 2019-05-04 00:00:00
+------+---------+------------------------------------+---------------------
6 rows in set (0.00 sec)

mysql> select count(distinct t_name) from test;
+------------------------+
| count(distinct t_name) |
+------------------------+
|                      4 |
+------------------------+
1 row in set (0.07 sec)

12. 分组数据

 12.1 创建分组

与聚集值的函数不同,聚集函数将整体作为操作数,而分组采用group by关键词来对每个组来进行操作。

mysql> select * from test;
+------+---------+------------------------------------+---------------------+
| t_id | t_name  | t_text                             | t_time              |
+------+---------+------------------------------------+---------------------+
|    5 | Tom     | This is a cat                      | 2019-04-25 16:13:39 |
|    4 | Jerry   | This is a mouse                    | 2019-04-25 15:40:55 |
|    6 | Helen   | She is a student in middle school. | 2019-04-25 16:13:39 |
|    1 | Helen   | NULL                               | 2019-04-25 16:17:21 |
|    3 | Helen   | NULL                               | 2019-04-25 16:17:21 |
|    7 | Erdison | NULL                               | 2019-05-04 00:00:00 |
+------+---------+------------------------------------+---------------------+
6 rows in set (0.07 sec)

mysql> select t_name,count(*) as t_namegrp
    -> from test
    -> group by t_name;
+---------+-----------+
| t_name  | t_namegrp |
+---------+-----------+
| Erdison |         1 |
| Helen   |         3 |
| Jerry   |         1 |
| Tom     |         1 |
+---------+-----------+
4 rows in set (0.09 sec)

 12.2 过滤分组

过滤分组,我们可以采用having 关键词来进行过滤掉满足条件的组聚集

mysql> select t_name,count(*) as t_namegrp
    -> from test
    -> group by t_name
    -> having t_namegrp>1;
+--------+-----------+
| t_name | t_namegrp |
+--------+-----------+
| Helen  |         3 |
+--------+-----------+
1 row in set (0.00 sec)

12.3 分组和排序

mysql> select t_name,count(*) as t_namegrp
    -> from test
    -> where length(t_name)>3
    -> group by t_name
    -> having t_namegrp>0
    -> order by t_namegrp
    -> limit 0,3;
+---------+-----------+
| t_name  | t_namegrp |
+---------+-----------+
| Jerry   |         1 |
| Erdison |         1 |
| Helen   |         3 |
+---------+-----------+
3 rows in set (0.00 sec)

此例子也给出了相应的语句的先后顺序。

13. 使用子查询

13.1 利用子查询进行过滤

顾名思义就是查询里嵌套查询

mysql> select * from _test;
+------+--------+---------------------+
| t_id | _name  | _time               |
+------+--------+---------------------+
|    2 | Linda  | 2019-04-02 12:00:00 |
|    3 | Lucy   | 2019-05-01 00:00:00 |
|    4 | Tomson | 0196-04-23 00:00:00 |
+------+--------+---------------------+
3 rows in set (0.00 sec)
mysql> select * from test;
+------+---------+------------------------------------+---------------------+
| t_id | t_name  | t_text                             | t_time              |
+------+---------+------------------------------------+---------------------+
|    5 | Tom     | This is a cat                      | 2019-04-25 16:13:39 |
|    4 | Jerry   | This is a mouse                    | 2019-04-25 15:40:55 |
|    6 | Helen   | She is a student in middle school. | 2019-04-25 16:13:39 |
|    1 | Helen   | NULL                               | 2019-04-25 16:17:21 |
|    3 | Helen   | NULL                               | 2019-04-25 16:17:21 |
|    7 | Erdison | NULL                               | 2019-05-04 00:00:00 |
|    8 | Linda   | NULL                               | 2019-04-02 12:00:00 |
|    9 | Lucy    | NULL                               | 2019-05-01 00:00:00 |
|   10 | Tomson  | NULL                               | 0196-04-23 00:00:00 |
+------+---------+------------------------------------+---------------------+
9 rows in set (0.00 sec)
mysql> select t_name from test
    -> where t_id in(
    -> select t_id from _test
    -> where t_text is null);
+--------+
| t_name |
+--------+
| Helen  |
+--------+
1 row in set (0.06 sec)

mysql> select t_name from test
    -> where t_id in(
    -> select t_id from _test
    -> where date(_time) between '0196-04-23' and '2019-05-01');
+--------+
| t_name |
+--------+
| Helen  |
| Jerry  |
+--------+
2 rows in set (0.00 sec)

13.2 作为计算字段使用子查询

mysql> select t_id,t_name,(select count(*) from _test
    -> where _test.t_id=test.t_id) as same_id
    -> from test order by t_id;
+------+---------+---------+
| t_id | t_name  | same_id |
+------+---------+---------+
|    1 | Helen   |       0 |
|    3 | Helen   |       1 |
|    4 | Jerry   |       1 |
|    5 | Tom     |       0 |
|    6 | Helen   |       0 |
|    7 | Erdison |       0 |
|    8 | Linda   |       0 |
|    9 | Lucy    |       0 |
|   10 | Tomson  |       0 |
+------+---------+---------+
9 rows in set (0.00 sec)

猜你喜欢

转载自blog.csdn.net/weixin_43871369/article/details/89518756