oracl:数据查询语言DQL
SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系数据库的标准编程语言。
sql分类:
基本查询语法
数据查询语言(DQL - Data Query Language)
查询的关键词 select
where对查询结果进行过滤
别名
只有列名和表名可以起别名, 别名是一种临时的名称,用于在查询中为表名或列名提供一个简短、易于理解的替代名称。别名在查询过程中被使用,不会影响数据库中实际的表名或列名
作用范围: 仅限于当前select语句
示例
d_name是 列名department_name的别名; e 是 employees 这个表名的别名, 列名和别名之间可以使用as ,表名和别名之间不能
SELECT department_name d_name
FROM employees e
SELECT department_name as d_name
FROM employees e;
order by 排序
对查询结果进行排序
可以按单列或多列进行升序(ASC
)或降序(DESC
)排序。默认是升序,升序时可以不写ASC
排序规则: 排序时有多个字段时, 先按照第一个字段的排序方式进行排序,再按照第二个字段的排序方式进行排序,以此类推
示例
注意: NULL在oracle排序中是最大值, 即使使用了nvl函数进行处理后NULL还是被当成最大值, 可以使用nulls first和nulls last控制空值出现的位置
任何值和NULL做数学计算(+-*/)结果为NULL
group by 分组/去重
对查询结果进行分组或去重
使用group by 时,select后面的列名必须出现在group by 后面或者属于聚合函数
分组示例:
补充:
聚合函数:
count(*) : 统计表中的所有行数,包括包含 NULL
值的行
count(1): 几乎等于count(*), 在oarcle中 COUNT(1)
可能被优化得更好,因为它只需要检查是否存在行,而不需要检查列值。
count(字段) : 统计指定字段中非 NULL
值的行数
listagg() : 用于将多行数据合并成一行,并用指定的分隔符连接这些数据
示例
去重: group by和 distinct 和 row_number
GROUP BY
可以间接地用于去重,因为它会将具有相同分组列值的行合并为一组,并返回每组的一条记录
distinct
distinct 后面跟多个字段时,是对字段的组合进行去重
ROW_NUMBER()
是一个窗口函数,用于为每一行分配一个唯一的序号。它通常与 PARTITION BY
和 ORDER BY
一起使用,用于在分组内对行进行排序
示例
group by 和 order by
order by 是对数据进行排序,排序方式: ASC升序(默认) ; DESC降序
示例
sql执行顺序
group by 和 having
HAVING
用于对分组后的结果进行过滤
sql的执行顺序
条件过滤: where和having
相同点: 都是对数据进行过滤
不同点:
示例
sql的执行顺序
WHERE amount > 100
:在分组之前,筛选出销售金额大于 100 的记录
GROUP BY region
:按 region
列对where过滤后的数据进行分组,计算每个地区的销售总额。
HAVING SUM(amount) > 300
:对分组后的结果进行过滤,只保留销售总额大于 300 的地区
书写顺序
执行顺序
查询条件: where/having
子句的基础
比较运算符
> , < ,= , <= , >= , != ,<> (最后2个表示不等于)
用于在SQL查询中比较两个表达式的值,并返回布尔值(TRUE、FALSE或NULL)
示例
逻辑运算符
示例
空值判断
示例
范围查询
示例: 范围查询
示例: 范围查询和比较运算符的结合
模糊查询 like
也称模糊判断 ,格式: 字段 like ' 匹配内容 '
示例