之前学习oracle数据库没有一个很深入的学习,如今工作中再次用到oracle数据库,并且常用的都是一些关联查询,在此对SQL查询做一个总结(以 表d,表c为例):
create dempt (dempt_id number ,dempt_name varchar2(20),dempt_arae varchar2(20));
create constans (c_id number , c_name varchar2(20), dempt_id number ,c_sales number );
insert into dempt values(1,'d_a','d_1');
insert into dempt values(2,'d_b','d_2');
insert into dempt values(3,'d_c','d_3');
insert into dempt values(4,'d_d','d_4');
insert into dempt values(5,'d_e','d_5');
select * from dempt ;
insert into constans values(1,'y_a',1,20);
insert into constans values(2,'y_b',2,30);
insert into constans values(3,'y_c',3,40);
insert into constans values(4,'y_d',2,50);
insert into constans values(5,'y_e',4,60);
insert into constans values(6,'y_f',1,70);
select * from constans;
迪卡尔积关联:
--返回结果数量是各个表记录的乘积
--结果是d每条记录与c每条记录结合形成
内关联查询:join.... on.....
---where 等值关联 与 join.....on.... 同义(结果集一样)join...on...为内连接标准写法,
where 条件:
select c.c_id, d.dempt_id,c.dempt_id,c.c_name,d.dempt_name,d.dempt_arae ,c.c_salesinner join...on...:
select c.c_id,c.c_name,d.dempt_name,d.dempt_arae ,c.c_salesjoin......using.....
--关联的字段在使用时不能加别名
外连接查询 (outer) join.....on...
(1)左连接查询 left (outer) join......on....
--就是将左表(主表)中所有数据分别与右表每条数据进行连接组合,除了内连接查询外的数据,还有左表中不符合条件的数据,并在右表的相应列中填上null值
select c.c_id,c.c_name,d.dempt_name,d.dempt_arae ,c.c_sales from constans c left join dempt d
on c.dempt_id =d.dempt_id;
--转换成where (+)表示为补充表,另外一个表即为主表
select c.c_id,c.c_name,d.dempt_name,d.dempt_arae ,c.c_sales from constans c,dempt d
where c.dempt_id =d.dempt_id(+);
(2)右连接查询 right (outer) join ....on.....
--就是将右表(主表)中所有数据分别与左表每条数据进行连接组合,除了内连接查询外的数据,还有右表中不符合条件的数据,并在左表的相应列中填上null值
select c.c_id,c.c_name,d.dempt_name,d.dempt_arae ,c.c_sales from constans c right join dempt d
on c.dempt_id =d.dempt_id;
--转换成where (+)表示为补充表,另外一个表即为主表
select c.c_id,c.c_name,d.dempt_name,d.dempt_arae ,c.c_sales from constans c,dempt d
where c.dempt_id(+)=d.dempt_id;
(3)全查询 full (outer) join ....on...
--全外连接就是将左表的所有数据分别与右表的每条数据进行连接组合,返回的结果除了内连接的数据外, 还有两个表中不符合条件的数据,并在左表或者右表的相应列中填上null值
select c.c_id,c.c_name,d.dempt_name,d.dempt_arae ,c.c_sales from constans c full join dempt d
on c.dempt_id =d.dempt_id;
group by 分组查询(聚合函数结果集汇总)having 限制返回结果集(条件限制)order by 排序
在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚组函数。常用聚合函数:
count()与count(*) 计数
sum()求和
AVG() 平均值
MAX() ,MIN()最大值与最小值
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚合函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
使用order by排序时order by子句置于group by 之后 并且 order by 子句的排序标准不能出现在select查询之外的列。