多表查询
查询语法:
SELECT
列表名称
FROM
表明列表
WHERE
…
笛卡尔积:
有两个集合A,B,取这两个集合的所有组成情况
要完成多表查询,需要消除无用的数据
多表查询分类:
1、内连接查询:
1、隐式内连接:使用where消除无用的数据
例子:
SELECT
t1.name,
t1.gender,
t2.name
FROM
emp t1,
dept t2
WHERE
t1.dept_id=t2.id;
2、显式内连接:
语法:SELECT 字段列表 FROM 表名1 INNER JOIN 表名2 ON 条件;
SELECT 字段列表 FROM 表名1 JOIN 表名2 ON 条件;(INNER可省略)
3、内连接查询:
1、从哪些表查询数据
2、条件是什么
3、查询哪些字段
2、外连接查询:
1、左外连接:
语法:select 字段列表 from 表1 left [outer] join on 条件
查询的是左表所有所有数据以及其交集部分
2、右外连接:
语法:select 字段列表 from 表1 right [outer] join on 条件
查询的是右表所有所有数据以及其交集部分
3、子查询:
概念:查询中嵌套查询,称嵌套查询为子查询
SELECT * FROM emp WHERE emp.salary=(SELECT MAX(salary) FROM emp);
子查询不同情况:
1、子查询的结果是单行单列的:
子查询可以作为条件,使用运算符判断:>、>=、=、<=、<
2、子查询的结果是多行单列的:
使用运算符in来判断
SELECT * FROM emp WHERE dept_id IN(SELECT id FROM dept WHERE NAME='财务部‘ OR NAME=’市场部‘);
3、子查询的结果是多行多列的:
子查询可以作为一张虚拟表
查询员工入职某日期之后的员工信息和部门信息
SELECT * FROM dept t1,(SELECT * FROM emp WHERE emp.join_date>‘2011-11-11’) t2 WHERE t1.id=t2.dept_id;