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...) | 查询不在种子数据中的数据 |
- 在NOT IN 操作中,种子数据中不能出现NULL,若出现NULL直接不查询
- 在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自己的,左加 '(+)',
字段(+)=字段
- 全外连接
- 左外连接: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,不会参与到数据运算中
Comments NOTHING