1.交叉连接
没有条件的多表查询就是交叉连接,一定会产生笛卡尔积。sql中表之间的逗号就相当于一个join。
2.内连接
内连接要有条件,就是用左表的记录去匹配右表的记录,匹配上才展示,匹配不上不展示。
2.1隐式内连接
select * from tableA,tableB where tableA.id=table.Aid;
2.2显示内连接
使用join字段就是显示内连接
select * from tableA join tableB where tableA.id=table.Aid;
select * from tableA join tableB on tableA.id=table.Aid;
3.外连接
外连接也有两种,左外连接和右外连接。
先说左外连接,就是在左表数据全部展示的基础上,匹配右表数据,匹配上就展示,匹配不上就不展示。
右外连接,在展示右表的基础上,匹配左表,匹配上就展示,匹配不上就不展示。
4.子查询
一条select语句的结果作为另一条select语句语法的一部分
4.1子查询的结果为单值
select id from tableA where salary=(select max(salary) from tableA)
4.2子查询的结果为单列多行
SELECT * FROM dept WHERE id IN(SELECT dept_id FROM emp WHERE salary >5000);
4.3子查询的结果为多行多列
SELECT *
FROM ( SELECT *
FROM emp
WHERE join_date >'2011-1-1') AS e
INNER JOIN dept d
ON e.dept_id = d.id;