整理各种查询语句,需要查询数据请参考:
https://blog.csdn.net/chennuan1991/article/details/105240457
基础查询语句,请参考:
https://blog.csdn.net/chennuan1991/article/details/105250429
https://blog.csdn.net/chennuan1991/article/details/105255954
https://blog.csdn.net/chennuan1991/article/details/105262262
复制表数据做查询条件
01 查询成绩比该课程平均成绩低的同学的成绩表
mysql> select * from score a where degree < (select avg(degree) from score b where a.cno=b.cno);
+-----+-------+--------+
| sno | cno | degree |
+-----+-------+--------+
| 102 | 6-166 | 69 |
| 105 | 3-245 | 75 |
| 105 | 6-166 | 79 |
| 109 | 3-105 | 76 |
| 109 | 3-245 | 68 |
+-----+-------+--------+
5 rows in set (0.00 sec)
多字段排序
以班级和年龄从小到大的顺序查询students表中的全部记录
mysql> select * from students order by class desc,birthday;
+-----+--------+------+---------------------+-------+
| sno | sname | ssex | birthday | class |
+-----+--------+------+---------------------+-------+
| 103 | 王五 | 女 | 1976-01-23 00:00:00 | 95033 |
| 104 | 铁柱 | 男 | 1976-02-20 00:00:00 | 95033 |
| 107 | 小绿 | 男 | 1976-02-20 00:00:00 | 95033 |
| 101 | 张三 | 男 | 1977-09-01 00:00:00 | 95033 |
| 106 | 小红 | 男 | 1974-06-03 00:00:00 | 95031 |
| 109 | 乖乖 | 男 | 1974-06-03 00:00:00 | 95031 |
| 105 | 小丽 | 女 | 1975-02-10 00:00:00 | 95031 |
| 108 | 大妞 | 女 | 1975-02-10 00:00:00 | 95031 |
| 102 | 李四 | 男 | 1975-10-02 00:00:00 | 95031 |
+-----+--------+------+---------------------+-------+
9 rows in set (0.00 sec)
连接查询
新增两个表person,card,表结构如下
person | card |
id,
扫描二维码关注公众号,回复:
10467680 查看本文章
name, cardId |
id, name |
create table person( id int, name varchar(20), cardId int )default character set = 'utf8'; |
create table card( id int, name varchar(20) )default character set = 'utf8'; |
准备数据
insert into card values(1,'交通卡');
insert into card values(2,'建设卡');
insert into card values(3,'工伤卡');
insert into card values(4,'招商卡');
insert into card values(5,'浦发卡');
insert into person values(1,'张三',1);
insert into person values(2,'李四',3);
insert into person values(3,'王五',6);
内连接
总结:两张表中的数据,通过某个字段相等,查询出相关记录数据。
mysql> select * from person inner join card on person.cardId = card.id;
+------+--------+--------+------+-----------+
| id | name | cardId | id | name |
+------+--------+--------+------+-----------+
| 1 | 张三 | 1 | 1 | 交通卡 |
| 2 | 李四 | 3 | 3 | 工伤卡 |
+------+--------+--------+------+-----------+
2 rows in set (0.00 sec)
mysql> select * from person join card on person.cardId = card.id;
+------+--------+--------+------+-----------+
| id | name | cardId | id | name |
+------+--------+--------+------+-----------+
| 1 | 张三 | 1 | 1 | 交通卡 |
| 2 | 李四 | 3 | 3 | 工伤卡 |
+------+--------+--------+------+-----------+
2 rows in set (0.00 sec)
左外连接
总结:查询join左侧person表的所有数据,与右侧的card表对比,card表中没有的用null补齐
mysql> select * from person left join card on person.cardId= card.id;
+------+--------+--------+------+-----------+
| id | name | cardId | id | name |
+------+--------+--------+------+-----------+
| 1 | 张三 | 1 | 1 | 交通卡 |
| 2 | 李四 | 3 | 3 | 工伤卡 |
| 3 | 王五 | 6 | NULL | NULL |
+------+--------+--------+------+-----------+
3 rows in set (0.00 sec)
mysql> select * from person left outer join card on person.cardId= card.id;
+------+--------+--------+------+-----------+
| id | name | cardId | id | name |
+------+--------+--------+------+-----------+
| 1 | 张三 | 1 | 1 | 交通卡 |
| 2 | 李四 | 3 | 3 | 工伤卡 |
| 3 | 王五 | 6 | NULL | NULL |
+------+--------+--------+------+-----------+
3 rows in set (0.00 sec)
右外连接
总结:查询join右侧card表的所有数据,与左侧的person表对比,person表中没有的用null补齐
mysql> select * from person right join card on person.cardId = card.id;
+------+--------+--------+------+-----------+
| id | name | cardId | id | name |
+------+--------+--------+------+-----------+
| 1 | 张三 | 1 | 1 | 交通卡 |
| 2 | 李四 | 3 | 3 | 工伤卡 |
| NULL | NULL | NULL | 2 | 建设卡 |
| NULL | NULL | NULL | 4 | 招商卡 |
| NULL | NULL | NULL | 5 | 浦发卡 |
+------+--------+--------+------+-----------+
5 rows in set (0.00 sec)
mysql> select * from person right outer join card on person.cardId = card.id;
+------+--------+--------+------+-----------+
| id | name | cardId | id | name |
+------+--------+--------+------+-----------+
| 1 | 张三 | 1 | 1 | 交通卡 |
| 2 | 李四 | 3 | 3 | 工伤卡 |
| NULL | NULL | NULL | 2 | 建设卡 |
| NULL | NULL | NULL | 4 | 招商卡 |
| NULL | NULL | NULL | 5 | 浦发卡 |
+------+--------+--------+------+-----------+
5 rows in set (0.00 sec)
全连接
总结:mysql不支持full join,需要使用union取并集
mysql> select * from person left join card on person.cardId= card.id union select * from person right join card on person.cardId = card.id;
+------+--------+--------+------+-----------+
| id | name | cardId | id | name |
+------+--------+--------+------+-----------+
| 1 | 张三 | 1 | 1 | 交通卡 |
| 2 | 李四 | 3 | 3 | 工伤卡 |
| 3 | 王五 | 6 | NULL | NULL |
| NULL | NULL | NULL | 2 | 建设卡 |
| NULL | NULL | NULL | 4 | 招商卡 |
| NULL | NULL | NULL | 5 | 浦发卡 |
+------+--------+--------+------+-----------+
6 rows in set (0.01 sec)