Oracle入门(十三B)之高级查询(上)
下章: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)之高级查询(上)相关推荐
- 线性回归中oracle性质,66.Oracle数据库SQL开发之 高级查询——使用线性回归函数...
66.Oracle数据库SQL开发之 高级查询--使用线性回归函数 线性回归函数可以用普通最小平方回归曲线拟合一组数值对.线性回归函数可用于聚合.串口或报表函数. 如下图1: 例如: store@PD ...
- oracle 窗口函数查询条件,62.Oracle数据库SQL开发之 高级查询——使用分析函数之窗口函数...
62.Oracle数据库SQL开发之 高级查询--使用分析函数之窗口函数 窗口函数可以计算一定的记录范围内.一定值域内.或者一段时间内的累积和以及移动平均值.查询返回一组记录,称为结果集.窗口这个术语 ...
- oracle报表查询sql,63.Oracle数据库SQL开发之 高级查询——使用报表函数
63.Oracle数据库SQL开发之 高级查询--使用报表函数 报表函数可用于执行跨越分组和组内分区的计算. 报表计算:SUM,AVG,MAX,MIN,COUNT,VARIANCE,STDDEV.可以 ...
- Oracle数据系列(四)、高级查询2
第四章.Oracle高级查询2 学习目标 4.1.模糊查询LIKE 查询时,字段内容并不一定与查询内容完全匹配,只要字段含有这些内容就行. #查询以李姓开头的员工信息 select * from em ...
- 数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引
1. oracle介绍 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的 ...
- Oracle入门--水表项目(单表查询,链接查询,左右外连接,子查询,分页查询)(3)
水表项目建表 1.1.1 分析 1.1.2 SQL实现 表结构 -- <自来水公司收费系统> -- 1 业主类型表 create table t_ownertype(id number p ...
- Oracle入门(四)之查询基本信息
一.查询基本信息 (1) 查询实例服务 SQL> show parameter instance name (2)查询数据库名字 SQL> show parameter db_name; ...
- Oracle入门(十三C)之高级查询(下)
上章:Oracle入门(十三B)之高级查询(上) 四.常见组函数 SUM.AVG.COUNT.MIN.MAX 分组函数忽略null 值. 不能在WHERE 子句中使用组函数. MIN 和MAX 可用于 ...
- oracle高级查询案例,oracle高级查询(实例基于scott用户四张表)
oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...
最新文章
- SAP Distribution Model初探
- 排球比赛计分规则功能说明书
- Boost:基于Boost的管道pipeline通信
- spring-boot注解详解(七)
- Linux常用命令和vi,gdb的使用
- mvn linux,Linux安装Maven
- matlab 求向量的交集_从零开始的matlab学习笔记——(16)函数绘图
- Android如何判断输入框是否为空
- jenkins html报告不显示样式
- Tf-idf推导及理解
- c语言实现统计过程控制,SPC统计过程控制的课程
- Android 蓝牙终端交互管理
- keras深度学习之猫狗分类一
- SM2椭圆曲线公钥密码算法
- 函授计算机专业教育感想,函授学习心得体会(精选5篇)
- python秒表游戏代码_在pygam游戏中添加秒表
- JavaScript 一些小妙用
- 【论文阅读】Dense Passage Retrieval for Open-Domain Question Answering
- MATLAB点云处理(十四):圆柱体拟合(RANSAC | MSAC)
- UDP 实现多收多发,广播发送,组播发送 TCP 实现多收多发
热门文章
- 2021年度训练联盟热身训练赛第一场 H题On Average They‘re Purple(BFS)
- JAVA中小细节(易忽视和易错点)
- Circle and Points POJ - 1981(单位圆覆盖最多点)
- fusionsphere读音_hydroxyapatite
- hdfs读写流程_一文读懂HDFS分布式存储框架分析
- 邻接表1 - 试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc-数据结构-图-icoding
- ubuntu系统虚拟机linux系统,基于虚拟机的Linux操作系统安装(Ubuntu
- 动态规划 0-1背包问题 滚动数组
- P1975 [国家集训队]排队(三维偏序)
- 【牛客NOIP模拟】路径难题【建图】【最短路证明】