MySQL如何实现多表查询?MySQL多表查询的语句


本文摘自PHP中文网,作者青灯夜游,侵删。

本篇文章给大家带来的内容是介绍MySQL如何实现多表查询?MySQL多表查询的语句。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

创建表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

# 创建表

create table department(id int,name varchar(20));

create table employee1(

id int primary key auto_increment,

name varchar(20),

sex enum('male','female') not null default 'male',

age int,

dep_id int

);

# 插入数据

insert into department values(200,'技术'),(201,'人力资源'),(202,'销售'),(203,'运营');

 

insert into employee1(name,sex,age,dep_id) values('egon','male',18,200),('alex','female',48,201),('tom','male',38,201),('yuanhao','female',28,202),('lidawei','male',18,200),('jinkezhou','female',18,204);

 

# 查看表

mysql> select * from employee1;

+----+-----------+--------+------+--------+

| id | name      | sex    | age  | dep_id |

+----+-----------+--------+------+--------+

|  1 | egon      | male   |   18 |    200 |

|  2 | alex      | female |   48 |    201 |

|  3 | tom       | male   |   38 |    201 |

|  4 | yuanhao   | female |   28 |    202 |

|  5 | lidawei   | male   |   18 |    200 |

|  6 | jinkezhou | female |   18 |    204 |

+----+-----------+--------+------+--------+

6 rows in set (0.00 sec)

mysql> select * from department;

+------+--------------+

| id   | name         |

+------+--------------+

|  200 | 技术       |

|  201 | 人力资源   |

|  202 | 销售       |

|  203 | 运营       |

+------+--------------+

4 rows in set (0.00 sec)

多表连接查询

交叉连接

交叉连接:不适用任何匹配条件。生成笛卡尔积

1

mysql> select * from employee1 ,department;

内连接

内连接:找两张表共有的部分,相当于利用条件从笛卡尔积结果中筛选出了正确的结果。(只连接匹配的行)

1

2

3

4

5

6

7

8

9

# 找两张表共有的部分,相当于利用条件从笛卡尔积结果中筛选出了正确的结果

#department没有204这个部门,因而employee表中关于204这条员工信息没有匹配出来

mysql> select * from employee1,department where employee1.dep_id=department.id;

 

#上面用where表示的可以用下面的内连接表示,建议使用下面的那种方法

mysql> select * from employee1 inner join department on employee1.dep_id=department.id;

 

# 也可以这样表示哈

mysql> select employee1.id,employee1.name,employee1.age,employee1.sex,department.name from employee1,department where employee1.dep_id=department.id;

左连接left

优先显示左表全部记录。

1

2

3

4

#左链接:在按照on的条件取到两张表共同部分的基础上,保留左表的记录

mysql> select * from employee1 left join department on department.id=employee1.dep_id;

 

mysql> select * from department left join  employee1 on department.id=employee1.dep_id;

右连接right

优先显示右表全部记录。

1

2

3

#右链接:在按照on的条件取到两张表共同部分的基础上,保留右表的记录

mysql> select * from employee1 right join department on department.id=employee1.dep_id;

mysql> select * from department right join employee1 on department.id=employee1.dep_id;

全部连接join

1

mysql> select * from department full join employee1;

符合条件多表查询

示例1:以内连接的方式查询employee和department表,并且employee表中的age字段值必须大于25,
即找出公司所有部门中年龄大于25岁的员工

1

mysql> select * from employee1 inner join department on employee1.dep_id=department.id and age>25;

示例2:以内连接的方式查询employee和department表,并且以age字段的升序方式显示

1

mysql> select * from employee1 inner join department on employee1.dep_id=department.id and age>25 and age>25 order by age asc;

子查询

1

2

3

4

#1:子查询是将一个查询语句嵌套在另一个查询语句中。

#2:内层查询语句的查询结果,可以为外层查询语句提供查询条件。

#3:子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字

#4:还可以包含比较运算符:= 、 !=、> 、<等

示例:

1

2

3

4

5

6

7

8

9

10

11

# 查询平均年龄在25岁以上的部门名

mysql> select name from department where id in ( select dep_id from employee1 group by dep_id having avg(age) > 25 );

 

# 查看技术部员工姓名

mysql> select name from employee1 where dep_id = (select id from department where name='技术');

 

# 查看小于2人的部门名

mysql> select name from department where id in (select dep_id from employee1 group by dep_id having count(id) < 2) union select name from department where id not in (select distinct dep_id from employee1);

# 提取空部门                             

#有人的部门

mysql> select * from department where id not in (select distinct dep_id from employee1);

以上就是MySQL如何实现多表查询?MySQL多表查询的语句的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

mysql数据库快速入门基础学习(经典教程)

关于mysql超长自动截断实例详解

mysql如何替换掉字母

mysql 8.0中有什么新功能

深入理解mysql的b+tree索引原理

ubuntu环境下如何使java连接mysql数据库

mysql如何查数据条数?

mysql自增删除后,添加数据id不会紧接怎么办

mysql初次不能登录解决方法

关于mysql的基础知识详解

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    暂无评论...