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 子句中列出。 


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

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

相关文章

23.键盘

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.键盘 是输出型外设; 【1】外设工作原理 【图解】外设工作原理: 步骤1:Cpu向外设控制器发出指令(如…

like左匹配索引失效_Mysql索引失效的情况

一、前提条件1、创建三张测试表:DROP TABLE IF EXISTS user;CREATE TABLE user (idint(11) NOT NULL,name varchar(25) DEFAULT NULL,ageint(11) NOT NULL DEFAULT 0,update_time datetime DEFAULT NULL,first_name varchar(25) DEFAULT NULL,last_name varchar(25)…

基于DDDLite的权限管理OpenAuth.net 1.0版正式发布

距离上一篇OpenAuth.net的文章已经有5个多月了,在这段时间里项目得到了很多朋友的认可,开源中国上面的Star数接近300,于是坚定了我做下去的信心。最近稍微清闲点,正式推出1.0版,并在阿里云上部署了一个在线演示&#x…

24.原生磁盘的使用

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.磁盘操作抽象 第1层抽象:通过盘块号读写磁盘(或逻辑盘块号);第2层抽象:用队列缓存多个…

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

上章:Oracle入门(十三B)之高级查询(上) 四、常见组函数 SUM、AVG、COUNT、MIN、MAX分组函数忽略null 值。不能在WHERE 子句中使用组函数。MIN 和MAX 可用于任何数据类型;SUM、AVG只能用于数字数据类型五、子…

微软将降低Visual Studio对操作系统的影响

在过去几年中,为了将Visual Studio变成Windows上的第一开发工具,而不管用户的目标平台是什么,微软作出了重大努力。最近收购Xamarin及通过大力支持开源工具来支持非Windows设备,极大地增加了它对于各类开发人员的用处。这一做法的…

代码设置margintop_关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位)...

关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位)起因:在进行bootstrap的.navbar-brand内文字设置垂直居中时采用line-height高度,无法居中,发现源码.navbar-brand 设置了 padding: 15px 15px;(默认…

Oracle入门(九A)之用户的权限或角色

转载自 查看Oracle用户的权限或角色 前几天被问到一些关于权限和角色的问题,今天抽时间总结一下如何查看Oracle用户的权限或角色,在之前的博文中,写过 SYS,SYSTEM,DBA,SYSDBA,SYSOPER的区别与联系 以及 Oracle中定义者权限和调用者权限案例分…

25.从生磁盘到文件

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.文件:煮熟的磁盘,或熟磁盘; 本节的主要内容是讨论 如何从文件得到盘块号; 3.磁盘操作抽象&#xf…

Storm 1.0.1发布 .NET 适配也已到来

Apache Storm 1.0.0刚发布不久,1.0.1版本也在几天前到来;该版本主要是完成一些BUG修复和小的改进,通过一段时间新版本的使用,特将个人感受和一些遇到的问题归纳如下;另外 .NET 版本的 Storm 适配器也已经发布&#xff…

布隆过滤器速度_详解布隆过滤器的原理、使用场景和注意事项

今天碰到个业务,他的 Redis 集群有个大 Value 用途是作为布隆过滤器,但沟通的时候被小怼了一下,意思大概是 “布隆过滤器原理都不懂,还要我优化?”。技术菜被人怼认了、怪不得别人,自己之前确实只是听说过这…

Oracle入门(十四)之PL/SQL

一、PL/SQL 基本语法 PL/SQL语言是模块式的过程化SQL,是oracle公司对SQL的扩展。 (1)(2)(3)(5)(6)(7)数据类型Number 数字型Varchar2 …

26.文件使用磁盘的代码实现

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.文件内容复习: 1)如何从生磁盘抽象为文件? 核心是从字符流位置算出盘块号;2)如何算出盘…

.NET Core全新的配置管理[共9篇]

提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置信息定义在这两个文件之中。到了.NET Core的时候,很多我们…

redis存opc_KEPServerEX6完整免费版

KEPServerEX6完整免费版是一款先进的连接平台,主要用于为您的应用程序提供单一来源的工业自动化数据,通过连接、管理、监视和控制不通的自动化设备和应用程序来实现工业数据。具有严谨的技术特征,支持多达250种以上的通讯协定,可连…

Oracle入门(十四B)之PL/SQL异常处理

定义:程序执行过程的警告或错误成为例外(Exception) 一、常见预定义错误 二、非预定义错误及用户定义错误 (1)非预定义oracle错误其他标准的oracle错误,可以自定义异常名,将其与指定oracle错误关联,由系统触发。 例子…

C#读书雷达 | TW洞见

大家都知道,ThoughtWorks的技术雷达每年都会发布两到三次,它不但是业界技术趋势的标杆,更提供了一种卓有成效的方法论,即打造自己的技术雷达。在这种思想的驱动下,我们诞生了自己的读书雷达。但这份雷达略显high level…

27.目录与文件系统

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.第4层抽象:抽象整个磁盘到文件系统 【1】文件系统,抽象整个磁盘(第4层抽象) 【图解】整个磁盘抽象1…

dd命令打包多个文件_linux的tar命令详情;linux多个文件压缩打包到一个压缩文件...

tar命令可以用来压缩打包单文件、多个文件、单个目录、多个目录。Linux打包命令_tartar命令可以用来压缩打包单文件、多个文件、单个目录、多个目录。常用格式:单个文件压缩打包 tar czvf my.tar.gz file1多个文件压缩打包 tar czvf my.tar.gz file1 file2,...(file…

28.文件目录解析代码实现

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 背景: 磁盘格式化后,其组成部分包括引导块,超级块,inode使用位图,盘块使用位图&#xff0…