多表查询

1
select * from1,表2;

结果为 表1表2 的 笛卡儿积 (表1表2的所有组合)

字段表示

访问表中的字段: 表1.字段

当进行多表查询时,可以使用字段名而不是完整的表.字段形式来表示字段。这样做的前提是查询中涉及的表中没有相同名称的字段,否则会导致歧义而报错

为了避免字段名冲突,最好使用完整的 表.字段 形式

内连接 INNER JOIN

查询范围:两表的交集

隐式内连接:

1
select 字段列表 from1,表2 where;

显式内连接:

1
2
-- inner 可省略
select 字段列表 from1 [inner] join2 on 连接条件;

外连接 OUTER JOIN

以一个表为主,另一个表的数据为附加上去的(可以为Null)

左外连接 LEFT OOUTER JOIN

左表为主,右表为附加数据

1
2
-- outer 可省略
select 字段列表 from 表左 left [outer] join 表右 on 连接条件;

右外连接 RIGHT OUTER JOIN (使用较少)

左表为附加数据,以右表为主

因右外连接可替换为左外连接,故使用较少

1
2
-- outer 可省略
select 字段列表 from 表左 right [outer] join 表右 on 连接条件;

子查询/嵌套查询

N/A NULL 的转换

一个查询的结果是N/A,但是再经过再嵌套一层 SELECT (SELECT N/A的结果) ,结果就变成了 NULL

效果相当于 SELECT IFNULL((SELECT 语句),NULL)

标量子查询:子查询返回的结果为单个值

原数值的位置替换为查询语句

1
select * from tb_emp where id = (select id from tb_dept where name = '教研部');

行子查询:子查询返回结果是一行(或多行)