增删改
egon上课笔记
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db1 | | mysql | | performance_schema | | sb1 | | sb2 | | sb3 | | test | +--------------------+ 8 rows in set (0.00 sec) mysql> create database sb4; Query OK, 1 row affected (0.00 sec) mysql> use sb4; Database changed mysql> desc mysql.user; +------------------------+-----------------------------------+------+-----+----- ------------------+-------+ | Field | Type | Null | Key | Defa ult | Extra | +------------------------+-----------------------------------+------+-----+----- ------------------+-------+ | Host | char(60) | NO | PRI | | | | User | char(16) | NO | PRI | | | | Password | char(41) | NO | | | | | Select_priv | enum('N','Y') | NO | | N | | | Insert_priv | enum('N','Y') | NO | | N | | | Update_priv | enum('N','Y') | NO | | N | | | Delete_priv | enum('N','Y') | NO | | N | | | Create_priv | enum('N','Y') | NO | | N | | | Drop_priv | enum('N','Y') | NO | | N | | | Reload_priv | enum('N','Y') | NO | | N | | | Shutdown_priv | enum('N','Y') | NO | | N | | | Process_priv | enum('N','Y') | NO | | N | | | File_priv | enum('N','Y') | NO | | N | | | Grant_priv | enum('N','Y') | NO | | N | | | References_priv | enum('N','Y') | NO | | N | | | Index_priv | enum('N','Y') | NO | | N | | | Alter_priv | enum('N','Y') | NO | | N | | | Show_db_priv | enum('N','Y') | NO | | N | | | Super_priv | enum('N','Y') | NO | | N | | | Create_tmp_table_priv | enum('N','Y') | NO | | N | | | Lock_tables_priv | enum('N','Y') | NO | | N | | | Execute_priv | enum('N','Y') | NO | | N | | | Repl_slave_priv | enum('N','Y') | NO | | N | | | Repl_client_priv | enum('N','Y') | NO | | N | | | Create_view_priv | enum('N','Y') | NO | | N | | | Show_view_priv | enum('N','Y') | NO | | N | | | Create_routine_priv | enum('N','Y') | NO | | N | | | Alter_routine_priv | enum('N','Y') | NO | | N | | | Create_user_priv | enum('N','Y') | NO | | N | | | Event_priv | enum('N','Y') | NO | | N | | | Trigger_priv | enum('N','Y') | NO | | N | | | Create_tablespace_priv | enum('N','Y') | NO | | N | | | ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | | | ssl_cipher | blob | NO | | NULL | | | x509_issuer | blob | NO | | NULL | | | x509_subject | blob | NO | | NULL | | | max_questions | int(11) unsigned | NO | | 0 | | | max_updates | int(11) unsigned | NO | | 0 | | | max_connections | int(11) unsigned | NO | | 0 | | | max_user_connections | int(11) unsigned | NO | | 0 | | | plugin | char(64) | YES | | mysq l_native_password | | | authentication_string | text | YES | | NULL | | | password_expired | enum('N','Y') | NO | | N | | +------------------------+-----------------------------------+------+-----+----- ------------------+-------+ 43 rows in set (0.01 sec) mysql> create table user(host char(60),user char(16),password char(41)); Query OK, 0 rows affected (0.02 sec) mysql> desc user; +----------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+----------+------+-----+---------+-------+ | host | char(60) | YES | | NULL | | | user | char(16) | YES | | NULL | | | password | char(41) | YES | | NULL | | +----------+----------+------+-----+---------+-------+ 3 rows in set (0.04 sec) mysql> select host,user,password from mysql.user; +-----------+------+----------+ | host | user | password | +-----------+------+----------+ | localhost | root | | | 127.0.0.1 | root | | | ::1 | root | | | localhost | | | +-----------+------+----------+ 4 rows in set (0.00 sec) mysql> insert into user select host,user,password from mysql.user; Query OK, 4 rows affected (0.01 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> select*from user; +-----------+------+----------+ | host | user | password | +-----------+------+----------+ | localhost | root | | | 127.0.0.1 | root | | | ::1 | root | | | localhost | | | +-----------+------+----------+ 4 rows in set (0.00 sec) mysql> select*from user; +-----------+------+----------+ | host | user | password | +-----------+------+----------+ | localhost | root | | | 127.0.0.1 | root | | | ::1 | root | | | localhost | | | +-----------+------+----------+ 4 rows in set (0.00 sec) mysql> update user set user="ROOT" where host="localhost"; Query OK, 2 rows affected (0.01 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> select*from user; +-----------+------+----------+ | host | user | password | +-----------+------+----------+ | localhost | ROOT | | | 127.0.0.1 | root | | | ::1 | root | | | localhost | ROOT | | +-----------+------+----------+ 4 rows in set (0.00 sec) mysql> delete from user where user="ROOT"; Query OK, 4 rows affected (0.00 sec) mysql> select*from user; Empty set (0.00 sec) mysql> create table t5(id int); Query OK, 0 rows affected (0.02 sec) mysql> insert into t5 values(1),(2),(3),(4); Query OK, 4 rows affected (0.01 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> select*from t5; +------+ | id | +------+ | 1 | | 2 | | 3 | | 4 | +------+ 4 rows in set (0.00 sec) mysql> delete from t5 where id>2; Query OK, 2 rows affected (0.00 sec) mysql> delete from t5 where id>2; Query OK, 0 rows affected (0.00 sec) mysql> select*from t5; +------+ | id | +------+ | 1 | | 2 | +------+ 2 rows in set (0.00 sec)
column name 代表字段的意思
# 1、跟权限有关的几张表
user->db->table_priv->columns_priv
# 2、只创建账号
#create user tom@"客户端的ip" identified by "123";
create user tom@"192.168.15.%" identified by "123";
create user tom@"%" identified by "123";
#客户端:192.168.15.13 服务端:192.168.15.90
create user tom@"192.168.15.13 " identified by "123";
mysql -utom -p"123" -h 192.168.15.90 -P 3306
# 3、创建账号并且授权(只有root账号才能为其他账号授权grant)
# *.* ===> mysql.user
grant all on *.* to "tom"@"192.168.15.90" identified by "123";#all代表除了grant以外的所有权限
# db1.* ===> mysql.db
grant all on db1.* to "jack"@"192.168.15.90" identified by "123";#all代表除了grant以外的所有权限
# db1.t1 ===> mysql.tables_priv
grant all on db1.t1 to "rose"@"192.168.15.90" identified by "123";#all代表除了grant以外的所有权限
# db1.t1(id) ===> mysql.columns_priv
grant select(id),update(name) on db1.t1 to "lili"@"192.168.15.90" identified by "123";
# 修改完权限一定要
flush privileges;
drop user "tom"@"192.168.15.90";
drop user "jack"@"192.168.15.90";
drop user "rose"@"192.168.15.90";
drop user "lili"@"192.168.15.90";
flush privileges;
如何创建账号,以及具体步骤
增删改 视频有32分钟到结束
=============================================================================================================
03 单表查询的语法与关键字的执行优先级
#1、完整语法(语法级别关键字的排列顺序如下)
select distinct 字段1,字段2,字段3,... from 库名.表名 #distinct去重的意思
where 约束条件
group by 分组依据
having 过滤条件
order by 排序的字段
limit 限制显示的条数
;
# 必须要有的关键字如下:
select * from t1;
# 关键字执行的优先级
from
where
group by
having
distinct
order by
limit
def from():
pass
def where():
pass
def group():
pass
def having():
pass
def distinct():
pass
def order():
pass
def limit():
pass
def select():
f=from()
res1=where(f)
res2=group(res1)
res3=having(res2)
res4=distinct(res3)
res5=order(res4)
limit(res5)
where关键字
2、where
select * from emp where id >= 10 and id <=15; # 等同于select * from emp where id between 10 and 15;
select * from emp where id = 6 or id = 9 or id = 12; # 等同于select * from emp where id in (6,9,12);
_代表任意单个字符
%代表任意无穷个字符
select * from emp where name like "__";
select * from emp where name like "jin%";
select * from emp where id not in (6,9,12);
select * from emp where id not between 10 and 15;
egon上机笔记
----------+------------+ | id | name | sex | age | hire_date | post | pos t_comment | salary | +----+------------+--------+-----+------------+----------------------------+---- ----------+------------+ | 1 | egon | male | 18 | 2017-03-01 | 老男孩驻沙河办事处外交大使 | NUL L | 7300.33 | | 2 | alex | male | 78 | 2015-03-02 | teacher | NUL L | 1000000.31 | | 3 | wupeiqi | male | 81 | 2013-03-05 | teacher | NUL L | 8300.00 | | 4 | yuanhao | male | 73 | 2014-07-01 | teacher | NUL L | 3500.00 | | 5 | liwenzhou | male | 28 | 2012-11-01 | teacher | NUL L | 2100.00 | | 6 | jingliyang | female | 18 | 2011-02-11 | teacher | NUL L | 9000.00 | | 7 | jinxin | male | 18 | 1900-03-01 | teacher | NUL L | 30000.00 | | 8 | 成龙 | male | 48 | 2010-11-11 | teacher | NUL L | 10000.00 | | 9 | 歪歪 | female | 48 | 2015-03-11 | sale | NUL L | 3000.13 | | 10 | 丫丫 | female | 38 | 2010-11-01 | sale | NUL L | 2000.35 | | 11 | 丁丁 | female | 18 | 2011-03-12 | sale | NUL L | 1000.37 | | 12 | 星星 | female | 18 | 2016-05-13 | sale | NUL L | 3000.29 | | 13 | 格格 | female | 28 | 2017-01-27 | sale | NUL L | 4000.33 | | 14 | 张野 | male | 28 | 2016-03-11 | operation | NUL L | 10000.13 | | 15 | 程咬金 | male | 18 | 1997-03-12 | operation | NUL L | 20000.00 | | 16 | 程咬银 | female | 18 | 2013-03-11 | operation | NUL L | 19000.00 | | 17 | 程咬铜 | male | 18 | 2015-04-11 | operation | NUL L | 18000.00 | | 18 | 程咬铁 | female | 18 | 2014-05-12 | operation | NUL L | 17000.00 | +----+------------+--------+-----+------------+----------------------------+---- ----------+------------+ 18 rows in set (0.01 sec) mysql> select*from emp where id>10 and id<15; +----+------+--------+-----+------------+-----------+--------------+----------+ | id | name | sex | age | hire_date | post | post_comment | salary | +----+------+--------+-----+------------+-----------+--------------+----------+ | 11 | 丁丁 | female | 18 | 2011-03-12 | sale | NULL | 1000.37 | | 12 | 星星 | female | 18 | 2016-05-13 | sale | NULL | 3000.29 | | 13 | 格格 | female | 28 | 2017-01-27 | sale | NULL | 4000.33 | | 14 | 张野 | male | 28 | 2016-03-11 | operation | NULL | 10000.13 | +----+------+--------+-----+------------+-----------+--------------+----------+ 4 rows in set (0.00 sec) mysql> select*from emp where id=10 and id=15; Empty set (0.00 sec) mysql> select*from emp where id between 10 and 15; +----+--------+--------+-----+------------+-----------+--------------+---------- + | id | name | sex | age | hire_date | post | post_comment | salary | +----+--------+--------+-----+------------+-----------+--------------+---------- + | 10 | 丫丫 | female | 38 | 2010-11-01 | sale | NULL | 2000.35 | | 11 | 丁丁 | female | 18 | 2011-03-12 | sale | NULL | 1000.37 | | 12 | 星星 | female | 18 | 2016-05-13 | sale | NULL | 3000.29 | | 13 | 格格 | female | 28 | 2017-01-27 | sale | NULL | 4000.33 | | 14 | 张野 | male | 28 | 2016-03-11 | operation | NULL | 10000.13 | | 15 | 程咬金 | male | 18 | 1997-03-12 | operation | NULL | 20000.00 | +----+--------+--------+-----+------------+-----------+--------------+---------- + 6 rows in set (0.00 sec) mysql> select*from emp; +----+------------+--------+-----+------------+----------------------------+---- ----------+------------+ | id | name | sex | age | hire_date | post | pos t_comment | salary | +----+------------+--------+-----+------------+----------------------------+---- ----------+------------+ | 1 | egon | male | 18 | 2017-03-01 | 老男孩驻沙河办事处外交大使 | NUL L | 7300.33 | | 2 | alex | male | 78 | 2015-03-02 | teacher | NUL L | 1000000.31 | | 3 | wupeiqi | male | 81 | 2013-03-05 | teacher | NUL L | 8300.00 | | 4 | yuanhao | male | 73 | 2014-07-01 | teacher | NUL L | 3500.00 | | 5 | liwenzhou | male | 28 | 2012-11-01 | teacher | NUL L | 2100.00 | | 6 | jingliyang | female | 18 | 2011-02-11 | teacher | NUL L | 9000.00 | | 7 | jinxin | male | 18 | 1900-03-01 | teacher | NUL L | 30000.00 | | 8 | 成龙 | male | 48 | 2010-11-11 | teacher | NUL L | 10000.00 | | 9 | 歪歪 | female | 48 | 2015-03-11 | sale | NUL L | 3000.13 | | 10 | 丫丫 | female | 38 | 2010-11-01 | sale | NUL L | 2000.35 | | 11 | 丁丁 | female | 18 | 2011-03-12 | sale | NUL L | 1000.37 | | 12 | 星星 | female | 18 | 2016-05-13 | sale | NUL L | 3000.29 | | 13 | 格格 | female | 28 | 2017-01-27 | sale | NUL L | 4000.33 | | 14 | 张野 | male | 28 | 2016-03-11 | operation | NUL L | 10000.13 | | 15 | 程咬金 | male | 18 | 1997-03-12 | operation | NUL L | 20000.00 | | 16 | 程咬银 | female | 18 | 2013-03-11 | operation | NUL L | 19000.00 | | 17 | 程咬铜 | male | 18 | 2015-04-11 | operation | NUL L | 18000.00 | | 18 | 程咬铁 | female | 18 | 2014-05-12 | operation | NUL L | 17000.00 | +----+------------+--------+-----+------------+----------------------------+---- ----------+------------+ 18 rows in set (0.00 sec) mysql> select*from emp where id>10; +----+--------+--------+-----+------------+-----------+--------------+---------- + | id | name | sex | age | hire_date | post | post_comment | salary | +----+--------+--------+-----+------------+-----------+--------------+---------- + | 11 | 丁丁 | female | 18 | 2011-03-12 | sale | NULL | 1000.37 | | 12 | 星星 | female | 18 | 2016-05-13 | sale | NULL | 3000.29 | | 13 | 格格 | female | 28 | 2017-01-27 | sale | NULL | 4000.33 | | 14 | 张野 | male | 28 | 2016-03-11 | operation | NULL | 10000.13 | | 15 | 程咬金 | male | 18 | 1997-03-12 | operation | NULL | 20000.00 | | 16 | 程咬银 | female | 18 | 2013-03-11 | operation | NULL | 19000.00 | | 17 | 程咬铜 | male | 18 | 2015-04-11 | operation | NULL | 18000.00 | | 18 | 程咬铁 | female | 18 | 2014-05-12 | operation | NULL | 17000.00 | +----+--------+--------+-----+------------+-----------+--------------+---------- + 8 rows in set (0.00 sec) mysql> select*from emp where id=6 or id=9 or id=12; +----+------------+--------+-----+------------+---------+--------------+-------- -+ | id | name | sex | age | hire_date | post | post_comment | salary | +----+------------+--------+-----+------------+---------+--------------+-------- -+ | 6 | jingliyang | female | 18 | 2011-02-11 | teacher | NULL | 9000.00 | | 9 | 歪歪 | female | 48 | 2015-03-11 | sale | NULL | 3000.13 | | 12 | 星星 | female | 18 | 2016-05-13 | sale | NULL | 3000.29 | +----+------------+--------+-----+------------+---------+--------------+-------- -+ 3 rows in set (0.00 sec) mysql> select*from emp; +----+------------+--------+-----+------------+----------------------------+---- ----------+------------+ | id | name | sex | age | hire_date | post | pos t_comment | salary | +----+------------+--------+-----+------------+----------------------------+---- ----------+------------+ | 1 | egon | male | 18 | 2017-03-01 | 老男孩驻沙河办事处外交大使 | NUL L | 7300.33 | | 2 | alex | male | 78 | 2015-03-02 | teacher | NUL L | 1000000.31 | | 3 | wupeiqi | male | 81 | 2013-03-05 | teacher | NUL L | 8300.00 | | 4 | yuanhao | male | 73 | 2014-07-01 | teacher | NUL L | 3500.00 | | 5 | liwenzhou | male | 28 | 2012-11-01 | teacher | NUL L | 2100.00 | | 6 | jingliyang | female | 18 | 2011-02-11 | teacher | NUL L | 9000.00 | | 7 | jinxin | male | 18 | 1900-03-01 | teacher | NUL L | 30000.00 | | 8 | 成龙 | male | 48 | 2010-11-11 | teacher | NUL L | 10000.00 | | 9 | 歪歪 | female | 48 | 2015-03-11 | sale | NUL L | 3000.13 | | 10 | 丫丫 | female | 38 | 2010-11-01 | sale | NUL L | 2000.35 | | 11 | 丁丁 | female | 18 | 2011-03-12 | sale | NUL L | 1000.37 | | 12 | 星星 | female | 18 | 2016-05-13 | sale | NUL L | 3000.29 | | 13 | 格格 | female | 28 | 2017-01-27 | sale | NUL L | 4000.33 | | 14 | 张野 | male | 28 | 2016-03-11 | operation | NUL L | 10000.13 | | 15 | 程咬金 | male | 18 | 1997-03-12 | operation | NUL L | 20000.00 | | 16 | 程咬银 | female | 18 | 2013-03-11 | operation | NUL L | 19000.00 | | 17 | 程咬铜 | male | 18 | 2015-04-11 | operation | NUL L | 18000.00 | | 18 | 程咬铁 | female | 18 | 2014-05-12 | operation | NUL L | 17000.00 | +----+------------+--------+-----+------------+----------------------------+---- ----------+------------+ 18 rows in set (0.00 sec) mysql> select*from emp where name like "__"; +----+------+--------+-----+------------+-----------+--------------+----------+ | id | name | sex | age | hire_date | post | post_comment | salary | +----+------+--------+-----+------------+-----------+--------------+----------+ | 8 | 成龙 | male | 48 | 2010-11-11 | teacher | NULL | 10000.00 | | 9 | 歪歪 | female | 48 | 2015-03-11 | sale | NULL | 3000.13 | | 10 | 丫丫 | female | 38 | 2010-11-01 | sale | NULL | 2000.35 | | 11 | 丁丁 | female | 18 | 2011-03-12 | sale | NULL | 1000.37 | | 12 | 星星 | female | 18 | 2016-05-13 | sale | NULL | 3000.29 | | 13 | 格格 | female | 28 | 2017-01-27 | sale | NULL | 4000.33 | | 14 | 张野 | male | 28 | 2016-03-11 | operation | NULL | 10000.13 | +----+------+--------+-----+------------+-----------+--------------+----------+ 7 rows in set (0.00 sec) mysql> select*from emp where name like "jin%"; +----+------------+--------+-----+------------+---------+--------------+-------- --+ | id | name | sex | age | hire_date | post | post_comment | salary | +----+------------+--------+-----+------------+---------+--------------+-------- --+ | 6 | jingliyang | female | 18 | 2011-02-11 | teacher | NULL | 9000.0 0 | | 7 | jinxin | male | 18 | 1900-03-01 | teacher | NULL | 30000.0 0 | +----+------------+--------+-----+------------+---------+--------------+-------- --+ 2 rows in set (0.00 sec) mysql> select*from emp where id not between 10 and 15; +----+------------+--------+-----+------------+----------------------------+---- ----------+------------+ | id | name | sex | age | hire_date | post | pos t_comment | salary | +----+------------+--------+-----+------------+----------------------------+---- ----------+------------+ | 1 | egon | male | 18 | 2017-03-01 | 老男孩驻沙河办事处外交大使 | NUL L | 7300.33 | | 2 | alex | male | 78 | 2015-03-02 | teacher | NUL L | 1000000.31 | | 3 | wupeiqi | male | 81 | 2013-03-05 | teacher | NUL L | 8300.00 | | 4 | yuanhao | male | 73 | 2014-07-01 | teacher | NUL L | 3500.00 | | 5 | liwenzhou | male | 28 | 2012-11-01 | teacher | NUL L | 2100.00 | | 6 | jingliyang | female | 18 | 2011-02-11 | teacher | NUL L | 9000.00 | | 7 | jinxin | male | 18 | 1900-03-01 | teacher | NUL L | 30000.00 | | 8 | 成龙 | male | 48 | 2010-11-11 | teacher | NUL L | 10000.00 | | 9 | 歪歪 | female | 48 | 2015-03-11 | sale | NUL L | 3000.13 | | 16 | 程咬银 | female | 18 | 2013-03-11 | operation | NUL L | 19000.00 | | 17 | 程咬铜 | male | 18 | 2015-04-11 | operation | NUL L | 18000.00 | | 18 | 程咬铁 | female | 18 | 2014-05-12 | operation | NUL L | 17000.00 | +----+------------+--------+-----+------------+----------------------------+---- ----------+------------+ 12 rows in set (0.00 sec)
3、group by分组
什么分组:按照所有记录相同的部分进行归类,一定区分度低的字段
为何要分组:当我们要以组为单位进行统计时就必须分组,分组的目的是为了以组为单位进行统计的,再去考虑单条记录毫无意义
set global sql_mode="strict_trans_tables,only_full_group_by";
注意:分组之后,只能查到分组的字段以及组内多条记录聚合的成果
select * from emp group by post;
聚合函数
max
min
avg
sum
count
select post,count(id) from emp group by post;
select post,max(salary) from emp group by post;
select post,avg(salary) from emp group by post;
select sex,count(sex) from emp group by sex;
统计出每个部门年龄30以上的员工的平均薪资
select post,avg(salary) from emp where age >= 30 group by post;
注意:分组是在where之后发生的
mysql> select * from emp where max(salary) > 3000;
ERROR 1111 (HY000): Invalid use of group function
group_concat
egon上机笔记
mysql> select*from emp group by post; +----+------+--------+-----+------------+----------------------------+---------- ----+------------+ | id | name | sex | age | hire_date | post | post_comm ent | salary | +----+------+--------+-----+------------+----------------------------+---------- ----+------------+ | 14 | 张野 | male | 28 | 2016-03-11 | operation | NULL | 10000.13 | | 9 | 歪歪 | female | 48 | 2015-03-11 | sale | NULL | 3000.13 | | 2 | alex | male | 78 | 2015-03-02 | teacher | NULL | 1000000.31 | | 1 | egon | male | 18 | 2017-03-01 | 老男孩驻沙河办事处外交大使 | NULL | 7300.33 | +----+------+--------+-----+------------+----------------------------+---------- ----+------------+ 4 rows in set (0.00 sec) mysql> select*from emp; +----+------------+--------+-----+------------+----------------------------+---- ----------+------------+ | id | name | sex | age | hire_date | post | pos t_comment | salary | +----+------------+--------+-----+------------+----------------------------+---- ----------+------------+ | 1 | egon | male | 18 | 2017-03-01 | 老男孩驻沙河办事处外交大使 | NUL L | 7300.33 | | 2 | alex | male | 78 | 2015-03-02 | teacher | NUL L | 1000000.31 | | 3 | wupeiqi | male | 81 | 2013-03-05 | teacher | NUL L | 8300.00 | | 4 | yuanhao | male | 73 | 2014-07-01 | teacher | NUL L | 3500.00 | | 5 | liwenzhou | male | 28 | 2012-11-01 | teacher | NUL L | 2100.00 | | 6 | jingliyang | female | 18 | 2011-02-11 | teacher | NUL L | 9000.00 | | 7 | jinxin | male | 18 | 1900-03-01 | teacher | NUL L | 30000.00 | | 8 | 成龙 | male | 48 | 2010-11-11 | teacher | NUL L | 10000.00 | | 9 | 歪歪 | female | 48 | 2015-03-11 | sale | NUL L | 3000.13 | | 10 | 丫丫 | female | 38 | 2010-11-01 | sale | NUL L | 2000.35 | | 11 | 丁丁 | female | 18 | 2011-03-12 | sale | NUL L | 1000.37 | | 12 | 星星 | female | 18 | 2016-05-13 | sale | NUL L | 3000.29 | | 13 | 格格 | female | 28 | 2017-01-27 | sale | NUL L | 4000.33 | | 14 | 张野 | male | 28 | 2016-03-11 | operation | NUL L | 10000.13 | | 15 | 程咬金 | male | 18 | 1997-03-12 | operation | NUL L | 20000.00 | | 16 | 程咬银 | female | 18 | 2013-03-11 | operation | NUL L | 19000.00 | | 17 | 程咬铜 | male | 18 | 2015-04-11 | operation | NUL L | 18000.00 | | 18 | 程咬铁 | female | 18 | 2014-05-12 | operation | NUL L | 17000.00 | +----+------------+--------+-----+------------+----------------------------+---- ----------+------------+ 18 rows in set (0.00 sec) mysql> select @@sql_mode; +------------------------+ | @@sql_mode | +------------------------+ | NO_ENGINE_SUBSTITUTION | +------------------------+ 1 row in set (0.00 sec) 写sql语句的时候只能按照严格模式 mysql> set global sql_mode="strict_trans_tables,only_full_group_by"; Query OK, 0 rows affected (0.00 sec) #只能取分组的字段和聚合的结果 mysql> use sb5; Database changed mysql> select*from emp group by post; ERROR 1055 (42000): 'sb5.emp.id' isn't in GROUP BY mysql> select post from emp group by post; +----------------------------+ | post | +----------------------------+ | operation | | sale | | teacher | | 老男孩驻沙河办事处外交大使 | +----------------------------+ 4 rows in set (0.00 sec) # 聚合函数(切记分组以后才能用聚合函数) max min avg sum count mysql> select post from emp group by post; +----------------------------+ | post | +----------------------------+ | operation | | sale | | teacher | | 老男孩驻沙河办事处外交大使 | +----------------------------+ 4 rows in set (0.00 sec) mysql> select post,count(id) from emp group by post; +----------------------------+-----------+ | post | count(id) | +----------------------------+-----------+ | operation | 5 | | sale | 5 | | teacher | 7 | | 老男孩驻沙河办事处外交大使 | 1 | +----------------------------+-----------+ 4 rows in set (0.00 sec) mysql> select post,max(salary) from emp group by post; +----------------------------+-------------+ | post | max(salary) | +----------------------------+-------------+ | operation | 20000.00 | | sale | 4000.33 | | teacher | 1000000.31 | | 老男孩驻沙河办事处外交大使 | 7300.33 | +----------------------------+-------------+ 4 rows in set (0.00 sec) mysql> select post,avg(salary) from emp group by post; +----------------------------+---------------+ | post | avg(salary) | +----------------------------+---------------+ | operation | 16800.026000 | | sale | 2600.294000 | | teacher | 151842.901429 | | 老男孩驻沙河办事处外交大使 | 7300.330000 | +----------------------------+---------------+ 4 rows in set (0.00 sec) mysql> select post,sum(salary) from emp group by post; +----------------------------+-------------+ | post | sum(salary) | +----------------------------+-------------+ | operation | 84000.13 | | sale | 13001.47 | | teacher | 1062900.31 | | 老男孩驻沙河办事处外交大使 | 7300.33 | +----------------------------+-------------+ 4 rows in set (0.00 sec) mysql> select post,avg(salary) from emp group by post; +----------------------------+---------------+ | post | avg(salary) | +----------------------------+---------------+ | operation | 16800.026000 | | sale | 2600.294000 | | teacher | 151842.901429 | | 老男孩驻沙河办事处外交大使 | 7300.330000 | +----------------------------+---------------+ 4 rows in set (0.00 sec) mysql> select post,sum(salary) from emp group by post; +----------------------------+-------------+ | post | sum(salary) | +----------------------------+-------------+ | operation | 84000.13 | | sale | 13001.47 | | teacher | 1062900.31 | | 老男孩驻沙河办事处外交大使 | 7300.33 | +----------------------------+-------------+ 4 rows in set (0.00 sec) mysql> select post,count(id) from emp group by post; +----------------------------+-----------+ | post | count(id) | +----------------------------+-----------+ | operation | 5 | | sale | 5 | | teacher | 7 | | 老男孩驻沙河办事处外交大使 | 1 | +----------------------------+-----------+ 4 rows in set (0.00 sec) mysql> select post,count(sex) from emp group by post; +----------------------------+------------+ | post | count(sex) | +----------------------------+------------+ | operation | 5 | | sale | 5 | | teacher | 7 | | 老男孩驻沙河办事处外交大使 | 1 | +----------------------------+------------+ 4 rows in set (0.00 sec) 为什么用id呢? innodb表达id字段,primary本身就是一个索引用他排序速度很快 统计出每个部门年龄30以上的员工的平均薪资 mysql> select*from emp where max(salary)>3000; ERROR 1111 (HY000): Invalid use of group function mysql> select max(salary) from emp; +-------------+ | max(salary) | +-------------+ | 1000000.31 | +-------------+ 1 row in set (0.00 sec) mysql> select*from emp where max(salary)>3000; ERROR 1111 (HY000): Invalid use of group function mysql> select max(salary) from emp; +-------------+ | max(salary) | +-------------+ | 1000000.31 | +-------------+ 1 row in set (0.00 sec) concat字符拼接 mysql> select post from emp group by post; +----------------------------+ | post | +----------------------------+ | operation | | sale | | teacher | | 老男孩驻沙河办事处外交大使 | +----------------------------+ 4 rows in set (0.00 sec) mysql> select post,group_concat(name) from emp group by post; +----------------------------+-------------------------------------------------- -----+ | post | group_concat(name) | +----------------------------+-------------------------------------------------- -----+ | operation | 程咬铁,程咬铜,程咬银,程咬金,张野 | | sale | 格格,星星,丁丁,丫丫,歪歪 | | teacher | 成龙,jinxin,jingliyang,liwenzhou,yuanhao,wupeiqi, alex | | 老男孩驻沙河办事处外交大使 | egon | +----------------------------+-------------------------------------------------- -----+ 4 rows in set (0.00 sec) mysql> select post,group_concat_ws(":",name,age,sex) from emp group by post; ERROR 1305 (42000): FUNCTION sb5.group_concat_ws does not exist mysql> select post,group_concat(name,age) from emp group by post; +----------------------------+-------------------------------------------------- -------------------+ | post | group_concat(name,age) | +----------------------------+-------------------------------------------------- -------------------+ | operation | 程咬铁18,程咬铜18,程咬银18,程咬金18,张野28 | | sale | 格格28,星星18,丁丁18,丫丫38,歪歪48 | | teacher | 成龙48,jinxin18,jingliyang18,liwenzhou28,yuanhao7 3,wupeiqi81,alex78 | | 老男孩驻沙河办事处外交大使 | egon18 | +----------------------------+-------------------------------------------------- -------------------+ 4 rows in set (0.00 sec) mysql> select post,group_concat(name,';',age) from emp group by post; +----------------------------+-------------------------------------------------- --------------------------+ | post | group_concat(name,';',age) | +----------------------------+-------------------------------------------------- --------------------------+ | operation | 程咬铁;18,程咬铜;18,程咬银;18,程咬金;18,张野;28 | | sale | 格格;28,星星;18,丁丁;18,丫丫;38,歪歪;48 | | teacher | 成龙;48,jinxin;18,jingliyang;18,liwenzhou;28,yuan hao;73,wupeiqi;81,alex;78 | | 老男孩驻沙河办事处外交大使 | egon;18 | +----------------------------+-------------------------------------------------- --------------------------+ 4 rows in set (0.00 sec)
#4、having 过滤条件
# where是在分组之前的过滤,即在分组之前做了一次整体性的筛选
# having是在分组之后的过滤,即在分组之后专门针对聚合的结果进行进一步的筛选
select post,avg(salary) from emp group by post having avg(salary) > 10000;
select post,avg(salary) from emp group by post ;
mysql> select post,avg(salary) from emp group by post having avg(salary)>10000; +-----------+---------------+ | post | avg(salary) | +-----------+---------------+ | operation | 16800.026000 | | teacher | 151842.901429 | +-----------+---------------+ 2 rows in set (0.00 sec) mysql> select post,avg(salary) from emp group by post ; +----------------------------+---------------+ | post | avg(salary) | +----------------------------+---------------+ | operation | 16800.026000 | | sale | 2600.294000 | | teacher | 151842.901429 | | 老男孩驻沙河办事处外交大使 | 7300.330000 | +----------------------------+---------------+ 4 rows in set (0.00 sec)
小练习:
相关小练习:
1. 查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数
3. 查询各岗位平均薪资大于10000的岗位名、平均工资
4. 查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资
6、limit 限制显示的条件
select * from emp limit 3;
#薪资最高那个人的详细信息
select * from emp order by salary desc limit 1;
分页显示
select * from emp limit 0,5; # 从0开始往后取5条
select * from emp limit 5,5; #从5开始往后取5条
egon上机笔记
mysql> select*from emp; +----+------------+--------+-----+------------+----------------------------+--------------+------------+ | id | name | sex | age | hire_date | post | post_comment | salary | +----+------------+--------+-----+------------+----------------------------+--------------+------------+ | 1 | egon | male | 18 | 2017-03-01 | 老男孩驻沙河办事处外交大使 | NULL | 7300.33 | | 2 | alex | male | 78 | 2015-03-02 | teacher | NULL | 1000000.31 | | 3 | wupeiqi | male | 81 | 2013-03-05 | teacher | NULL | 8300.00 | | 4 | yuanhao | male | 73 | 2014-07-01 | teacher | NULL | 3500.00 | | 5 | liwenzhou | male | 28 | 2012-11-01 | teacher | NULL | 2100.00 | | 6 | jingliyang | female | 18 | 2011-02-11 | teacher | NULL | 9000.00 | | 7 | jinxin | male | 18 | 1900-03-01 | teacher | NULL | 30000.00 | | 8 | 成龙 | male | 48 | 2010-11-11 | teacher | NULL | 10000.00 | | 9 | 歪歪 | female | 48 | 2015-03-11 | sale | NULL | 3000.13 | | 10 | 丫丫 | female | 38 | 2010-11-01 | sale | NULL | 2000.35 | | 11 | 丁丁 | female | 18 | 2011-03-12 | sale | NULL | 1000.37 | | 12 | 星星 | female | 18 | 2016-05-13 | sale | NULL | 3000.29 | | 13 | 格格 | female | 28 | 2017-01-27 | sale | NULL | 4000.33 | | 14 | 张野 | male | 28 | 2016-03-11 | operation | NULL | 10000.13 | | 15 | 程咬金 | male | 18 | 1997-03-12 | operation | NULL | 20000.00 | | 16 | 程咬银 | female | 18 | 2013-03-11 | operation | NULL | 19000.00 | | 17 | 程咬铜 | male | 18 | 2015-04-11 | operation | NULL | 18000.00 | | 18 | 程咬铁 | female | 18 | 2014-05-12 | operation | NULL | 17000.00 | +----+------------+--------+-----+------------+----------------------------+--------------+------------+ 18 rows in set (0.00 sec) mysql> select*from emp limit 0,5; +----+-----------+------+-----+------------+----------------------------+--------------+------------+ | id | name | sex | age | hire_date | post | post_comment | salary | +----+-----------+------+-----+------------+----------------------------+--------------+------------+ | 1 | egon | male | 18 | 2017-03-01 | 老男孩驻沙河办事处外交大使 | NULL | 7300.33 | | 2 | alex | male | 78 | 2015-03-02 | teacher | NULL | 1000000.31 | | 3 | wupeiqi | male | 81 | 2013-03-05 | teacher | NULL | 8300.00 | | 4 | yuanhao | male | 73 | 2014-07-01 | teacher | NULL | 3500.00 | | 5 | liwenzhou | male | 28 | 2012-11-01 | teacher | NULL | 2100.00 | +----+-----------+------+-----+------------+----------------------------+--------------+------------+ 5 rows in set (0.00 sec) mysql> select*from emp limit 5,10; +----+------------+--------+-----+------------+-----------+--------------+----------+ | id | name | sex | age | hire_date | post | post_comment | salary | +----+------------+--------+-----+------------+-----------+--------------+----------+ | 6 | jingliyang | female | 18 | 2011-02-11 | teacher | NULL | 9000.00 | | 7 | jinxin | male | 18 | 1900-03-01 | teacher | NULL | 30000.00 | | 8 | 成龙 | male | 48 | 2010-11-11 | teacher | NULL | 10000.00 | | 9 | 歪歪 | female | 48 | 2015-03-11 | sale | NULL | 3000.13 | | 10 | 丫丫 | female | 38 | 2010-11-01 | sale | NULL | 2000.35 | | 11 | 丁丁 | female | 18 | 2011-03-12 | sale | NULL | 1000.37 | | 12 | 星星 | female | 18 | 2016-05-13 | sale | NULL | 3000.29 | | 13 | 格格 | female | 28 | 2017-01-27 | sale | NULL | 4000.33 | | 14 | 张野 | male | 28 | 2016-03-11 | operation | NULL | 10000.13 | | 15 | 程咬金 | male | 18 | 1997-03-12 | operation | NULL | 20000.00 | +----+------------+--------+-----+------------+-----------+--------------+----------+ 10 rows in set (0.00 sec) mysql> select*from emp limit 10,5; +----+--------+--------+-----+------------+-----------+--------------+----------+ | id | name | sex | age | hire_date | post | post_comment | salary | +----+--------+--------+-----+------------+-----------+--------------+----------+ | 11 | 丁丁 | female | 18 | 2011-03-12 | sale | NULL | 1000.37 | | 12 | 星星 | female | 18 | 2016-05-13 | sale | NULL | 3000.29 | | 13 | 格格 | female | 28 | 2017-01-27 | sale | NULL | 4000.33 | | 14 | 张野 | male | 28 | 2016-03-11 | operation | NULL | 10000.13 | | 15 | 程咬金 | male | 18 | 1997-03-12 | operation | NULL | 20000.00 | +----+--------+--------+-----+------------+-----------+--------------+----------+ 5 rows in set (0.00 sec) mysql> select*from emp limit 15,5; +----+--------+--------+-----+------------+-----------+--------------+----------+ | id | name | sex | age | hire_date | post | post_comment | salary | +----+--------+--------+-----+------------+-----------+--------------+----------+ | 16 | 程咬银 | female | 18 | 2013-03-11 | operation | NULL | 19000.00 | | 17 | 程咬铜 | male | 18 | 2015-04-11 | operation | NULL | 18000.00 | | 18 | 程咬铁 | female | 18 | 2014-05-12 | operation | NULL | 17000.00 | +----+--------+--------+-----+------------+-----------+--------------+----------+ 3 rows in set (0.00 sec)
#正则表达式
select * from emp where name regexp "^jin.*(g|n)$";
#1、笛卡儿积
select * from emp,dep; #左表和右表全部建立对应关系
select * from emp,dep where emp.dep_id = dep.id;
select * from emp,dep where emp.dep_id = dep.id and dep.name = "技术";
#2、内连接:只取两张表有对应关系的记录 #where专门干筛选的活
select * from emp inner join dep on emp.dep_id = dep.id;
select * from emp inner join dep on emp.dep_id = dep.id
where dep.name = "技术";
#3、左连接: 在内连接的基础上保留左表没有对应关系的记录
select * from emp left join dep on emp.dep_id = dep.id;
#4、右连接: 在内连接的基础上保留右表没有对应关系的记录
select * from emp right join dep on emp.dep_id = dep.id;
#5、全连接:在内连接的基础上保留左、右面表没有对应关系的的记录
select * from emp left join dep on emp.dep_id = dep.id
union
select * from emp right join dep on emp.dep_id = dep.id;
egon上机笔记
mysql> create database sb5 charset gbk; Query OK, 1 row affected (0.00 sec) mysql> use sb5; Database changed mysql> create table department( -> id int, -> name varchar(20) -> ); Query OK, 0 rows affected (0.01 sec) mysql> mysql> create table employee( -> id int primary key auto_increment, -> name varchar(20), -> sex enum('male','female') not null default 'male', -> age int, -> dep_id int -> ); Query OK, 0 rows affected (0.01 sec) mysql> desc department; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.01 sec) mysql> desc employee; +--------+-----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+-----------------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | | sex | enum('male','female') | NO | | male | | | age | int(11) | YES | | NULL | | | dep_id | int(11) | YES | | NULL | | +--------+-----------------------+------+-----+---------+----------------+ 5 rows in set (0.01 sec) mysql> insert into department values -> (200,'技术'), -> (201,'人力资源'), -> (202,'销售'), -> (203,'运营'); Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> insert into employee(name,sex,age,dep_id) values -> ('egon','male',18,200), -> ('alex','female',48,201), -> ('wupeiqi','male',38,201), -> ('yuanhao','female',28,202), -> ('liwenzhou','male',18,200), -> ('jingliyang','female',18,204) -> ; Query OK, 6 rows affected (0.00 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql> alter table department rename dep; Query OK, 0 rows affected (0.01 sec) mysql> select*from employee; +----+------------+--------+------+--------+ | id | name | sex | age | dep_id | +----+------------+--------+------+--------+ | 1 | egon | male | 18 | 200 | | 2 | alex | female | 48 | 201 | | 3 | wupeiqi | male | 38 | 201 | | 4 | yuanhao | female | 28 | 202 | | 5 | liwenzhou | male | 18 | 200 | | 6 | jingliyang | female | 18 | 204 | +----+------------+--------+------+--------+ 6 rows in set (0.00 sec) mysql> alter table employee rename empp; Query OK, 0 rows affected (0.01 sec) mysql> select*from dep; +------+----------+ | id | name | +------+----------+ | 200 | 技术 | | 201 | 人力资源 | | 202 | 销售 | | 203 | 运营 | +------+----------+ 4 rows in set (0.00 sec) mysql> select*from empp,dep; +----+------------+--------+------+--------+------+----------+ | id | name | sex | age | dep_id | id | name | +----+------------+--------+------+--------+------+----------+ | 1 | egon | male | 18 | 200 | 200 | 技术 | | 1 | egon | male | 18 | 200 | 201 | 人力资源 | | 1 | egon | male | 18 | 200 | 202 | 销售 | | 1 | egon | male | 18 | 200 | 203 | 运营 | | 2 | alex | female | 48 | 201 | 200 | 技术 | | 2 | alex | female | 48 | 201 | 201 | 人力资源 | | 2 | alex | female | 48 | 201 | 202 | 销售 | | 2 | alex | female | 48 | 201 | 203 | 运营 | | 3 | wupeiqi | male | 38 | 201 | 200 | 技术 | | 3 | wupeiqi | male | 38 | 201 | 201 | 人力资源 | | 3 | wupeiqi | male | 38 | 201 | 202 | 销售 | | 3 | wupeiqi | male | 38 | 201 | 203 | 运营 | | 4 | yuanhao | female | 28 | 202 | 200 | 技术 | | 4 | yuanhao | female | 28 | 202 | 201 | 人力资源 | | 4 | yuanhao | female | 28 | 202 | 202 | 销售 | | 4 | yuanhao | female | 28 | 202 | 203 | 运营 | | 5 | liwenzhou | male | 18 | 200 | 200 | 技术 | | 5 | liwenzhou | male | 18 | 200 | 201 | 人力资源 | | 5 | liwenzhou | male | 18 | 200 | 202 | 销售 | | 5 | liwenzhou | male | 18 | 200 | 203 | 运营 | | 6 | jingliyang | female | 18 | 204 | 200 | 技术 | | 6 | jingliyang | female | 18 | 204 | 201 | 人力资源 | | 6 | jingliyang | female | 18 | 204 | 202 | 销售 | | 6 | jingliyang | female | 18 | 204 | 203 | 运营 | +----+------------+--------+------+--------+------+----------+ 24 rows in set (0.01 sec) 连成一张大的表然后单表去查就可以了 mysql> select*from empp,dep where empp.dep_id = dep.id; +----+-----------+--------+------+--------+------+----------+ | id | name | sex | age | dep_id | id | name | +----+-----------+--------+------+--------+------+----------+ | 1 | egon | male | 18 | 200 | 200 | 技术 | | 2 | alex | female | 48 | 201 | 201 | 人力资源 | | 3 | wupeiqi | male | 38 | 201 | 201 | 人力资源 | | 4 | yuanhao | female | 28 | 202 | 202 | 销售 | | 5 | liwenzhou | male | 18 | 200 | 200 | 技术 | +----+-----------+--------+------+--------+------+----------+ 5 rows in set (0.00 sec) mysql> select*from empp,dep where empp.dep_id=dep.id and dep.name="技术"; +----+-----------+------+------+--------+------+------+ | id | name | sex | age | dep_id | id | name | +----+-----------+------+------+--------+------+------+ | 1 | egon | male | 18 | 200 | 200 | 技术 | | 5 | liwenzhou | male | 18 | 200 | 200 | 技术 | +----+-----------+------+------+--------+------+------+ 2 rows in set (0.00 sec) mysql> select * from empp inner join dep on empp.dep_id = dep.id -> where dep.name = "技术"; +----+-----------+------+------+--------+------+------+ | id | name | sex | age | dep_id | id | name | +----+-----------+------+------+--------+------+------+ | 1 | egon | male | 18 | 200 | 200 | 技术 | | 5 | liwenzhou | male | 18 | 200 | 200 | 技术 | +----+-----------+------+------+--------+------+------+ 2 rows in set (0.00 sec) mysql> select * from empp left join dep on empp.dep_id = dep.id; +----+------------+--------+------+--------+------+----------+ | id | name | sex | age | dep_id | id | name | +----+------------+--------+------+--------+------+----------+ | 1 | egon | male | 18 | 200 | 200 | 技术 | | 5 | liwenzhou | male | 18 | 200 | 200 | 技术 | | 2 | alex | female | 48 | 201 | 201 | 人力资源 | | 3 | wupeiqi | male | 38 | 201 | 201 | 人力资源 | | 4 | yuanhao | female | 28 | 202 | 202 | 销售 | | 6 | jingliyang | female | 18 | 204 | NULL | NULL | +----+------------+--------+------+--------+------+----------+ 6 rows in set (0.00 sec) mysql> select * from empp right join dep on empp.dep_id = dep.id; +------+-----------+--------+------+--------+------+----------+ | id | name | sex | age | dep_id | id | name | +------+-----------+--------+------+--------+------+----------+ | 1 | egon | male | 18 | 200 | 200 | 技术 | | 2 | alex | female | 48 | 201 | 201 | 人力资源 | | 3 | wupeiqi | male | 38 | 201 | 201 | 人力资源 | | 4 | yuanhao | female | 28 | 202 | 202 | 销售 | | 5 | liwenzhou | male | 18 | 200 | 200 | 技术 | | NULL | NULL | NULL | NULL | NULL | 203 | 运营 | +------+-----------+--------+------+--------+------+----------+ 6 rows in set (0.00 sec) mysql> select * from empp left join dep on empp.dep_id = dep.id -> union -> select * from empp right join dep on empp.dep_id = dep.id; +------+------------+--------+------+--------+------+----------+ | id | name | sex | age | dep_id | id | name | +------+------------+--------+------+--------+------+----------+ | 1 | egon | male | 18 | 200 | 200 | 技术 | | 5 | liwenzhou | male | 18 | 200 | 200 | 技术 | | 2 | alex | female | 48 | 201 | 201 | 人力资源 | | 3 | wupeiqi | male | 38 | 201 | 201 | 人力资源 | | 4 | yuanhao | female | 28 | 202 | 202 | 销售 | | 6 | jingliyang | female | 18 | 204 | NULL | NULL | | NULL | NULL | NULL | NULL | NULL | 203 | 运营 | +------+------------+--------+------+--------+------+----------+ 7 rows in set (0.01 sec)