oracle关联分组查询,oracle中关联查询、分组查询

高级查询

1.关联查询

作用:可以跨越多表查询

--查询出员工的名字和他所在部门的的名字

//古老的写法

select first_name,name from s_emp,s_dept where s_emp.dept_id = s_dept.id;

//现在的写法

select e.first_name,s.name from s_emp e join s_dept s on e.dept_id = s.id;

语法:

select 列,列,列

from 表1 join 表2

on 表1外键=表2主键

案例:

-- 找出Sales 部门的所有员工

select * from s_emp e

join s_dept d on e.dept_id = d.id

where d.name = ‘Sales‘;

-- 找出在 Asia 地区工作的员工

select * from s_emp e

join s_dept d on e.dept_id=d.id

join s_region r on d.region_id=r.id

where r.name=‘Asia‘;

--找出客户‘Hamada Sport‘ 的所有订单号、费用、下订日期

select o.id,o.total,o.date_ordered from s_ord o

join s_customer c on o.customer_id = c.id

where c.name = ‘Hamada Sport‘;

--找出所有在‘Asia‘客户的信息

select * from s_customer s

join s_ord o on s.id = o.customer_id

join s_region r on s.region_id = r.id

where r.name = ‘Asia‘;

练习:

--查询出客户名字叫unisports的订单信息

select o.* from s_customer s

join s_ord o on s.id = o.customer_id

where lower(s.name) = lower(‘unisports‘);

--查询出设在北美的的部门名称

select s.name from s_dept s

join s_region r on s.region_id = r.id

where r.name=‘North America‘;

--查询出在北美工作的员工姓名、工资、入职日期和职位

select s.first_name,s.salary,s.start_date,s.title from s_emp s

join s_dept d on d.id = s.dept_id

join s_region r on r.id = d.region_id

where r.name=‘North America‘;

--查询出所有客户名,及其订单号

select s.name,o.id from s_customer s

left join s_ord o on s.id = o.customer_id;

2.外联接

左外联[left outer join]

以关联的左边为准,即使右边没有与之匹配的记录,则左边的记录也要

出现在结果集中,右边全部以NULL值显示。

右外联[right outer join]

以关联的右边为准,即使左边没有与之匹配的记录,则右边的记录也要

出现在结果集中,左边全部以NULL值显示。

补充 :全外联,交叉外联

--查询出所有客户名,及其订单号

select s.name,o.id from s_customer s

left join s_ord o on s.id = o.customer_id;

--查询所有订单号,订单费用以及订单所对应的客户名

select c.name,o.id,o.total from s_customer c

right join s_ord o on o.customer_id = c.id;

--找出Womansport所购买的订单信息(订单编号,费用,支付方式)

select o.id,o.total,o.payment_type from s_customer c

left join s_ord o on o.customer_id = c.id

where lower(c.name) = lower(‘Womansport‘);

--找出Operations部门工作的员工名,工资,并且按照工资降序排列

select s.first_name,s.salary,d.name from s_emp s

left join s_dept d on d.id=s.dept_id

where lower(d.name)=lower(‘Operations‘)

order by s.salary desc;

自关联:

-- 查询出所有的员工名以及员工的上司名

select s.first_name,e.first_name from s_emp s

left join s_emp e on s.manager_id=e.id;

----

注:关联的条件不一定总是做等值比较的。

==========================

3分组查询

定义:利用内置的分组函数来查询

所谓分组,就是看待数据的“角度”不同。

也就是把某类值相同的看做一组。

语法:

select 列名,组函数(列名)...from 表名

where 条件

group by 列

having 字句

order by 列

分组函数:

SUM([distinct] 列|表达式|值) 求和

AVG([distinct] 列|表达式|值) 求平均值

MAX(列|表达式|值) 求最大值

MIN(列|表达式|值) 求最小值

COUNT([distinct] 列|*) 求个数(包含null)

如:

-- 找出员工的最高、最低、平均、以及工资总和

select max(salary),min(salary),avg(salary),sum(salary) from s_emp;

-- 找出各部门员工的最高、最低、平均、以及工资总和

select dept_id,max(salary),min(salary),avg(salary),sum(salary) from s_emp

group by dept_id

order by dept_id;

-- 找出41,42,50部门员工的最高、最低、平均、以及工资总和

select dept_id,max(salary),min(salary),avg(salary),sum(salary) from s_emp

group by dept_id

having dept_id in (41,42,50)

order by dept_id;

