第八章| 2. MySQL数据库|数据操作| 权限管理

Posted 李卓航

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第八章| 2. MySQL数据库|数据操作| 权限管理相关的知识,希望对你有一定的参考价值。

1、数据操作

SQL(结构化查询语言),可以操作关系型数据库

通过sql可以创建、修改账号并控制账号权限;  通过sql可以创建、修改数据库、表;  通过sql可以增删改查数据;

可以通过SQL语句中的DML语言来实现数据的操作,包括

  1. 使用INSERT实现数据的插入
  2. UPDATE实现数据的更新
  3. 使用DELETE实现数据的删除
  4. 使用SELECT查询数据以及。

1.1数据的增删改查

插入数据INSERT 

1. 插入完整数据(顺序插入)
    语法一:
    INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);
    语法二:
    INSERT INTO 表名 VALUES (值1,值2,值3…值n);

2. 指定字段插入数据
    语法:
    INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);

3. 插入多条记录
    语法:
    INSERT INTO 表名 VALUES
        (值1,值2,值3…值n),
        (值1,值2,值3…值n),
        (值1,值2,值3…值n);

4. 插入查询结果
    语法:
    INSERT INTO 表名(字段1,字段2,字段3…字段n) 
                    SELECT (字段1,字段2,字段3…字段n) FROM 表2
                    WHERE …;
更新数据UPDATE 
语法:
    UPDATE 表名 SET
        字段1=值1,
        字段2=值2,
        WHERE CONDITION;
示例:
    UPDATE mysql.user SET password=password(‘123’) 
        where user=’root’ and host=’localhost’;

删除数据DELETE 
语法:
    DELETE FROM 表名 
        WHERE CONITION;
示例:
    DELETE FROM mysql.user 
        WHERE password=’’;

练习:
    更新MySQL root用户密码为mysql123
    删除除从本地登录的root用户以外的所有用户
View Code

1.2单表查询

把表中所有行和列都列举出来使用“*” 来表示所有的列如select * from student; 

查询部分行和列需要列举不同的列名,而查询部分分行需要where子句进行条件限制,如select studentNo,studentName,address from student where address = \'河南新乡\';

在查询中使用列的别名,AS子句可以用来改变结果集中列的名称,也可以为组合或计算出的列指定名称,让标题列的信息更易懂。如select studentNo AS 学生编号,studentName as 学生姓名,address as 学生地址 from student where address = ‘河南新乡’;   还有一种情况是为通过计算、合并得到的新列命名 如select firstName+ ‘.’+lastName as 姓名 from employee

 

单表查询

select distinct 字段1,字段2,字段3 from 库.表 
    where 条件
    group by 分组条件
    having 过滤  having运行完之后不是去运行order,而是去运行distinct后边的字段,进行去重;distinct运行完之后再运行order by
    order by 排序字段
    limit n; 最后再运行limit
