Oracle-DQL(数据查询)笔记

news/2024/10/18 7:58:38/

目录

 一、基本查询语句

二、过滤与排序

三、单行函数

四、多表查询

五、分组函数

六、子查询


  • DML:Data manipulation language 数据操纵语言
  • DDL:Data Definition language 数据定义语言
  • DCL:Data Controller language 数据控制语言

DML用于查询和修改数据记录:insert、update、delete、select

DDL用于创建、修改、删除数据库对象:create table、alter table、drop table、create index、drop index...

DCL用来控制数据库的访问:grant授权、revoke撤销访问权限、commit提交事务处理、

rollback事务回退处理、savepoint设置保存点、lock对数据库的特定部分进行锁定

 一、基本查询语句

SQL> select sysdate,sysdate+1 from dual;

sysdate:查询系统时间

dual:是一个伪表

时间可以与数字运算,单位为天

注:

--空值不同于0,凡是null参与的运算,结果还是null;

字符串连接:使用||

select 'a'||'b' from dual;

字符串:字符串可以是字符、数字、日期,

日期和字符串只能在单引号中出现;

别名:使用双引号或不用,可以使用双引号“job id”将两个单词作为别名;

字符大小写敏感、日期格式敏感。'Hello'、'2022-02-01'

二、过滤与排序

1、DISTINCT

去重查询

SELECT

DISTINCT column_1

FROM table_name;

多列时表示多列的组合去重查询;DISTINCT将NULL值视为重复值。

2、BETEEN AND 表示双闭区间;

3、LIKE 模糊匹配

expresion [NOT] LIKE pattern [ ESCAPE escape_characters ]

%:匹配零个或多个字符的任何字符串。

_:匹配任何单个字符

ESCAPE子句允许查找包含一个或多个通配符的字符串

LIKE '%25!%%' ESCAPE '!' --查询包含25%的字符串

4、is null

5、ORDER BY

desc降序、默认asc升序

SELECT

column_1, column_2, column_3, ...

FROM table_name

ORDER BY

column_1 [ASC | DESC] [NULLS FIRST | NULLS LAST],

column_2 [ASC | DESC] [NULLS FIRST | NULLS LAST],

nulls first--null值排在前面

请注意,ORDER BY子句总是SELECT语句中的最后一个子句

ORDER BY子句可在一列上应用一个函数或别名,例如字符串函数,数学函数等,并按函数的结果对数据进行排序。 

Fetch 限制行数(12C以上版本有效)

 

三、单行函数

指一行输入,输出一行

多行函数指:输入多行,输出一行,即分组函数;

字符函数

lower()、upper()大小写转换

initcap()首字母大写

concat('a','b')字符串连接

substr('hello',1,4)hell

length('hello')字符串长度5

instr('hello','e')某字符在字符串中首次出现的位置2

lpad(salary,10,'*')数值为10位,不足左边补*;******2400

rpad()不足右边补*

trim('H' from 'Hello') ello 默认去掉空格,首尾去掉

replace('abcd','b','m') amcd

SQL中字符的索引是从1开始的,java从0开始

数字函数

round(45.123,1) --45.1 四舍五入

trunc(45.123,1) --45.1 截断

mod(8,3) --2 求余数

日期函数

两个日期相减返回日期之间相差的天数。

months_between()两个日期相差的月数

add_months()指定日期加上若干月数

next_day 指定日期的下一个星期对应的日期 next_day(sysdate,'星期二')

last_day 本月最后一天

round 日期四舍五入

trunc 日期截断

转换函数:显式和隐式

Oracle自动完成下列转换

源数据类型

目标数据类型

varchar2 or char

number

varchar2 or char

date

number

varchar2

date

varchar2

显示转换:to_date 字符串转日期

to_char:数值或日期 转字符串

to_number:字符串转数字

to_char函数对数字的转换,常用的几种格式:

9 数字

0 零

$ 美元

L 本地货币符号

. 小数点

, 千位符

eg: select to_char(sysdate,'yyyy"年"mm"月"dd"日" hh24:mi:ss') from dual;

--2023年05月22日 16:40:42

通用函数 适用于任何数据类型,同时适用null

nvl(expr1,expr2) 将null转换成一个已知的值

nvl2(expr1,expr2,expr2) 当expr1不为null,结果为expr2,否则为expr3

nullif(expr1,expr2) 相等返回null,不等返回expr1

coalesce(expr1,expr2,....,exprn) 与nvl类似,可以同时处理交替的多个值

条件表达式

在SQL中使用if-then-else逻辑

使用两种方法:

--case 表达式

--decode函数

SQL CASE 表达式是一种通用的条件表达式,类似于其它语言中的 if/else 语句。

1、CASE子句可以用于任何表达式可以有效存在的地方。 condition 是一个返回boolean 的表达式。 如果结果为真,那么 CASE 表达式的结果就是符合条件的 result。

 如果结果为假,那么以相同方式搜寻任何随后的 WHEN 子句。 如果没有 WHEN condition 为真,那么 case 表达式的结果就是在 ELSE 子句里的值。 如果省略了 ELSE 子句而且没有匹配的条件, 结果为 NULL。

2、CASE 字段 WHEN 预期值 THEN 结果1 ELSE 结果2 END

如果字段值等于预期值,则返回结果1,否则返回结果2。

1、case when 条件1 then 返回值1 when 条件2 then 返回值2 end。

