多表查询
介绍
多表查询就是指从多张表中查询数据。
笛卡尔积:
笛卡尔乘积是指在数学中,两个集合A集合 和 B集合的所有组合情况。
(在多表查询时,
需要消除无效的笛卡尔积)
怎么做多表查询的需求?
要查询的数据涉及到哪些表
找出关联条件(外键=主键)+其他额外的筛选条件
找出需求中需要的数据放在select后
内连接
内连接的语法分为两种: 隐式内连接、显式内连接。
隐式内连接
select 字段列表 from 表1 , 表2 where 条件 ... ;
显示内连接
select 字段列表 from 表1 [ inner ] join 表2 on 连接条件 ... ;
自连接
当前表与自身的连接查询,自连接必须使用表别名
表的别名
①. tableA as 别名1 , tableB as 别名2 ;
②. tableA 别名1 , tableB 别名2 ;
注意事项:
一旦为表起了别名,就不能再使用表名来指定对应的字段了,此时只能够使用别名来指定字段。
外连接
外连接分为两种,分别是:左外连接 和 右外连接。
左外连接
select 字段列表 from 表1(左表) left [ outer ] join 表2(右表) on 条件 ... ;
右外连接
select 字段列表 from 表1(右表) right [ outer ] join 表2 (左表) on 条件 ... ;
注意事项:
左外连接和右外连接是可以相互替换的,只需要调整在连接查询时SQL中,表结构的先后顺序就可以了。而我们在日常开发使用时,更偏向于左外连接。
子查询
概念
SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。
SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 );
子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT 的任何一个。
分类
根据子查询结果不同,分为:
A. 标量子查询(子查询结果为单个值)
B. 列子查询(子查询结果为一列)
C. 行子查询(子查询结果为一行)
D. 表子查询(子查询结果为多行多列)
根据子查询位置,分为:
A. WHERE之后
B. FROM之后
C. SELECT之后
标量子查询
子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。
常用的操作符:= <> > >= < <=
列子查询
子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。
行子查询
子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
常用的操作符:= 、<> 、IN 、NOT IN