#########简单查询 
mysql> use db5;
Database changed
mysql> desc employee;
+--------------+-----------------------+------+-----+---------+----------------+
| Field        | Type                  | Null | Key | Default | Extra          |
+--------------+-----------------------+------+-----+---------+----------------+
| id           | int(11)               | NO   | PRI | NULL    | auto_increment |
| name         | varchar(20)           | NO   |     | NULL    |                |
| sex          | enum(\'male\',\'female\') | NO   |     | male    |                |
| age          | int(3) unsigned       | NO   |     | 28      |                |
| hire_date    | date                  | NO   |     | NULL    |                |
| post         | varchar(50)           | YES  |     | NULL    |                |
| post_comment | varchar(100)          | YES  |     | NULL    |                |
| salary       | double(15,2)          | YES  |     | NULL    |                |
| office       | int(11)               | YES  |     | NULL    |                |
| depart_id    | int(11)               | YES  |     | NULL    |                |
+--------------+-----------------------+------+-----+---------+----------------+
rows in set (0.16 sec)

mysql> select * from employee;
+----+------------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
| id | name       | sex    | age | hire_date  | post                                    | post_comment | salary     | office | depart_id |
+----+------------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
|  1 | egon       | male   |  18 | 2017-03-01 | 老男孩驻沙河办事处外交大使                  | NULL         |    7300.33 |    401 |         1 |
|  2 | alex       | male   |  78 | 2015-03-02 | teacher                                 | NULL         | 1000000.31 |    401 |         1 |
|  3 | wupeiqi    | male   |  81 | 2013-03-05 | teacher                                 | NULL         |    8300.00 |    401 |         1 |
|  4 | yuanhao    | male   |  73 | 2014-07-01 | teacher                                 | NULL         |    3500.00 |    401 |         1 |
|  5 | liwenzhou  | male   |  28 | 2012-11-01 | teacher                                 | NULL         |    2100.00 |    401 |         1 |
|  6 | jingliyang | female |  18 | 2011-02-11 | teacher                                 | NULL         |    9000.00 |    401 |         1 |
|  7 | jinxin     | male   |  18 | 1900-03-01 | teacher                                 | NULL         |   30000.00 |    401 |         1 |
|  8 | 成龙       | male   |  48 | 2010-11-11 | teacher                                 | NULL         |   10000.00 |    401 |         1 |
|  9 | 歪歪       | female |  48 | 2015-03-11 | sale                                    | NULL         |    3000.13 |    402 |         2 |
| 10 | 丫丫       | female |  38 | 2010-11-01 | sale                                    | NULL         |    2000.35 |    402 |         2 |
| 11 | 丁丁       | female |  18 | 2011-03-12 | sale                                    | NULL         |    1000.37 |    402 |         2 |
| 12 | 星星       | female |  18 | 2016-05-13 | sale                                    | NULL         |    3000.29 |    402 |         2 |
| 13 | 格格       | female |  28 | 2017-01-27 | sale                                    | NULL         |    4000.33 |    402 |         2 |
| 14 | 张野       | male   |  28 | 2016-03-11 | operation                               | NULL         |   10000.13 |    403 |         3 |
| 15 | 程咬金     | male   |  18 | 1997-03-12 | operation                               | NULL         |   20000.00 |    403 |         3 |
| 16 | 程咬银     | female |  18 | 2013-03-11 | operation                               | NULL         |   19000.00 |    403 |         3 |
| 17 | 程咬铜     | male   |  18 | 2015-04-11 | operation                               | NULL         |   18000.00 |    403 |         3 |
| 18 | 程咬铁     | female |  18 | 2014-05-12 | operation                               | NULL         |   17000.00 |    403 |         3 |
+----+------------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
rows in set (0.00 sec)
View Code
mysql> select id,name,salary from employee;
+----+------------+------------+
| id | name       | salary     |
+----+------------+------------+
|  1 | egon       |    7300.33 |
|  2 | alex       | 1000000.31 |
|  3 | wupeiqi    |    8300.00 |
|  4 | yuanhao    |    3500.00 |
|  5 | liwenzhou  |    2100.00 |
|  6 | jingliyang |    9000.00 |
|  7 | jinxin     |   30000.00 |
|  8 | 成龙       |   10000.00 |
|  9 | 歪歪       |    3000.13 |
| 10 | 丫丫       |    2000.35 |
| 11 | 丁丁       |    1000.37 |
| 12 | 星星       |    3000.29 |
| 13 | 格格       |    4000.33 |
| 14 | 张野       |   10000.13 |
| 15 | 程咬金     |   20000.00 |
| 16 | 程咬银     |   19000.00 |
| 17 | 程咬铜     |   18000.00 |
| 18 | 程咬铁     |   17000.00 |
+----+------------+------------+
rows in set (0.00 sec)

mysql> select post from employee;
+-----------------------------------------+
| post                                    |
+-----------------------------------------+
| 老男孩驻沙河办事处外交大使              |
| teacher                                 |
| teacher                                 |
| teacher                                 |
| teacher                                 |
| teacher                                 |
| teacher                                 |
| teacher                                 |
| sale                                    |
| sale                                    |
| sale                                    |
| sale                                    |
| sale                                    |
| operation                               |
| operation                               |
| operation                               |
| operation                               |
| operation                               |
+-----------------------------------------+
rows in set (0.00 sec)

mysql> select distinct post from employee;  ##distinct是避免重复
+-----------------------------------------+
| post                                    |
+-----------------------------------------+
| 老男孩驻沙河办事处外交大使                  |
| teacher                                 |
| sale                                    |
| operation                               |
+-----------------------------------------+
rows in set (0.08 sec)

mysql> select name,salary*12 from employee;  ##通过四则运算查询 
+------------+-------------+
| name       | salary*12   |
+------------+-------------+
| egon       |    87603.96 |
| alex       | 12000003.72 |
| wupeiqi    |    99600.00 |
| yuanhao    |    42000.00 |
| liwenzhou  |    25200.00 |
| jingliyang |   108000.00 |
| jinxin     |   360000.00 |
| 成龙       |   120000.00 |
| 歪歪       |    36001.56 |
| 丫丫       |    24004.20 |
| 丁丁       |    12004.44 |
| 星星       |    36003.48 |
| 格格       |    48003.96 |
| 张野       |   120001.56 |
| 程咬金     |   240000.00 |
| 程咬银     |   228000.00 |
| 程咬铜     |   216000.00 |
| 程咬铁     |   204000.00 |
+------------+-------------+
rows in set (0.09 sec)

mysql> select name,salary*12 annual_salary from employee;
+------------+---------------+
| name       | annual_salary |
+------------+---------------+
| egon       |      87603.96 |
| alex       |   12000003.72 |
| wupeiqi    |      99600.00 |
| yuanhao    |      42000.00 |
| liwenzhou  |      25200.00 |
| jingliyang |     108000.00 |
| jinxin     |     360000.00 |
| 成龙       |     120000.00 |
| 歪歪       |      36001.56 |
| 丫丫       |      24004.20 |
| 丁丁       |      12004.44 |
| 星星       |      36003.48 |
| 格格       |      48003.96 |
| 张野       |     120001.56 |
| 程咬金     |     240000.00 |
| 程咬银     |     228000.00 |
| 程咬铜     |     216000.00 |
| 程咬铁     |     204000.00 |
+------------+---------------+
rows in set (0.00 sec)

mysql> select concat(\'姓名:\', name, \'性别:\', sex)as info from employee;  ##concat通常用于连接字符串 
+--------------------------------+
| info                           |
+--------------------------------+
| 姓名:egon性别:male             |
| 姓名:alex性别:male             |
| 姓名:wupeiqi性别:male          |
| 姓名:yuanhao性别:male          |
| 姓名:liwenzhou性别:male        |
| 姓名:jingliyang性别:female     |
| 姓名:jinxin性别:male           |
| 姓名:成龙性别:male             |
| 姓名:歪歪性别:female           |
| 姓名:丫丫性别:female           |
| 姓名:丁丁性别:female           |
| 姓名:星星性别:female           |
| 姓名:格格性别:female           |
| 姓名:张野性别:male             |
| 姓名:程咬金性别:male           |
| 姓名:程咬银性别:female         |
| 姓名:程咬铜性别:male           |
| 姓名:程咬铁性别:female         |
+--------------------------------+
rows in set (0.14 sec)

mysql> select concat(\'姓名:\', name, \'性别:\', sex) as info, concat(\'年薪:\', salar
y*12) as annual_salary from employee;
+--------------------------------+--------------------+
| info                           | annual_salary      |
+--------------------------------+--------------------+
| 姓名:egon性别:male             | 年薪:87603.96      |
| 姓名:alex性别:male             | 年薪:12000003.72   |
| 姓名:wupeiqi性别:male          | 年薪:99600.00      |
| 姓名:yuanhao性别:male          | 年薪:42000.00      |
| 姓名:liwenzhou性别:male        | 年薪:25200.00      |
| 姓名:jingliyang性别:female     | 年薪:108000.00     |
| 姓名:jinxin性别:male           | 年薪:360000.00     |
| 姓名:成龙性别:male             | 年薪:120000.00     |
| 姓名:歪歪性别:female           | 年薪:36001.56      |
| 姓名:丫丫性别:female           | 年薪:24004.20      |
| 姓名:丁丁性别:female           | 年薪:12004.44      |
| 姓名:星星性别:female           | 年薪:36003.48      |
| 姓名:格格性别:female           | 年薪:48003.96      |
| 姓名:张野性别:male             | 年薪:120001.56     |
| 姓名:程咬金性别:male           | 年薪:240000.00     |
| 姓名:程咬银性别:female         | 年薪:228000.00     |
| 姓名:程咬铜性别:male           | 年薪:216000.00     |
| 姓名:程咬铁性别:female         | 年薪:204000.00     |
+--------------------------------+--------------------+
rows in set (0.00 sec)


mysql> select concat(name, \':\', age) from employee;
+------------------------+
| concat(name, \':\', age) |
+------------------------+
| egon:18                |
| alex:78                |
| wupeiqi:81             |
| yuanhao:73             |
| liwenzhou:28           |
| jingliyang:18          |
| jinxin:18              |
| 成龙:48                |
| 歪歪:48                |
| 丫丫:38                |
| 丁丁:18                |
| 星星:18                |
| 格格:28                |
| 张野:28                |
| 程咬金:18              |
| 程咬银:18              |
| 程咬铜:18              |
| 程咬铁:18              |
+------------------------+
rows in set (0.00 sec)

mysql> select concat_ws(\':\', name, sex, age) from employee;  ##concat_ws()第一个参数为分隔符
+--------------------------------+
| concat_ws(\':\', name, sex, age) |
+--------------------------------+
| egon:male:18                   |
| alex:male:78                   |
| wupeiqi:male:81                |
| yuanhao:male:73                |
| liwenzhou:male:28              |
| jingliyang:female:18           |
| jinxin:male:18                 |
| 成龙:male:48                   |
| 歪歪:female:48                 |
| 丫丫:female:38                 |
| 丁丁:female:18                 |
| 星星:female:18                 |
| 格格:female:28                 |
| 张野:male:28                   |
| 程咬金:male:18                 |
| 程咬银:female:18               |
| 程咬铜:male:18                 |
| 程咬铁:female:18               |
+--------------------------------+
rows in set (0.00 sec)
View Code
练习:
1 查出所有员工的名字,薪资,格式为 <名字:egon> <薪资:3000> 2 查出所有的岗位(去掉重复) 3 查出所有员工名字,以及他们的年薪,年薪的字段名为annual_year
mysql> select concat(\'<名字:\', name, \'>\')from employee;
+--------------------------------+
| concat(\'<名字>:\', name, \'>\')   |
+--------------------------------+
| <名字:egon>                   |
| <名字:alex>                   |
| <名字:wupeiqi>                |
| <名字:yuanhao>                |
| <名字:liwenzhou>              |
| <名字:jingliyang>             |
| <名字:jinxin>                 |
| <名字:成龙>                   |
| <名字:歪歪>                   |
| <名字:丫丫>                   |
| <名字:丁丁>                   |
| <名字:星星>                   |
| <名字:格格>                   |
| <名字:张野>                   |
| <名字:程咬金>                 |
| <名字:程咬银>                 |
| <名字:程咬铜>                 |
| <名字:程咬铁>                 |
+--------------------------------+
rows in set (0.00 sec)

mysql> select concat(\'<名字:\', name, \'>\'), concat(\'<薪资:\', salary, \'>\') from employee;
+--------------------------------+---------------------------------+
| concat(\'<名字>:\', name, \'>\')   | concat(\'<薪资:\', salary, \'>\')   |
+--------------------------------+---------------------------------+
| <名字:egon>                   | <薪资:7300.33>                  |
| <名字:alex>                   | <薪资:1000000.31>               |
| <名字:wupeiqi>                | <薪资:8300.00>                  |
| <名字:yuanhao>                | <薪资:3500.00>                  |
| <名字:liwenzhou>              | <薪资:2100.00>                  |
| <名字:jingliyang>             | <薪资:9000.00>                  |
| <名字:jinxin>                 | <薪资:30000.00>                 |
| <名字:成龙>                   | <薪资:10000.00>                 |
| <名字:歪歪>                   | <薪资:3000.13>                  |
| <名字:丫丫>                   | <薪资:2000.35>                  |
| <名字:丁丁>                   | <薪资:1000.37>                  |
| <名字:星星>                   | <薪资:3000.29>                  |
| <名字:格格>                   | <薪资:4000.33>                  |
| <名字:张野>                   | <薪资:10000.13>                 |
| <名字:程咬金>                 | <薪资:20000.00>                 |
| <名字:程咬银>                 | <薪资:19000.00>                 |
| <名字>:程咬铜>                 | <薪资:18000.00>                 |
| <名字:程咬铁>                 | <薪资:17000.00>                 |
+--------------------------------+---------------------------------+
rows in set (0.00 sec)
View Code
#where约束
select id,name,age from employee where id > 7; #单条件
    
select name,post,salary from employee where post=\'teacher\' and salary > 8000;

select name,salary from employee where salary >= 20000 and salary <= 30000;
select name,salary from employee where salary between 20000 and 30000;

select name,salary from employee where salary < 20000 or salary > 30000;
select name,salary from employee where salary not between 20000 and 30000;


select * from employee where age = 73 or age = 81 or age = 28;
select * from employee where age in (73,81,28);

select * from employee where post_comment is Null; #判断是否为空
select * from employee where post_comment is not Null;

select * from employee where name like "jin%"; #模糊匹配 %代表任意多个字符,jin开头的不管后边是什么
select * from employee where name like "jin___";  ##___三个下划线代表3个任意字符

mysql> select id,name,age from employee where id > 7;
+----+-----------+-----+
| id | name      | age |
+----+-----------+-----+
|  8 | 成龙      |  48 |
|  9 | 歪歪      |  48 |
| 10 | 丫丫      |  38 |
| 11 | 丁丁      |  18 |
| 12 | 星星      |  18 |
| 13 | 格格      |  28 |
| 14 | 张野      |  28 |
| 15 | 程咬金    |  18 |
| 16 | 程咬银    |  18 |
| 17 | 程咬铜    |  18 |
| 18 | 程咬铁    |  18 |
+----+-----------+-----+
rows in set (0.13 sec)


mysql> select name,post,salary from employee where post=\'teacher\' and salary > 8
000;
+------------+---------+------------+
| name       | post    | salary     |
+------------+---------+------------+
| alex       | teacher | 1000000.31 |
| wupeiqi    | teacher |    8300.00 |
| jingliyang | teacher |    9000.00 |
| jinxin     | teacher |   30000.00 |
| 成龙       | teacher |   10000.00 |
+------------+---------+------------+
rows in set (0.04 sec)

mysql> select name,salary from employee where salary >=20000 and salary <=30000;

+-----------+----------+
| name      | salary   |
+-----------+----------+
| jinxin    | 30000.00 |
| 程咬金    | 20000.00 |
+-----------+----------+
rows in set (0.00 sec)

mysql> select name,salary from employee where salary between 20000 and 30000;
+-----------+----------+
| name      | salary   |
+-----------+----------+
| jinxin    | 30000.00 |
| 程咬金    | 20000.00 |
+-----------+----------+
rows in set (0.07 sec)

mysql> select name,salary from employee where salary < 20000 or salary > 30000;
+------------+------------+
| name       | salary     |
+------------+------------+
| egon       |    7300.33 |
| alex       | 1000000.31 |
| wupeiqi    |    8300.00 |
| yuanhao    |    3500.00 |
| liwenzhou  |    2100.00 |
| jingliyang |    9000.00 |
| 成龙       |   10000.00 |
| 歪歪       |    3000.13 |
| 丫丫       |    2000.35 |
| 丁丁       |    1000.37 |
| 星星       |    3000.29 |
| 格格       |    4000.33 |
| 张野       |   10000.13 |
| 程咬银     |   19000.00 |
| 程咬铜     |   18000.00 |
| 程咬铁     |   17000.00 |
+------------+------------+
rows in set (0.01 sec)

mysql> select name,salary from employee where salary not between 20000 and 30000
;
+------------+------------+
| name       | salary     |
+------------+------------+
| egon       |    7300.33 |
| alex       | 1000000.31 |
| wupeiqi    |    8300.00 |
| yuanhao    |    3500.00 |
| liwenzhou  |    2100.00 |
| jingliyang |    9000.00 |
| 成龙       |   10000.00 |
| 歪歪       |    3000.13 |
| 丫丫       |    2000.35 |
| 丁丁       |    1000.37 |
| 星星       |    3000.29 |
| 格格       |    4000.33 |
| 张野       |   10000.13 |
| 程咬银     |   19000.00 |
| 程咬铜     |   18000.00 |
| 程咬铁     |   17000.00 |
+------------+------------+
rows in set (0.00 sec)

mysql> select * from employee where age =73 or age = 81 or age = 28;
+----+-----------+--------+-----+------------+-----------+--------------+----------+--------+-----------+
| id | name      | sex    | age | hire_date  | post      | post_comment | salary   | office | depart_id |
+----+-----------+--------+-----+------------+-----------+--------------+----------+--------+-----------+
|  3 | wupeiqi   | male   |  81 | 2013-03-05 | teacher   | NULL         |  8300.00 |    401 |         1 |
|  4 | yuanhao   | male   |  73 | 2014-07-01 | teacher   | NULL         |  3500.00 |    401 |         1 |
|  5 | liwenzhou | male   |  28 | 2012-11-01 | teacher   | NULL         |  2100.00 |    401 |         1 |
| 13 | 格格      | female |  28 | 2017-01-27 | sale      | NULL         |  4000.33 |    402 |         2 |
| 14 | 张野      | male   |  28 | 2016-03-11 | operation | NULL         | 10000.13 |    403 |         3 |
+----+-----------+--------+-----+------------+-----------+--------------+----------+--------+-----------+
rows in set (0.00 sec)

mysql> select * from employee where post_comment is Null;
+----+------------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
| id | name       | sex    | age | hire_date  | post                                    | post_comment | salary     | office | depart_id |
+----+------------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
|  1 | egon       | male   |  18 | 2017-03-01 | 老男孩驻沙河办事处外交大使              | NULL         |    7300.33 |    401 |         1 |
|  2 | alex       | male   |  78 | 2015-03-02 | teacher                                 | NULL         | 1000000.31 |    401 |         1 |
|  3 | wupeiqi    | male   |  81 | 2013-03-05 | teacher                                 | NULL         |    8300.00 |    401 |         1 |
|  4 | yuanhao    | male   |  73 | 2014-07-01 | teacher                                 | NULL         |    3500.00 |    401 |         1 |
|  5 | liwenzhou  | male   |  28 | 2012-11-01 | teacher                                 | NULL         |    2100.00 |    401 |         1 |
|  6 | jingliyang | female |  18 | 2011-02-11 | teacher                                 | NULL         |    9000.00 |    401 |         1 |
|  7 | jinxin     | male   |  18 | 1900-03-01 | teacher                                 | NULL         |   30000.00 |    401 |         1 |
|  8 | 成龙       | male   |  48 | 2010-11-11 | teacher                                 | NULL         |   10000.00 |    401 |         1 |
|  9 | 歪歪       | female |  48 | 2015-03-11 | sale                                    | NULL         |    3000.13 |    402 |         2 |
| 10 | 丫丫       | female |  38 | 2010-11-01 | sale                                    | NULL         |    2000.35 |    402 |         2 |
| 11 | 丁丁       | female |  18 | 2011-03-12 | sale                                    | NULL         |    1000.37 |    402 |         2 |
| 12 | 星星       | female |  18 | 2016-05-13 | sale                                    | NULL         |    3000.29 |    402 |         2 |
| 13 | 格格       | female |  28 | 2017-01-27 | sale                                    | NULL         |    4000.33 |    402 |         2 |
| 14 | 张野       | male   |  28 | 2016-03-11 | operation                               | NULL         |   10000.13 |    403 |         3 |
| 15 | 程咬金     | male   |  18 | 1997-03-12 | operation                               | NULL         |   20000.00 |    403 |         3 |
| 16 | 程咬银     | female |  18 | 2013-03-11 | operation                               | NULL         |   19000.00 |    403 |         3 |
| 17 | 程咬铜     | male   |  18 | 2015-04-11 | operation                               | NULL         |   18000.00 |    403 |         3 |
| 18 | 程咬铁     | female |  18 | 2014-05-12 | operation                               | NULL         |   17000.00 |    403 |         3 |
+----+------------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
rows in set (0.00 sec)

mysql> select * from employee where name like "jin%";  ##模糊匹配,%代表任意字符,jin开头的不管后边是什么
+----+------------+--------+-----+------------+---------+--------------+----------+--------+-----------+
| id | name       | sex    | age | hire_date  | post    | post_comment | salary| office | depart_id |
+----+------------+--------+-----+------------+---------+--------------+----------+--------+-----------+
|  6 | jingliyang | female |  18 | 2011-02-11 | teacher | NULL         |  9000.00 |    401 |         1 |
|  7 | jinxin     | male   |  18 | 1900-03-01 | teacher | NULL         | 30000.00 |    401 |         1 |
+----+------------+--------+-----+------------+---------+--------------+----------+--------+-----------+
rows in set (0.09 sec)

mysql> select * from employee where name like "jin___";  ##___三个下划线代表3个任意字符。 
+----+--------+------+-----+------------+---------+--------------+----------+--------+-----------+
| id | name   | sex  | age | hire_date  | post    | post_comment | salary   | office | depart_id |
+----+--------+------+-----+------------+---------+--------------+----------+--------+-----------+
|  7 | jinxin | male |  18 | 1900-03-01 | teacher | NULL         | 30000.00 |401 |         1 |
+----+--------+------+-----+------------+---------+--------------+----------+--------+-----------+
row in set (0.00 sec)
View Code
group by 分组查询 

#group by分组 在where之后运行
分组就是按照相应字段进行归类,每后边那个字就是要分的字段
mysql> set global sql_mode="ONLY_FULL_GROUP_BY"; 分组之后,只能取分组的字段,以及每个组 聚合的结果 select post from employee group by post;
单独使用GROUP BY关键字分组
    SELECT post FROM employee GROUP BY post;
    注意:我们按照post字段分组,那么select查询的字段只能是post,想要获取组内的其他相关信息,需要借助函数

GROUP BY关键字和GROUP_CONCAT()函数一起使用
    SELECT post,GROUP_CONCAT(name) FROM employee GROUP BY post;#按照岗位分组,并查看组内成员名
    SELECT post,GROUP_CONCAT(name) as emp_members FROM employee GROUP BY post;

GROUP BY与聚合函数一起使用
    select post,count(id) as count from employee group by post;#按照岗位分组,并查看每个组有多少人
View Code
#聚合函数 #以组为单位进行统计,不再考虑个人
  max
  min
  avg
  sum
  count

select post,count(id) as emp_count from employee group by post;##每个部门/职位有多少个员工;先确定你的表
select post,max(salary) as emp_max from employee group by post;
select post,min(salary) as emp_min from employee group by post;
select post,avg(salary) as emp_avg from employee group by post;
select post,sum(age) as emp_sum from employee group by post;
mysql> select * from employee group by post;
+----+--------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
| id | name   | sex    | age | hire_date  | post                                    | post_comment | salary     | office | depart_id |
+----+--------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
| 14 | 张野   | male   |  28 | 2016-03-11 | operation                               | NULL         |   10000.13 |    403 |         3 |
|  9 | 歪歪   | female |  48 | 2015-03-11 | sale                                    | NULL         |    3000.13 |    402 |         2 |
|  2 | alex   | male   |  78 | 2015-03-02 | teacher                                 | NULL         | 1000000.31 |    401 |         1 |
|  1 | egon   | male   |  18 | 2017-03-01 | 老男孩驻沙河办事处外交大使              | NULL         |    7300.33 |    401 |         1 |
+----+--------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
rows in set (0.08 sec)

#由于没有设置ONLY_FULL_GROUP_BY,于是也可以有结果,默认都是组内的第一条记录(就是按照post分组,如operation组内的第一条记录。),但其实这是没有意义的
mysql> set global sql_mode="ONLY_FULL_GROUP_BY";
Query OK, 0 rows affected (0.11 sec)   ##设置成功一定要先退出,然后重新登录方可生效。然后你再select * 或者 select name就会报错了。

mysql> exit
Bye

C:\\Users\\Administrator>mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \\g.
Your MySQL connection id is 5
Server version: 5.6.39 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the current input statement.

mysql> use db5;
Database changed
mysql> select * from employee group by post;
ERROR 1055 (42000): \'db5.employee.id\' isn\'t in GROUP BY
mysql> select post from employee group by post;
+-----------------------------------------+
| post                                    |
+-----------------------------------------+
| operation                               |
| sale                                    |
| teacher                                 |
| 老男孩驻沙河办事处外交大使              |
+-----------------------------------------+
rows in set (0.00 sec)

mysql> select post,count(id) as emp_count from employee group by post;  #查询组内的id数
+-----------------------------------------+-----------+
| post                                    | emp_count |
+-----------------------------------------+-----------+
| operation                               |         5 |
| sale                                    |         5 |
| teacher                                 |         7 |
| 老男孩驻沙河办事处外交大使                  |         1 |
+-----------------------------------------+-----------+
rows in set (0.06 sec)
View Code
强调:如果我们用unique的字段作为分组的依据,则每一条记录自成一组,这种分组没有意义
多条记录之间的某个字段值相同,该字段通常用来作为分组的依据
#没有group by则默认整体算作一组
select max(salary) from employee; #取所有员工的最高工资

#group_concat(name)   职位包含的所有员工成员的名字
select post,group_concat(name) from employee group by post;
mysql> select max(salary) from employee;
+-------------+
| max(salary) |
+-------------+
|  1000000.31 |
+-------------+
row in set (0.07 sec)

mysql> select post,group_concat(name) from employee group by post; ##也可以查询组内成员的性别group_concat(sex);
+-----------------------------------------+-------------------------------------
| post                                    | group_concat(name)
+-----------------------------------------+-------------------------------------
| operation                               | 程咬铁,程咬铜,程咬银,程咬金,张野
                    |
| sale                                    | 格格,星星,丁丁,丫丫,歪歪
                    |
| teacher                                 | 成龙,jinxin,jingliyang,liwenzhou,yuanhao,wupeiqi,alex   |

| 老男孩驻沙河办事处外交大使                  | egon
                    |
+-----------------------------------------+-------------------------------------
rows in set (0.01 sec)
View Code
#练习:
1. 查询岗位名以及岗位包含的所有员工名字  #先确定你查的是哪张表,有没有过滤条件where,有没有分组分类的;
2. 先取出年龄在50以上的然后再 查询岗位名以及各岗位内包含的员工个数 
3. 查询公司内男员工和女员工的个数
4. 查询岗位名以及各岗位的平均薪资
5. 查询岗位名以及各岗位的最高薪资
6. 查询岗位名以及各岗位的最低薪资
7. 查询男员工与男员工的平均薪资,女员工与女员工的平均薪资
mysql> select post,group_concat(name) from  employee group by post;
+-----------------------------------------+------------------------------------
| post                                    | group_concat(name)
+-----------------------------------------+------------------------------------
| operation                               | 程咬铁,程咬铜,程咬银,程咬金,张野
                    |
| sale                                    | 格格,星星,丁丁,丫丫,歪歪
                    |
| teacher                                 | 成龙,jinxin,jingliyang,liwenzhou,yunhao,wupeiqi,alex   |

| 老男孩驻沙河办事处外交大使                  | egon
                    |
+-----------------------------------------+------------------------------------
rows in set (0.00 sec)

mysql> select post,count(id) from employee where age >50 group by post;
+---------+-----------+
| post    | count(id) |
+---------+-----------+
| teacher |         3 |
+---------+-----------+
row in set (0.00 sec)

mysql> select sex,count(id) from employee group by sex;
+--------+-----------+
| sex    | count(id) |
+--------+-----------+
| male   |        10 |
| female |         8 |
+--------+-----------+
rows in set (0.00 sec)

mysql> select sex,avg(salary) from employee group by sex;
+--------+---------------+
| sex    | avg(salary)   |
+--------+---------------+
| male   | 110920.077000 |
| female |   7250.183750 |
+--------+---------------+
rows in set (0.00 sec)

mysql> select sex,max(age) from employee group by sex;
+--------+----------+
| sex    | max(age) |
+--------+----------+
| male   |       81 |
| female |       48 |
+--------+----------+
rows in set (0.06 sec)
View Code
#having 过滤条件 在分组之后进行;where在分组之前  (过滤的是分组组内的成员)

例如:
1. 查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数  #聚合出员工个数
3. 查询各岗位平均薪资大于10000的岗位名、平均工资
4. 查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资  and avg(salary) < 20000;
select post,group_concat(name),count(id) from employee group by post;

select post,group_concat(name),count(id) from employee group by post having count(id) < 2;

select post,avg(salary) from employee group by post having avg(salary) > 10000;
mysql> select post,group_concat(name), count(id) from employee group by post;
+-----------------------------------------+-------------------------------------
| post              |count(id)  |         | group_concat(name)
+-----------------------------------------+-------------------------------------
| operation         |         5 |         | 程咬铁,程咬铜,程咬银,程咬金,张野

| sale              |         5 |         | 格格,星星,丁丁,丫丫,歪歪

| teacher           |         7 |         | 成龙,jinxin,jingliyang,liwenzhou,yuanhao,wupeiqi,alex   

| 老男孩驻沙河办事处外交大使|     1 |         | egon
+-----------------------------------------+-------------------------------------
rows in set (0.00 sec)

mysql> select post,group_concat(name),count(id) from employee group by post having count(id) < 2;
+-----------------------------------------+--------------------+-----------+
| post                                    | group_concat(name) | count(id) |
+-----------------------------------------+--------------------+-----------+
| 老男孩驻沙河办事处外交大使                  | egon               |         1 |
+-----------------------------------------+--------------------+-----------+
row in set (0.01 sec)

mysql> select post,avg(salary) from employee group by post having avg(salary) >
    -> \\c
mysql> select post, avg(salary) from employee group by post having avg(salary) > 10000 and avg(salary) < 20000;
+-----------+--------------+
| post      | avg(salary)  |
+-----------+--------------+
| operation | 16800.026000 |
+-----------+--------------+
row in set (0.00 sec)
View Code
#order by  默认就是升序
select * from employee order by age asc; #升序,不加asc也可以,默认  从低到高
select * from employee order by age desc; #降序                   从高到低

select * from employee order by age asc,id desc; #先按照age升序排,如果age相同则按照id降序排;

聚合函数不能用在where内;分完组之后才能用聚合函数,having可以用;select max(salary) from employee 这里边运行max的时候就已经分组了; 先找表,再where再分组,...最后才打印select你想打印的内容
select distinct post,count(id) as emp_count from employee
    where salary > 1000
    group by post
    having count(id) > 1 #在这个位置不能用emp_count>1,因为运行having之前还没运行distinct这个字段呢
    order by emp_count desc  #可以用count(id),它是在分组之后干的;emp_count也可以用,因为order by 是在distinct后边运行;
mysql> select * from employee order by age asc, id desc;  #在age asc 的组内进行id排序。
+----+------------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
| id | name       | sex    | age | hire_date  | post                                    | post_comment | salary     | office | depart_id |
+----+------------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
| 18 | 程咬铁     | female |  18 | 2014-05-12 | operation                               | NULL         |   17000.00 |    403 |         3 |
| 17 | 程咬铜     | male   |  18 | 2015-04-11 | operation                               | NULL         |   18000.00 |    403 |         3 |
| 16 | 程咬银     | female |  18 | 2013-03-11 | operation                               | NULL         |   19000.00 |    403 |         3 |
| 15 | 程咬金     | male   |  18 | 1997-03-12 | operation                               | NULL         |   20000.00 |    403 |         3 |
| 12 | 星星       | female |  18 | 2016-05-13 | sale                                    | NULL         |    3000.29 |    402 |         2 |
| 11 | 丁丁       | female |  18 | 2011-03-12 | sale                                    | NULL         |    1000.37 |    402 |         2 |
|  7 | jinxin     | male   |  18 | 1900-03-01 | teacher                                 | NULL         |   30000.00 |    401 |         1 |
|  6 | jingliyang | female |  18 | 2011-02-11 | teacher                                 | NULL         |    9000.00 |    401 |         1 |
|  1 | egon       | male   |  18 | 2017-03-01 | 老男孩驻沙河办事处外交大使              | NULL         |    7300.33 |    401 |         1 |
| 14 | 张野       | male   |  28 | 2016-03-11 | operation                               | NULL         |   10000.13 |    403 |         3 |
| 13 | 格格       | female |  28 | 2017-01-27 | sale                                    | NULL         |    4000.33 |    402 |         2 |
|  5 | liwenzhou  | male   |  28 | 2012-11-01 | teacher                                 | NULL         |    2100.00 |    401 |         1 |
| 10 | 丫丫       | female |  38 | 2010-11-01 | sale                                    | NULL         |    2000.35 |    402 |         2 |
|  9 | 歪歪       | female |  48 | 2015-03-11 | sale                                    | NULL         |    3000.13 |    402 |         2 |
|  8 | 成龙       | male   |  48 | 2010-11-11 | teacher                                 | NULL         |   10000.00 |    401 |         1 |
|  4 | yuanhao    | male   |  73 | 2014-07-01 | teacher                                 | NULL         |    3500.00 |    401 |         1 |
|  2 | alex       | male   |  78 | 2015-03-02 | teacher                                 | NULL         | 1000000.31 |    401 |         1 |
|  3 | wupeiqi    | ma

以上是关于第八章| 2. MySQL数据库|数据操作| 权限管理的主要内容,如果未能解决你的问题,请参考以下文章

第八章|MySQL数据库|库操作|表操作

第八章数据库后台编程技术

MySQL_第八章

MySQL比知必会第八章 用通配符进行过滤

第八章· MySQL日志管理

第八章 linux磁盘与文件系统管理g