目录
1、等值查询
2、内连接
3、外连接
3.1、左外连接
3.2、右外连接
3.3、完全外连接
4、交叉连接
5、自连接
6、联合查询
如果我们要查询的数据分布在不同的表时,那么需要连接多张表进行多表查询。
--而这些表当中,必须存在主外键关系(直接关联)
--如果不存在直接关系,则必定存在间接关系,否则业务上是没有意义的
select 字段集合 from 表1,表2,...,表n
where 条件 (连接条件,一般使用主外键)
#注意:
条件一般是主键和外键的关联(可能包含筛选数据的条件);
一般给个表取别名,提高阅读性、性能以及解决字段冲突
(多次忘记):多(3个或以上)表关联查询时,关联条件用AND连接
create table 教师表
(
编号 int auto_increment primary key not null ,
姓名 char(30) ,
性别 char(2) check(性别='男' or 性别='女') default '男',
专业 char(30)
)
create table 学生表
(
学号 int auto_increment primary key not null ,
姓名 char(30) ,
性别 char(2) check(性别='男' or 性别='女') default '男',
身高 float ,
学分 float ,
教师编号 int foreign key references 教师表(编号)
)
insert into 教师表 values ('张三','男','计算机')
insert into 教师表 values ('李四','男','日语')
insert into 教师表 values ('王五','女','英语')
insert into 学生表 values ('学生一','男',1.5,50,1)
insert into 学生表 values ('学生二','女',2.5,60,1)
insert into 学生表 values ('学生三','男',3.5,70,2)
insert into 学生表 values ('学生四','女',4.5,80,2)
select * from 教师表
select * from 学生表
-- 功能同等值连接
-- 好处:连接条件与筛选条件分离,简洁明了
select 字段集合 from 表1 [inner] join 表2 [inner join 表3]
on 条件(主外键|相同数据类型)
where 条件
以第一张表为基础向第二张表匹配,匹配成功则正常显示,匹配不成功,则第二张表以NULL值显示
select 字段集合 from 表1 left [outer] join 表2 on 条件
以第二张表为基础向第一张表匹配,匹配成功则正常显示,匹配不成功,则第一张表以NULL值显示
select 字段集合 from 表1 right [outer] join 表2 on 条件
左、右的数据都要显示,如果能连接,则正常显示;如果不能连接,则以null值显示
# select 字段集合 from 表1 full [outer] join 表2 on 条件
# MySQL不支持,可以使用UNION实现
联合查询:实现完全外连接
SELECT * from 表1 LEFT JOIN 表2 on 条件
UNION
SELECT * from 表1 RIGHT JOIN 表2 on 条件;
#注意:一般表与表之间使用主外键关联数据表,确保数据的一致性
-- 语法一
select 字段集合 from 表1 [inner] join 表2 #sql server 使用关键字 cross
-- 语法二
select 字段集合 from 表1,表2
-- 语法一
select * from 表1 as 别名 join 表1 as 别名 on 条件
-- 语法二
select * from 表1 as 别名, 表1 as 别名 where 条件
把多个查询的结果合并在一起
SELECT f1,f2 FROM T_1
UNION [ALL]
SELECT f1,f2 FROM T_2