先建立两个表,员工表跟部门表
部门表:
员工表:
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)