前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >select 进阶查询语句

select 进阶查询语句

作者头像
我与梦想有个约会
发布于 2023-10-20 10:18:46
发布于 2023-10-20 10:18:46
28700
代码可运行
举报
文章被收录于专栏:jiajia_dengjiajia_deng
运行总次数:0
代码可运行

普通的 select…from 很明显不能满足我们的更细化的查询需求,它除了基本语法外,还可以拓展使用一些判断语法和过滤、分组语法。本文介绍一些 select 的进阶查询语法。其中包括等值连接、不等值连接、外连接(左外连接、右外连接)自连接、层次查询、子查询(相关子查询)等语法。本文所操作的均是 oracle 下 scott 用户下的表。大家可参考查阅。


等值连接

条件判断中使用=判断

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select e.empno, e.ename, e.sal, d.dname
from emp e, dept d
where e.deptno = d.deptno
order by dname asc

不等值连接

条件判断中不使用=判断

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select e.ename, e.empno, e.sal, s.grade
from emp e, salgrade s
where e.sal between s.losal and s.hisal;

外连接

希望在最后结果中,对于 where 条件来说不成立的记录,左外连接就是在表达式右侧增加(+),相反,右外连接是在表达式左侧增加(+)。 左外连接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select d.deptno, d.dname, count(e.ename)
from emp e, dept d
where d.deptno = e.deptno(+)
group by d.deptno, d.dname

右外连接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select d.deptno, d.dname, count(e.ename)
from emp e, dept d
where e.deptno(+) = d.deptno
group by d.deptno, d.dname

自连接

将一张表通过别名的方式视为多张表来查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select e.ename  ‘的老板是’  b.ename
from emp e, emp b
where e.mgr = b.empno

层次查询

用来解决处理比较大的数据时自连接导致笛卡尔集比较大的问题,应用场景比较多的就是树状结构的数据,比如城市地区列表等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select level, empno, ename, mgr
from emp
connect by prior empno = mgr
start with mgr is null
order by 1;

子查询

子查询其实就是嵌套 select 语句查询,嵌套的 select 要用小括号括起来,子查询可以写在 select 后面,也可以写在 from 后面,也可以写在 where 后面,但是写在不同的位置都有不同的规则,在 oracle 中子查询是非常需要得到重视的,所以子查询有如下十条规则。 1、合理的书写风格,该换行的地方换行,该缩进的地方缩进 2、小括号 3、主查询和子查询可以是不同的表,只要子查询出来的结果主查询可用就行了 4、可以在主查询的 where、selcet、having、from 后面都可以放子查询 5、group by 后面不能放子查询 6、from后面放置的子查询(***),from后面放置的是一个集合(表,查询结果) 7、一般情况下先进行子查询(内查询),再进行主查询(外查询)但是相关子查询除外 8、一般情况下不在子查询中使用order by(排序没有太大意义)Top-N必须使用 order by 9、单行子查询只能使用单行操作符,多行子查询只能使用多行操作符 10、子查询中null值 单行子查询案例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from emp where sal > (select sal from emp where ename =SCOTT);

多行子查询案例: 查询部门名称为SALES和ACCOUNTING的员工信息,其中 in 语法表示等于条件中的任意一个都成立

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from emp
where deptno in
   (
           select deptno
           from dept
           where dname =SALES’
           or dname =ACCOUNTING);

查询比30号部门任意一个员工公司高的员工,其中 any 语法表示和集合中的任意一个值比较符合条件就可以

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from emp
where sal > any
   (
           select sal
           from emp
           where deptno = 30
   );

查询比30号部门所有人工资都高的人,其中 all 语法表示和集合内的所有值比较符合条件才可以

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from emp
where sal > all
   (
           select sal
           from emp
           where deptno = 30
   )

相关子查询

相关子查询就是主查询将某个值作为参数传递给子查询,请参考后面练习题第二题。

Oracle 分页

在 web 应用中,经常会对数据库有分页的需求,Oracle 不像其他数据库,有非常简单的分页函数,只能通过其提供的一个伪列 rownum 来实现。看如下例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from
   (
           select rownum r, empno, ename, sal from emp
   )
where r >= 5 and r <= 10

习题

1、求员工中所有人工资排前3名的人员

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from
   (
           select rownum, empno, ename, sal
           from emp
           order by sal desc
   )
where rownum <= 3

2、查找员工表中薪水大于本部平均薪水的员工 方法1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select empno, ename, sal, s.avgsal
from emp, (select deptno, avg(sal) avgsal
from emp
group by deptno) s
where s.deptno = emp.deptno
and emp.sal > s.avgsal
方法2,使用相关子查询
select empno, ename, sal,
(
select avg(sal)
from emp
where deptno=e.deptno
) avgsal
from emp e
where sal >
(
select avg(sal)
from emp
where deptno=e.deptno
)

查询每年入职员工人数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select  count(*) Total,
   sum(decode(to_char(hiredate, ‘yyyy’),1980, 1, 0)) as1980,
   sum(decode(to_char(hiredate, ‘yyyy’),1981, 1, 0)) as1981,
   sum(decode(to_char(hiredate, ‘yyyy’),1982, 1, 0)) as1982,
   sum(decode(to_char(hiredate, ‘yyyy’),1987, 1, 0)) as1987”
