表和表之间的关系
主表和从表
A表中的字段参考于B表中的字段
B表为主表A表为从表
B表中被参考的字段是主键
主键的要求的不能重复,不能为空 primary key
A表中引用主表的字段是外键,可以重复,可以为空,但是必须参考于主表中的主键
关系
表与表之间有3种关系,确切说是记录与记录之间的关系。
1.一对多。
1个表的1条记录对应另一个表的多条记录
2.一对一,
1个表的1条记录对应另一个表的1条记录
并不常见,其实是可以合并的
3.多对多,
1个表的多条记录对应另一个表的多条记录
两个表往往本身并无关系,通过另一个关系表相关联。
多表的联合查询
用的是sql99标准
笛卡尔积
将2个表交叉相乘,比如a有2条数据,b有3条数据,笛卡尔积后就有2*3=6条数据
select * from employees,departments,
交叉连接
select * from employees
cross join
内连接inner join…on…
返回只满足条件的
select e.first_name,d.department_name, j.job_title from employees e
inner join departments d on e.department_id=d.department_id
inner join jobs j on e.job_id=j.job_id
外连接
1.左外连接 left [outer] join
返回左表所有记录,右表不满足条件以空来填充
select e.first_name,d.department_name,j.job_name from employees e
left join jobs j on e.job_id=j.job_id
left join departments d on d.department_id = e.department_id
2.右外连接 right [outer] join
返回右表所有记录,左表不满足条件以空来填充
select e.first_name,d.department_name,j.job_name from employees e
right join jobs j on e.job_id=j.job_id
right join departments d on d.department_id = e.department_id
3.满(全)外连接 full [outer] join
返回左,右表所有记录,不满足条件的分别以空来填充
select e.first_name,d.department_name from employees e
full join jobs j on e.job_id=j.job_id
full join departments d on d.department_id = e.department_id
分组查询和组函数(聚合函数)
组函数
- sum
- avg
- min
- max
- count
求所有salary的总和
select sum(salary) from employees
求所有salary的平均值
select avg(salary) from employees
求所有salary的最小值
select min(salary) from employees
求所有salary的最大值
select max(salary) from employees
求所有salary的个数
select count(salary) from employees
分组查询
select 字段列表 as 别名 from 表名 where 条件 group by 分组字段 having 分组条件 order by 字段列表 asc|desc
- 必须按照这个顺序来写 having 之后再执行别名,order by 最后执行。
- 在字段列表的位置只能放分组字段和组函数(聚合函数)
- 分组条件只能写组函数(聚合函数)
--统计每个部门的总工资
select department_id, avg(salary) as 平均工资
from employees
group by department_id