下章:Oracle入门(十三C)之高级查询(下)

一、多表格查询

(1)定义

将两个或两个以上的表格,按照一定的关系连接起来进行查询。

(2)多表格查询分类

  • 连接查询
  • 嵌套查询
  • 集合查询

二、连接查询

(1)内连接查询

查询城市及其省份名称,显示对应国家

SQL 99 :

select city,state_province, country_name
from locations L join countries C
on L.country_id = C.country_id; 

oracle:

select city,state_province, country_name
from locations L, countries C
where L.country_id =C.country_id;

查询雇员信息,显示其相关的工作名称

SQL 99 :

select first_name, job_title
from employees E join jobs J
on E.job_id = J.job_id; 

注意:内连接查询中,对连接条件进行匹配,只列出符合条件的数据,如果要显示完全,则应该使用外联接

(2)左外连接查询

要求显示全部雇员名称及其所在部门名称,如果没有对应的部门名称便以null显示

SQL 99 :

select last_name, department_name
from employees E Left join departments D
on E.department_id = D.department_id; 

oracle:

select last_name, department_name
from employees E, departments D
where E.department_id = D.department_id(+); 

(3)右外连接查询

要求显示全部部门名称及其包含雇员名称,如果没有对应的雇员名称便以null显示

SQL 99 :

select last_name, department_name
from employees E Right join departments D
on E.department_id = D.department_id; 

oracle:

select last_name, department_name
from employees E,departments D
where E.department_id(+) = D.department_id; 

(4)全外连接查询

要求显示全部的雇员和部门名称

SQL 99 :

select last_name, department_name
from employees E full join departments D
on E.department_id = D.department_id
order by last_name; 

(5)自然连接

当具有相同列名且数据类型也相同的情况下,自动连接,相当于内连接的等值连接

NATURAL:

select first_name, job_title
from employees E
natural join jobs J; 

等值连接 :

select first_name, job_title
from employees E join jobs J
on E.job_id = J.job_id; 

(6)Using子句

如果数据类型和名称相同的情况下,使用using子句指定列名,如果列名称不相同的情况下,使用on子句

using子句:

select first_name, job_title
from employees E join jobs J
using (job_id); 

on子句:

select name, class_title
from student S join class C
On S.classID = C.cid ; 

(7)交叉连接

笛卡尔积,没有连接条件

SQL 99 :

Select pmid, sname, pdate, pstate
From procure P CROSS join supplier S; 

oracle:

Select pmid, sname, pdate, pstate
From procure P, supplier S; 


三个以上的表查询 

Select omid, gname, gtname, oprice, onum
From t_order_items join t_goods using(gid) join t_gtype using(gtid); 

三、分组计算

如果了解就读年级学生的平均身高?
需要编写多个不同的SQL 语句才能实现此目的:

  • SELECT AVG(身高) FROM 学生WHERE 就读年级= 2013;
  • SELECT AVG(身高) FROM 学生WHERE 就读年级= 2014;
  • SELECT AVG(身高) FROM 学生WHERE 就读年级= 2015;

需要编写上述一系列语句。要简化此类问题,只使用一个语句就达到相同的目的,可使用GROUP BY 与HAVING 子句。

SELECT AVG(身高) FROM 学生
GROUP BY 就读年级; 

(1)根据公司部门分组,统计各部门每月人力总成本

select department_id,sum(salary)
from employees
group by department_id
order by department_id;

(2)带where条件的分组计算:统计2005年及其以后入职各部门员每月工人力成本

select department_id,sum(salary)
from employees
where extract(year from hire_date)>= 2005
group by department_id
order by department_id; 

(3)带where条件的分组计算:统计部门高收入员工【月薪收入超过10000】的人数

Select department_id,count(*)
From employees
Where salary > 10000
Group by department_id
Order by department_id; 

(4)带分组以后的条件计算:统计部门员工月薪收入超过10000以上,并且数量超过2人的部门

Select department_id,count(*)
From employees
Where salary > 10000
having count(*)>2
Group by department_id
Order by department_id; 

(5)分组计算的连接查询:统计采购数量在10以上的采购次数在2次以上的商品采购次数信息,并且显示商品名称信息

Select gid,gname,count(gid)
From t_procure_items
join t_goods using(gid)
Where pinum>10
Group by gid,gname
Having count(gid)>2;

注意:GROUP BY组函数要求,SELECT子句中列出的任何不属于组函数的列,都必须在GROUP BY 子句中列出。