from emp

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【MySQL】MySQL知识总结
随着,应用程序的功能越来越复杂,数据量越来越大,如何管理这些数据就成了一个 大问题。
半生瓜的blog
2023/05/13
7.4K1
【MySQL】MySQL知识总结
MySQL 数据库基础知识(系统化一篇入门)[通俗易懂]
简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据。更简单的形象理解,数据库和我们生活中存放杂物的仓库性质一样,区别只是存放的东西不同。
全栈程序员站长
2022/09/13
5.3K0
Python 高级笔记第二部分:数据库的概述和MySQL数据表操作
SQL结构化查询语言(Structured Query Language),一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
杨丝儿
2022/02/24
1.9K0
Python 高级笔记第二部分:数据库的概述和MySQL数据表操作
MySQL数据库、数据表的基本操作及查询数据
存储引擎比较 |功能|MyISAM|Memory|InnoDB|Archive| |---|---|---|---|---| |存储限制|256TB|RAM|64TB|None| |支持事务|No|No|Yes|No| |支持全文索引|Yes|No|No|No| |支持数索引|Yes|Yes|Yes|No| |支持哈希索引|No|Yes|No|No| |支持数据缓存|No|N/A|Yes|No| |支持外键|No|No|Yes|No|
星哥玩云
2022/08/17
3.2K0
呕心沥血写了三天3两夜24k字的MySQL详细教程
 存储数据的仓库. 其本质是一个文件系统,数据库按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。
陶然同学
2023/02/27
7200
呕心沥血写了三天3两夜24k字的MySQL详细教程
MySql的索引学习和使用;(本人觉得足够详细)
索引:对数据库中一列或多列的值进行排序的一种结构 作用:使用索引可以快速访问数据库表中特定信息(加速检索表中的数据)
默 语
2024/11/20
1180
MySql的索引学习和使用;(本人觉得足够详细)
六千字带你快速上手操作MySQL
​ 注意事项:mysql的引擎支持问题,innoDB储存类型支持外键,MYISAMD的储存类型不支持外键
冷环渊
2022/11/18
9160
MySQL初级篇(二)
where子句用于规定选择的标准,写法:select 字段 from 表名 where
小馒头学Python
2023/11/09
1890
MySQL初级篇(二)
MySql笔记
又很久没有写博客了 这篇笔记是边学边记的 当时比较仓促 所以有的地方可能会比较乱 但是大概的方法写的还是比较清楚了 等有时间回头再好好整理一下这篇文章。
用户2700375
2022/06/09
6710
MySql笔记
Mysql数据库常用命令总结
1、用truncate,它会重新计算自增,重新从1开始,对事务无影响,不能恢复。 一般上线前使用,清空表格。
jiankang666
2022/05/12
5460
Mysql数据库常用命令总结
MySQL常用基础 - 小白必看
2、create database if not exists 数据库名 (判断数据库是否存在,不存在则创建)
EXI-小洲
2023/01/09
1.3K0
MySQL常用基础 - 小白必看
MySQL 常用的指令
mysql.server start 启动 mysql.server stop 关闭 quit 退出
陈雨尘
2019/05/23
1.4K0
Mysql基础知识合集(精美)
还有一堆哈 。先用先查就好(现) 比如month addtime。。。。。
编程张无忌
2021/01/26
8680
Mysql基础知识合集(精美)
MySQL(四)
基本语法: insert into {表名}({字段列表}) values({值列表1}), ({值列表2}), …
1ess
2021/11/01
1K0
MYSQL数据库设计的一些小技巧[转载]
常用数据操作语言DML笔记(select insert update delete) select 语句 高级的查询功能,见下面的详细内容 select 列名1,列名2 ... from 表名1,表名2... [where 条件] like [group by...] [having ...] [order by...] 以特定的顺序显示 例:order by name asc;以名字显示,为降序排列 insert 语句 MySQL 当记录不存在时插入 insert if
wangxl
2018/03/07
1.2K0
MySQL入门学习笔记(上)
英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。 顾名思义:存储数据的仓库,实际上就是一堆文件。这些文件中存储了具有特定格式的数据。
啵啵鱼
2022/11/23
1.8K0
MySQL入门学习笔记(上)
Mysql超详解
类型后边可以加限定条件:primary key(主键)、not null(不能为空)、unique(唯一的)、foreign key(外键)、default(定义初值)、
泰斗贤若如
2019/08/19
1.4K0
MySQL基础
2、DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理 DB 3、SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言
OY
2022/03/17
2.6K0
MySQL基础
mysql入门
定义:操作一组数据(多行记录)返回一个结果,也叫分组函数 大多用于统计 例如:统计各部门中雇员的人数。统计各部门中最高和最低薪资
崔笑颜
2020/06/08
1.1K0
MySQL基础
SQL:操作关系型数据库的编程语言,定义了一套操作 关系型数据库统一标准,英文:Structured Query Language (SQL)。
roydonGuo
2023/03/08
2K0
MySQL基础
相关推荐
【MySQL】MySQL知识总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档