多表查询

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;

posted @ 2022-04-04 21:16  A_shou  阅读(175)  评论(0)    收藏  举报