注意1:只有出现在group by 后面的列[用来做为分组条件的列],才有资格

写在SELECT的后面,除非使用组函数进行修饰。

注意2:having 和where 都是条件

区别:

WHERE 子句中是不能使用 组函数的,因为它在GROUP BY 之前。

但是,HAVING 子句中可以使用组函数,因为它在GROUP BY 之后。

-- 统计各个职称中工资高于1100的各有多少人。

select count(*) from s_emp where salary >1100

group by title;

-- 找出订单数量超过>=2个的客户

select c.name

from s_customer c join s_ord o on o.customer_id=c.id

group by c.name

having count(o.id)>=2;

-- 统计共计多少个员工

select count(id) from s_emp;

-- 统计共计多少个职称[不能重复]

select count(distinct title) from s_emp;

--练习:

--1.找出超过(含)4个员工的部门id及部门名称

select d.id,d.name,count(*) from s_emp e

left join s_dept d on e.dept_id=d.id

group by d.id,d.name

having count(*)>=4;

--2.找出订单总费用超过10000元的客户

select c.name,o.total from s_ord o right join s_customer c on o.customer_id=c.id

where o.total>10000

group by c.name,o.total;

--3.统计各区域的客户数量,按它的降序排序

select count(c.name),r.id from s_customer c join s_region r on c.region_id=r.id

group by r.id

order by count(c.name) desc;

--4.统计各经理的所管理的员工数

select s.manager_id,count(s.first_name) from s_emp s left join s_emp e on s.manager_id=e.id

group by s.manager_id;

--5.统计订单中各种支付的费用

select sum(total),payment_type from s_ord

group by payment_type;

oracle中关联查询、分组查询

标签:利用   部门   外键   显示   join   date   min   asi   ==

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:http://www.cnblogs.com/qianqian528/p/7815097.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机实验:数据区传送程序

任务 将单片机片内存储器存储区首地址设置为60H、片外存储器存储区首地址设置为4000H,存入片内存储区内容为04H-14H共17个字节 ,读取片内首地址为60H单元内容,将该内容传送到片外数据存储器存储区中保存(首地址4000H),将保存在片…

shapefile导入oracle,shp2sdo.exe用法:shpfile导入OracleSpatial

在使用OracleSpatial时,不免需要将shpfile导入,本人使用shp2sdo.exe和oracle内置工具(sqlplus和sqlldr)来完成,使用熟了还比较方便,主要是手动操作四步,本人是在windows中进行的,导入cities.shp。1. 转换数据格式首先使用shp2sdo.…

信号与系统实验:信号抽样

已知一个连续时间信号f(t)sinc⁡(t)f(t)sinc⁡(t)f(t)sinc⁡(t),取最高有限带宽频率fm1Hzf_m1Hzfm​1Hz (1)分别显示原连续信号波形和 fsfm、fs2fm、fs3fmf_sf_m、f_s2f_m、f_s3f_mfs​fm​、fs​2fm​、fs​3fm​三种情况下抽样信号的波形。…

php http 500 内部服务器错误,解决:phpmyadmin http 500 内部服务器发生错误