Oracle入门(十三B)之高级查询(上)相关推荐

  1. 线性回归中oracle性质,66.Oracle数据库SQL开发之 高级查询——使用线性回归函数...

    66.Oracle数据库SQL开发之 高级查询--使用线性回归函数 线性回归函数可以用普通最小平方回归曲线拟合一组数值对.线性回归函数可用于聚合.串口或报表函数. 如下图1: 例如: store@PD ...

  2. oracle 窗口函数查询条件,62.Oracle数据库SQL开发之 高级查询——使用分析函数之窗口函数...

    62.Oracle数据库SQL开发之 高级查询--使用分析函数之窗口函数 窗口函数可以计算一定的记录范围内.一定值域内.或者一段时间内的累积和以及移动平均值.查询返回一组记录,称为结果集.窗口这个术语 ...

  3. oracle报表查询sql,63.Oracle数据库SQL开发之 高级查询——使用报表函数

    63.Oracle数据库SQL开发之 高级查询--使用报表函数 报表函数可用于执行跨越分组和组内分区的计算. 报表计算:SUM,AVG,MAX,MIN,COUNT,VARIANCE,STDDEV.可以 ...

  4. Oracle数据系列(四)、高级查询2

    第四章.Oracle高级查询2 学习目标 4.1.模糊查询LIKE 查询时,字段内容并不一定与查询内容完全匹配,只要字段含有这些内容就行. #查询以李姓开头的员工信息 select * from em ...

  5. 数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引

    1.    oracle介绍 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的 ...

  6. Oracle入门--水表项目(单表查询,链接查询,左右外连接,子查询,分页查询)(3)

    水表项目建表 1.1.1 分析 1.1.2 SQL实现 表结构 -- <自来水公司收费系统> -- 1 业主类型表 create table t_ownertype(id number p ...

  7. Oracle入门(四)之查询基本信息

    一.查询基本信息 (1) 查询实例服务 SQL> show parameter instance name (2)查询数据库名字 SQL> show parameter db_name; ...

  8. Oracle入门(十三C)之高级查询(下)

    上章:Oracle入门(十三B)之高级查询(上) 四.常见组函数 SUM.AVG.COUNT.MIN.MAX 分组函数忽略null 值. 不能在WHERE 子句中使用组函数. MIN 和MAX 可用于 ...

  9. oracle高级查询案例,oracle高级查询(实例基于scott用户四张表)

    oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...

最新文章

  1. SAP Distribution Model初探
  2. 排球比赛计分规则功能说明书
  3. Boost:基于Boost的管道pipeline通信
  4. spring-boot注解详解(七)
  5. Linux常用命令和vi,gdb的使用
  6. mvn linux,Linux安装Maven
  7. matlab 求向量的交集_从零开始的matlab学习笔记——(16)函数绘图
  8. Android如何判断输入框是否为空
  9. jenkins html报告不显示样式
  10. Tf-idf推导及理解
  11. c语言实现统计过程控制,SPC统计过程控制的课程
  12. Android 蓝牙终端交互管理
  13. keras深度学习之猫狗分类一
  14. SM2椭圆曲线公钥密码算法
  15. 函授计算机专业教育感想,函授学习心得体会(精选5篇)
  16. python秒表游戏代码_在pygam游戏中添加秒表
  17. JavaScript 一些小妙用
  18. 【论文阅读】Dense Passage Retrieval for Open-Domain Question Answering
  19. MATLAB点云处理(十四):圆柱体拟合(RANSAC | MSAC)
  20. UDP 实现多收多发,广播发送,组播发送 TCP 实现多收多发

热门文章

  1. 2021年度训练联盟热身训练赛第一场 H题On Average They‘re Purple(BFS)
  2. JAVA中小细节(易忽视和易错点)
  3. Circle and Points POJ - 1981(单位圆覆盖最多点)
  4. fusionsphere读音_hydroxyapatite
  5. hdfs读写流程_一文读懂HDFS分布式存储框架分析
  6. 邻接表1 - 试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc-数据结构-图-icoding
  7. ubuntu系统虚拟机linux系统,基于虚拟机的Linux操作系统安装(Ubuntu
  8. 动态规划 0-1背包问题 滚动数组
  9. P1975 [国家集训队]排队(三维偏序)
  10. 【牛客NOIP模拟】路径难题【建图】【最短路证明】