多表查询

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

部门表:

员工表:

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)

原文地址:https://www.cnblogs.com/quanjunkang/p/10291245.html