多表查询
1、笛卡尔积:
即有A,B两个集合,取AB两个集合所有的组合情况,即为A*B。
如:SELECT * FROM t_A, t_B;
多表查询:从多张表中查询数据
2、连接查询:
内连接:相当于与A、B的交集;
① 隐式内连接:SELECT 字段列表 FROM 表1,表2... WHERE 条件;
② 显式内连接:SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;
外连接:
左外连接:相当于取A表中所有数据和交集的部分数据;
① SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
注意:如不加条件会以表1为主,如果交集部分表2没有数据则以NULL填充
右外连接:相当于取B表中所有数据和交集的部分数据;
② SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
注意:如不加条件会以表2为主,如果交集部分表1没有数据则以NULL填充
3、子查询(单行单列,多行单列,多行多列)
(1)、单行单列:作为条件值,使用=/!=/>/<等进行条件判断
如:查询比“马云”年龄小的员工
SELECT * FROM emp WHERE age < (SELECT age FROM emp WHERE ename = "马云");
(2)、多行单列:作为条件值,使用IN等关键字进行条件判断
SELECT * FROM 表名 WHERE 字段名 IN (子查询);
如:查询市场部和销售部所有员工信息
SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE dep_name = "市场部" OR dep_name = "销售部");
(3)、多行多列:作为虚拟表
SELECT 字段列表 FROM (子查询) WHERE 条件;
如:查询在2010-11-11之后入职的员工信息和部门信息
SELECT t1.ename, t1.age, dept.dep_name, dept.address, t1.join_date FROM (SELECT * FROM emp WHERE join_date > '2010-11-11') t1, dept WHERE t1.dept_id = dept.id;

浙公网安备 33010602011771号