[Oracle 学习笔记] 03 单表查询
SELECT 语句功能强大,语法比较复杂,完整的SELECT 语句有六个子句构成 分别是:
- SELECT 子句,指定要获取表中那些列数据。
- FROM 子句,指定数据来自哪个(些)表。
- WHERE 子句,指定获得那些行数据。
- GROUP BY 子句,用于对表中数据进行分组统计。
- HAVING 子句,在对表中数据进行分组统计时,指定分组统计条件。
- ORDER BY 子句,指定使用哪几列来对结果进行排序。
其中SELECT子句和FROM子句是必选项,其余子句为可选项。ORDER BY 必须是最后一条子句。
DISTINCT 用于消除重复记录行, SQL> SELECT DISTINCT specialty FROM students;
列别名SELECT 子句中alias用于指定列或者表达式的别名,如果别名有大小写之分,或者包含特殊字符或空格,那么在这种情况下,别名必须用“”(英文双引号)引上。 SQL> SELECT name AS "姓名", dob AS "生日" FROM students; 可以不加AS。 SELECT 子句中, expression可以使用字符串连接,以显示更有意义的查询结构。使用“||”操作符实现字符串连接。连接的字符串要用“”(英文双引号)引上。 SQL> SELECT name||'生日是: '|| dob AS “学生生日清单” FROM students;
空值(NULL)参与运算,如果NULL出现在算数表达式中,其运算结构也为NULL;如果NULL出现在字符串连接表达式中,ORACLE将其作为空串,即等价于零个字符。下面讨论NULL出现在算数表达式中的处理方法。
- NVL()函数,语法格式为 NVL(expr1, expr2) 其中,expr1和expr2为函数参数表达式,可以使任意ORACLE内部数据类型,但是expr1与expr2的数据类型必须要匹配,NVL()函数的功能为:如果参数表达式expr1值为NULL,则NVL()函数返回参数表达式expr2的值;如果参数表达式expr1值不为NULL,则NVL()函数返回参数表达式expr1的值。
- 函数NVL2(), 语法格式为:NVL2(expr1,expr2,expr3) 其中,expr1、expr2、expr3为函数参数表达式,去Oracle内部数据类型,但是expr2和expr3的数据类型必须要与expr1 的数据类型匹配。NVL2()函数的功能为:如果参数表达式expr1值为NULL, 则NVL2()函数返回参数表达式expr3的值;如果expr1的值不为NULL,则NVL2()返回参数表达式expr2的值。
- 函数COALESCE() 语法格式为:COALESCE(expr1 [, expr2...]); expr1 expr2 ...为函数参数表达式,去Oracle内部数据类型。COALESCE()函数的功能为:返回参数列表中的第一个非控制,如果所有的表达式是空值,最终将返回一个空值。
条件查询
IN IN后面加小括号括起来的列表,如果在列表中就符合条件: SQL>SELECT name, hire_date, title, bonus FROM teachers WHERE bonus IN (500, 600);
BETWEEN ... AND LIKE (% _) IS NULL
复合条件 AND OR NOT 优先级 NOT 最高 AND 其次 OR 最低
记录排序 ORDER BY 升序ASC 降序 DESC 默认是升序
分组查询 SELECT <expression1 [AS alias1], ...> FROM table [WHERE condition(s)] [GROUP BY expression1, ...] [HAVING condition(s)];
列函数
列(Aggregate)函数 | 功能描述 |
用于字符、数值、日期型数据的列函数 | |
MAX(column) | 列中最大值 |
MIN(column) | 列中最小的值 |
用于字符、数值、日期型数据的列函数 | |
COUNT(*) | 表中行的总数 |
COUNT(column) | 列不为NULL的行 |
COUNT(distinct column) | column指定列中相异值的数量 |
只用于数值型数据的列函数 | |
SUM(column) | 列中所有值的总和 |
AVG(column) | 列中所有值的平均值 |
STDDEV(column) | 列的标准偏差 |
VARIANCE(column) | 列的方差 |
除了COUNT(*)以外,其他的列函数都不考虑列或者表达式中为NULL的行。