07 MySQL数据库--查询语句学习笔记

整理各种查询语句,需要查询数据请参考:

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)
发布了13 篇原创文章 · 获赞 2 · 访问量 445

猜你喜欢

转载自blog.csdn.net/chennuan1991/article/details/105275943