赞
踩
目录
如果我们要查询的数据分布在不同的表时,那么需要连接多张表进行多表查询。
--而这些表当中,必须存在主外键关系(直接关联)
--如果不存在直接关系,则必定存在间接关系,否则业务上是没有意义的
- 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。