orcale 数据库查询

表和表之间的关系

主表和从表
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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值