多表关系
1.一对多(多对一)
关系:一个部门对应多个员工,一个员工对应一个部门
实现:在多的一方建立外键,指向的一方的主键
2.多对多
关系:一个学生可以选修多门课程,一门课程可以供多个学生选择
实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
3.一对一
关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提示操作效率
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的UNIQUE
连接查询:
内连接(查询内容为两张表交集的部分)
隐式内连接语法:
select 字段列表 from 表1,表2 where 条件 ...;
显示内连接语法:
select 字段列表 from 表1 [INNER] JOIN 表2 on 连接条件 ...;
备注:distinct 用于查询时候去重
外连接
左外连接语法(查询左表的所有数据包含表1和表2交集部分的数据):
select 字段列表 from 表1 LEFT [OUTER] JOIN 表2 ON 条件 ...;
右外连接语法(查询右表的所有数据包含表1和表2交集部分的数据):
select 字段列表 from 表1 RIGHT [OUTER] JOIN 表2 ON 条件 ...;
自连接
自连接查询语法:
select 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件:
自连接查询,可以是内连接查询,也可以是外连接查询
联合查询(union,union all)
查询语法:
select 字段列表 from 表A ...
union [all]
select 字段列表 from 表B ...;
对于union,就是把多次查询的结果合并起来,形成一个新的查询结果集
union all 只是将数据合并到一起,而union 则是合并在一起然后进行去除处理
子查询
定义:SQL语句中嵌套select语句,称嵌套查询,又称子查询
语法:select * from t1 where column1 = (Select column1 from t2)
子查询外部的语句可以说insert/update/delete/select的任何一个
子查询结果不同,可以分为:
1.标量子查询(子查询结果为单个值)
常用操作符: = <> > >= <
语法:select * from t1 where column1 = (Select column1 from t2)
2.列子查询(子查询结果为一列)
常用的操作符:IN,NOT IN ,ANY ,SOME,ALL
语法:select * from emp where dept_id in (select id from dept where name = '销售部');
select * from emp where salary > all (select salary from dept where name = '销售部');
3.行子查询(子查询结果为一行或多行)
常用操作符: = <> > >= <
语法:select * from emp where (salary,managerid) = (select salary,managerid from emp where name = '张无忌');
4.表子查询(子查询结果为多行多列)
常用操作符: IN
语法:select * from emp where (job,salary) in (select job,salary from emp where name ='鹿杖客' or name = '宋远桥');