select 查询事物1,查询事物2 … from 表1,表2, …
笛卡尔集合
- 有两个集合A、B,取这两个集合的所有组成情况。
- 要完成多表查询,需要消除无用的数据。
多表查询的分类
- 内连接查询
- 隐式内连接:使用where条件消除无用数据
select emp.name, emp.gender, dept.name from emp, dept where emp.'dept_id' = dept.'id';
(等同于:select t1.name, t1.gender, t2.name from emp t1, dept t2 where t1.'dept_id' = t2.'id';
- 显示内连接:
- 语法:select 字段列表 from 表名1 inner(可省略) join 表名2 on 条件
- 内连接查询
- 从哪些表中查询数据
- 条件是什么
- 查询哪些字段
- 隐式内连接:使用where条件消除无用数据
- 外连接查询
- 左外连接
- 语法:select 字段列表 from 表1 left outer(可省略) join 表2 on 条件
- 查询的是左表所有数据及其交集部分
- 右外连接
- 语法:select 字段列表 from 表1 right outer(可省略) join 表2 on 条件
- 查询的是右表所有数据及其交集部分
- 左外连接
- 子查询
- 概念:查询中嵌套查询,称嵌套查询为子查询。
select * from table_name where table_name.'math' = (select max(salary) from emp);
- 子查询不同情况:
- 子查询的结果是单行单列的:
- 子查询可以作为条件,使用运算符去判断。运算符:> >= < <= =
- 子查询的结果时多行单列的:
select * from emp where dept_id in (select id from dept where name = '条件1' or name = '条件2');
- 子查询的结果时多行多列的:
- 子查询可以作为一张虚拟表参与查询
- 子查询的结果是单行单列的:
- 概念:查询中嵌套查询,称嵌套查询为子查询。