04-Oracle-DQL

nobility 发布于 2022-09-06 1080 次阅读


DQL

简单查询

SELECT * FROM TAB;
--查看数据库所有的表
DESC emp;
--查看emp表的结构
--describe 描述
SELECT [DISTINCT] *| 列名称 [别名],列名称 [别名]... | 数据计算 
FROM 数据表 [别名]
--优先执行FROM
--DISTINCT消除重复数据
-- * 查询所有列
--也可以经行常量查询,字符串用单引号,数字不需要,常量后面加别名不需要加单引号
--使用||经行字符串连接处理

限定查询

SELECT [DISTINCT] * | 列名称 [别名],列名称 [别名],... | 数学计算 
FROM 数据表 [别名] 
[WHERE 限定条件];
--先执行FROM,然后执行WHERE,最后SELECT
--数据是字符串要用单引号,且区分大小写
符号 含义
AND &、与操作
NOT !、非操作
OR |、或操作
BETWEEN 最小值 AND 最大值 带边界的查询
支持各种数据类型
IS NULL 是空
IS NOT NULL 不是空
LIKE 模糊查询
支持各种数据类型
NOT IN 和 IN 范围查询

模糊查询

符号 含义
_ 一位
% 零位,一位,多位
%关键字% 只要有关键字就列出
无关键字就是查询全部

范围查询

符号 含义
IN (数据1,数据2...) 查询在种子数据中的数据
NOT IN (数据1,数据2...) 查询不在种子数据中的数据
  1. 在NOT IN 操作中,种子数据中不能出现NULL,若出现NULL直接不查询
  2. 在IN操作中,种子数据中出现NULL,则不会理会NULL

查询排序

SELECT [DISTINCT] * | 列名称 [别名],列名称 [别名]... | 数学计算
FROM 数据表 [表名]
[WHERE 限定条件]
[ORDER BY 排序字段 [ASC | DESC],排序字段 [ASC | DESC]...;
--先执行FROM,之后执行WHERE,然后执行SELECT,之后执行ORDER BY
 --ASC 升序 默认
 --DESC 降序 默认

单行函数

字符串函数

  • 转大写:字符串 UPPER(数据 | 字段名)
  • 转小写:字符串 LOWER(数据 | 字段名)
  • 首字母大写:字符串 INITCAP(数据 | 字段名)
  • 计算字符串长度:NUMBER LENGTH(数据 | 字段名)
  • 字符串截取:字符串 SUBSTR(数据 |字段名,截取起始点[,截取长度])
    • 截取起始位置是从1开始的,设置成0也是从1开始
    • 截取起始位置可以是负数,代表从倒数第几个开始截取
  • 字符串替换:字符串 REPLACE(数据 | 字段名,要替换的数据,替换数据)
  • 日期转换:日期 TO_DATE('1999-10-10 10:10:10','yyyy-mm-dd hh24:mi,ss')
    • 忽略时分秒自动置0
    • 忽略DD默认置为1
    • 忽略MM默认取当前月

数值函数

  • 四舍五入:ROUND(数据 | 字段名[,保留小数位])
    • 保留位可以是负数
  • 取整数:TRUNC(数据 | 字段名[,保留小数位])
  • 取余:MOD(数据1 | 字段名1,数据2 | 字段名2)
    • 结果是数据1%数据2

多表查询

SELECT [DISTINCT] * | 字段名 [别名],列名称 [别名]... | 数据计算
FROM 数据表1 [别名],数据表2 [别名]...
[WHERE 限定条件]
[ORDER BY 排序字段 [ASC | DESC],排序字段[ASC | DESC]...];
--先执行FROM,之后执行WHERE,然后执行SELECT,之后执行ORDER BY
  • 内连接:等值连接
  • 外连接
    • 左外连接:Oracle自己的,右加 '(+)',字段=字段(+)
    • 右外连接:Oracle自己的,左加 '(+)',字段(+)=字段
    • 全外连接
  • 自身连接

SQL:1999语法标准

  • 交叉连接:表1 CROSS JOIN 表2:产生笛卡尔积
  • 自然连接
    • 表1 NATURAL JOIN 表2:内连接,自动找到同名字段消除笛卡尔积
    • 表1 JOIN 表2 USING(相同字段名):内连接,当有多个相同字段使用USING来确定关联字段
    • 表1 JOIN 表2 ON(设置关联条件):内连接,和WHERE相同
  • 外连接
    • 左外连接:表1 LEFT OUTER JOIN 表2 NO(设置连接条件)
    • 右外连接:表1 RIGHT OUTER JOIN 表2 NO(设置连接条件)
    • 全外连接:表1 FULL OUTER JOIN 表2 NO(设置连接条件)

集合处理

关键字 含义
UNION 重复部分不显示
UNION ALL 重复部分也显示
MINUS 显示不同部分
INTERSECT 显示相同部分

分组统计查询

5. SELECT [DISTINCT] 分组依据字段 | 统计函数,...
1. FROM 数据表1 [别名],数据表2 [别名]...
2. [WHERE 限定条件]
3. [GROUP BY 分组依据字段]
--只有在GROUP BY 中出现的字段才能在 SELECT 中出现
4. [HAVING 分组后过滤]
--可以使用统计函数
6. [ORDER BY 排序字段 [ASC | DESC],排序字段[ASC | DESC]...]
--先执行FROM,之后执行WHERE,然后执行GROUP BY,然后执行SELECT,之后执行ORDER BY

统计函数

统计数据条目数:COUNT(* | [DISTINCT] 字段名),注意不统计空

统计数据总和:SUM(字段名)

统计数据平均值:AVG(字段名)

统计出最大值:MAX(字段名)

统计出最小值:MIN(字段名)

子查询

WHERE(单行或单列)
  • 单行单列:直接将数据拿来对比
  • 单行多列:使用(子查询返回字段1,子查询返回字段2...)来进行对比
  • 多行单列:集合操作
    • IN:范围内的数据,注意NOT IN 若是NULL不返回结果
    • ANY
      • =ANY:与IN相同
      • >ANY:比最小的大
      • <ANY:比最大的小
    • ALL:
      • >ALL:比最大的大
      • <ALL:比最小的小
HAVING(单行单列且需要统计时)
FROM(多行多列,及表)
  • 比分组统计查询效率高

  • 分组统计查询若是空为0,子查询若是空还是空

  • EXISTS函数:有查询结果返回TRUE否则返回FALSE,不会参与到数据运算中

此作者没有提供个人介绍
最后更新于 2022-09-06