2、case 字段 when 值 then 返回值 when 值2 then 返回值2 end。

decode(depart_id,10,sal*1.1,

20,sal*1.2,

30,sal*1.3) new_sal

四、多表查询

等值连接:select a.id,a.b_id,b.name from a,b where a.b_id=b.id;

注:连接n个表,至少需要n-1个连接条件

非等值连接:也是两个表的关联查询。

内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行。

select a.id,a.b_id,b.name from a,b where a.b_id=b.id;--(内连接)

select a.id,a.b_id,b.name from a join b using(b_id);

select a.id,a.b_id,b.name from a join b on a.b_id=b.id;

外连接:两个表在连接过程中除了返回满足连接条件的行,还返回左(或右)表中不满足条件的行,这种连接称为左(或右)外连接。

select a.id,a.b_id,b.name from a,b where a.b_id=b.id(+); --左外连接

select a.id,a.b_id,b.name from a left outer join b on a.b_id=b.id; --左外连接

select a.id,a.b_id,b.name from a full outer join b on a.b_id=b.id; --满外连接

自连接:两个相同的表自连接

注:

natural join -- 有局限性,会自动连接两个表中相同的列,不能指定连接的字段。

join...using --有局限性,只能连接两个表中字段名、类型一样的表。

五、分组函数

GROUP BY分组

GROUP BY子句为每个分组返回一行。

GROUP BY子句通常与AVG(),COUNT(),MAX(),MIN(),SUM()、STDDEV()标准差、之类的集合函数一起使用。

注:count(expr) 只计算expr非null的行数。使用nvl函数使分组函数无法忽略NULL值。

count(distinct expr)返回expr非空且不重复的记录总数。

不能在where子句中使用组函数,

HAVING 子句:可以使用组函数,过滤由GROUP BY子句返回的分组。

Group by rollup(A ,B)

产生的分组种数:3种;

第一种:group by A,B

第二种:group by A

第三种:group by NULL

返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。

六、子查询

子查询要包含在括号内;

将子查询放在比较条件的右侧。

单行操作符对应单行子查询,多行操作符对应多行子查询。

单行子查询支持:= < > >= <= <>

多行子查询支持:in、any(和子查询返回的某个值比较)all(和子查询返回的所有值比较)

ANY运算符

ANY运算符用于将值与子查询返回的值或结果集列表进行比较

operator ANY ( v1, v2, v3)

operator ANY ( subquery)

ANY运算符前面必须有一个运算符,例如:=,!=,>,>=,<,<=。

列表或子查询必须用圆括号包围。

SELECT * FROM table_name

WHERE c > ANY ( v1, v2, v3 ); --即比最小的大

等价于

SELECT * FROM table_name

WHERE c > v1 OR c > v2 OR c > v3;

ALL运算符

WHERE c > all ( v1, v2, v3); --即比最大的大


http://www.ppmy.cn/news/79759.html

相关文章

URP的多Pass和Features用法

回到目录 大家好&#xff0c;我是阿赵。这里用一个传统的描边例子来说明一下&#xff0c;URP下怎么使用多Pass和Features。 一、传统多Pass描边 最常用的制作描边方法&#xff0c;就是写多一个Cull Front的Pass&#xff0c;然后通过法线方向扩展顶点&#xff0c;模拟描边的效…

Python实现ACO蚁群优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法&#xff0c…

机试打卡 -05 接雨水(动态规划栈)

我的思路&#xff1a;依次计算每一列能接收的雨水量。 关键点&#xff1a;如何计算得到每一列所能接收到的雨水量&#xff1f; 某一列能够接收到的雨水量&#xff0c;取决于其左右两侧最高的柱子。仅有当左右两侧的柱子均高于该列的高度&#xff0c;该列才可收到雨水&#x…

数组题目总结 -- 花式遍历

目录 一. 反转字符串中的单词思路和代码&#xff1a;I. 博主的做法II. 东哥的做法III. 其他做法1IV. 其他做法2 二. 旋转图像思路和代码&#xff1a;I. 博主的做法II. 东哥的做法 三. 旋转图像&#xff08;逆时针旋转90&#xff09;思路和代码&#xff1a;I. 博主和东哥的做法 …

es 二、核心概念

目录 Nrt cluster集群概念 node节点 Document 文档 Index 索引 Field字段 Type 类型 shard分片 Replica shard副本 数据库和es概念对比 Nrt 写入一秒后就能搜到 cluster集群概念 一台机器启动一个实例即可&#xff0c;多个组成 node节点 一个实例一个节点 Documen…

深度学习基础篇之卷积神经网络(CNN)

一、CNN的基本结构 首先我们来看CNN的解百纳结构&#xff0c;一个常见的图像识别CNN模型如下图&#xff1a; 从图中可以看出最左边的图像就是模型的输入层&#xff0c;在计算机中就是若干个矩阵&#xff0c;这点与DNN类似。 接着是卷积层&#xff08;Convolution Layer&…

【正点原子STM32连载】 第十六章 外部中断实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十六…

C++ new和delete详解

文章目录 1、 C C C内存分布2、 C C C内存管理方式3、 n e w new new 和 d e l e t e delete delete 底层实现4、定位 n e w new new表达式&#xff08;了解&#xff09;5、 m a l l o c 、 f r e e 和 n e w 、 d e l e t e malloc、free和new、delete malloc、free和new、de…