多表查询

Posted quanjunkang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多表查询相关的知识,希望对你有一定的参考价值。

先建立两个表,员工表跟部门表

部门表:

技术分享图片

技术分享图片

员工表:

技术分享图片

技术分享图片

 

1.交叉连接(笛卡尔积)

关键字:select * from  tb_a  join  tb_b

例如将部门表跟员工表交叉连接;

技术分享图片

技术分享图片

可以看到这种连接是毫无意义的,只是纯粹的2x2连接,显示一共有四种连接方式

 

2.内连接

关键字:select * from  tb_a  join  tb_b on +连接条件

例如查询员工和其部门的相关信息

技术分享图片

技术分享图片

相当于去除了交叉连接中两个不符合条件的两种连接方式

 

3.左外连接

关键字:SELECT * FROM  tb_a  LEFT JOIN tb_b  on+连接条件

LEFT 左边的是左表,右边的为右表
链接结果为两个表的内链接加上左表不满足条件的数据,对应右边自动补 NULL

技术分享图片

技术分享图片

 

4.右外连接

关键字:SELECT * FROM  tb_a  right JOIN tb_b  on+连接条件

与左外连接同理,链接结果为两个表的内链接加上右表不满足条件的数据,对应左表自动补 NULL 

 

5.子查询

关键字: in(结果不唯一)  ,   any(一部分),    all (全部)    ,not  in(in 的补集)

一个语句的结果作为另一个语句的条件,当作为条件的结果中出现多个结果时,不能用 = 或者比较符号

比如想查询跟张三不同部门的人

思路:首先得找到张三部门

select did from emp where ename=‘张三‘

 技术分享图片

再找出除了张三部门的其他部门

select did from dept where did not in (select did from emp where ename=‘张三‘)

技术分享图片

最后再找出这些部门的人

select ename from emp where did in (select did from dept where did not in (select did from emp where ename=‘张三‘))

 技术分享图片

 

6.联合查询

关键字: union     (select * from tb_a)  union  (select * from tb_b)    注意:两个表查询用括号封装

只要字段数相等,可以将两个表查询结果强行拼凑起来,字段名以第一个表为准

我们试着把两个表连接起来,由于dept表只有两个字段,我们新建一个表dept1,然后把dept1跟emp连接起来

 技术分享图片

(select * from dept1) union (select * from emp)

技术分享图片

 


以上是关于多表查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL-04-笔记

Oracle笔记 多表查询

SQL语句 - 多表查询使用详细介绍

多表查询_左连接多表操作_子查询

多表查询

MySQL 如何多表查询