phpMyAdmin 设置(phpMyAdmin 4.2.9):下载解压缩后,打开phpMyAdmin 目录找到config.sample.inc.php 文件,将改文件名改成config.inc.php修改config.inc.php 文件找到以下代码并将cookie 改成http/* Authentication type */$cfg[Servers][$i][auth_type] cookie;改成$cfg[Server…

php 的html文件怎么打开,什么是html文件?html格式如何打开?(图)

打开html的软件有:1、记事本;2、Adobe Dreamweaver软件;3、sublime text软件;4、notepad软件;5、vscode软件等等。有时我们会遇到html格式的文件需要打开,那么什么是html格式?该怎么打开html格式…

信号与系统实验:用Matlab表示常用连续时间信号

(1)单位阶跃信号u(t)u(t)u(t) function yheaviside(t) y(t>0);单位阶跃信号的MATLAB源程序如下: t-10:0.001:10; yheaviside(t); plot(t,y,r);(2)单位冲激信号δ(t)δ(t)δ(t) 单位冲激信号的MATLAB源程序如下: x-100:0.1:100; ydirac(x); %狄拉克…

信号与系统实验:Matlab求连续时间信号的傅里叶变换

1.用Matlab符号运算求解法求单边指数信号f(t)e−2tu(t)f(t)e^{-2t}u(t)f(t)e−2tu(t)的FT MATLAB源程序为: ftsym(exp(-2*t)*heaviside(t)); fwfourier(ft)运行结果为: fw 1/(2 w*1i)2.用Matlab符号运算求解法求F(jw)11w2F(jw)\frac{1}{1w^2}F(jw)1…

oracle11g基目录和主目录,Red Hat Enterprise Linux4.0 安装oracle11g

在linux环境下安装前的准备1.内存空间大小 最少1GB的物理内存查看现有内存的命令#grep MemTotal /proc/meminfo2.交换分区的大小内存和交换分区的配置关系内存 (MB) 交换分区256~512 内存的2倍513~2048 内存的1.5倍2049…

数据结构实验:一元多项式计算器

一、实验内容及要求 1.任务描述: 实验内容: 设有一元多项式Am(x)和Bn(X),编程实现多项式Am(x)和Bn(x)的加法、减法和乘法运算。其中多项式描述为: Am(x)A0A1x1A2x2A3x3….Amxm; Bn(x)B0B1x1B2x2B3x3….Bnxn。 输入和…

php保存gbk字符串,php判断字符串gbk/utf8编码和转换

代码就点击进来看吧。前段时间聊天的时候卜卜口提到可以由程序提取歌曲文件的ID3信息,这样就免去那些音乐上传时候用户填写表单的步骤。仔细想想这么利国利民的东西必需试试!首先考虑到的就是编码的判断,在网上找到别人写好的代码&#xff0c…

数据结构实验:城市交通咨询模拟系统

一、 实验目的 1.目的:掌握图的存储、构建、搜索等操作和应用,能用最短路径及其搜索等算法编制较综合性的程序,求解最优路线问题,进行程序设计、数据结构和算法设计等方面的综合训练。 2.任务:…

传感器信号处理仿真实验(c语言实现),均值滤波,滑动滤波

文章目录总结test1、动态显示一段正弦波信号的曲线:test2、现提供随机信号函数,随意设定两路不同幅度的随机信号,动态显示出来。test3、用均值法将原始的传感器信号进行滤波处理test4、用滑动滤波法将原始的传感器信号进行滤波处理总结 1.为…

python和php合成,Python照片合成的方法详解

【相关学习推荐:python教程】文章目录前言Github效果实现过程整体代码前言看电影的时候发现一个照片墙的功能,觉得这样生成照片挺好玩的,于是就动手用Python做了一下,觉得用来作照片纪念的效果可能会不错。P:后面了解到我想做的功…

蓝桥杯入门练习1-4(python)

1.Fibonacci数列 Fibonacci数列的递推公式为:FnFn-1Fn-2,其中F1F21。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数…

12514oracle数据库重启,12514(linux登录oracle数据库)

ora-12514的错误的原因有很多。但无外乎这几种:1)、 ORA-12541: TNS: 没有监听器 显而易见,服务器端的监听器没有启动,另外检查客户端IP地址或端口填写是否正.早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了“…

python常用输入输出の方法

获取用户输入: Python split()方法: #Python split()方法: """ 描述 Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num1 个子字符串 语法 split() 方法语法&#xf…

存储器和寄存器数据传输(ARMv8)

存储器和寄存器交互操作(ARMv8) 1.为什么需要存储器和寄存器交互操作? 编程语言中可能有数组和结构体这样复杂的数据结构。处理器只能保存少量数据到寄存器,但是可以存储器中放数十亿数据,因此数据结构存在存储器中。LEGv8指令只对寄存器操…

linux下载命令 scp,linux命令详解之scp命令

作用scp命令常用于linux之间复制文件和目录。scp是secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。格式从本地复制到远程复制文件scp local_file remote_usernameremote_ip:remote_folder或者scp local_file remote_usernameremote_ip:remote_fil…

python常用类型转换の方法

python实现字符和ascll转换 # 用户输入字符 c input("请输入一个字符: ") # 用户输入ASCII码,并将输入的数字转为整型 a int(input("请输入一个ASCII码: ")) print( c " 的ASCII 码为", ord(c)) print( a , " 对应的字符为&…

linux系统运行pbs出现ntf,Linux系统启动故障修复

Linux在启动过程中会出现一些故障,导致系统无法正常启动,本文列举了几个应用单用户模式、GRUB命令操作、Linux救援模式的典型故障修复案例。一、单用户模式Linux提供了单用户模式(类似Windows安全模式),可以在最小环境中进行系统维护。在单用…