【Oracle】Oracle之DQL中SELECT的基础使用
Oracle版本19c一、DQL简介DQL(Data Query Language) 数据查询语言使用SQL语句实现对数据表的查询SQLStructured Query Language标准结构化查询语言简称Oracle的DQL数据查询语言核心是SELECT语句其语法结构完整且功能强大支持从简单查询到复杂分析的各种场景。1.1 基本语法结构Oracle的DQL基本语法结构如下SELECT [DISTINCT] 列名1, 列名2, ... | * FROM 表名 [WHERE 条件] [GROUP BY 列名] [HAVING 分组条件] [ORDER BY 列名 [ASC|DESC]];SELECT子句指定要查询的列或表达式查询所有列SELECT * FROM 表名;查询指定列SELECT 列名1, 列名2 FROM 表名;DISTINCT关键字去除重复行SELECT DISTINCT 列名 FROM 表名;列别名使用AS关键字或直接空格SELECT 列名 AS 别名 FROM 表名;FROM子句指定数据来源表单表查询FROM 表名;DUAL表Oracle特有虚拟表用于计算和函数测试SELECT 13 FROM DUAL;WHERE子句筛选符合条件的行比较运算符, , , , , !, 范围查询BETWEEN...AND...集合查询IN(值1, 值2, ...)模糊查询LIKE 模式%匹配任意字符_匹配单个字符空值判断IS NULL或IS NOT NULL逻辑运算符AND, OR, NOT优先级NOT AND ORORDER BY子句对结果进行排序升序ORDER BY 列名 ASC默认降序ORDER BY 列名 DESC多列排序ORDER BY 列名1 DESC, 列名2 ASC空值处理NULLS FIRST或NULLS LASTGROUP BY子句按列分组进行统计基本用法SELECT 列名, 聚合函数 FROM 表名 GROUP BY 列名;HAVING子句对分组结果进行筛选GROUP BY 列名 HAVING 聚合函数 值;二、SELECT的基础使用2.1 SELECT语句的功能基础的SELECT语句SELECT *|{[DISTINCT] column [alias],...} FROM table;SELECT标识要显示的列*代表所有列FROM标识包含这些列的表从哪张表查询数据使用SELECT语句列出所有列的值SELECT * FROM employees;使用SELECT语句列出特定列的值2.2 编写SQL语句的注意事项SQL语句不区分大小写。可以在一行或多行上输入SQL语句。关键字不能缩写或跨行分割。子句通常放在单独的行上。缩进用于增强可读性。在SQL Developer中SQL语句可以选择以分号;终止。 执行多个SQL语句时需要分号。在SQL * Plus中要求每个SQL语句以分号;结尾。列头字段头默认值SQL Developer默认标题对齐左对齐默认标题显示大写SQL*Plus字符和日期列标题左对齐。数字列标题右对齐。默认标题显示大写SQL*Plus是Oracle官方提供的命令行工具主要用于执行SQL/PL/SQL语句和数据库脚本而SQL Developer是Oracle提供的图形化集成开发环境(IDE)功能更全面支持数据库开发、管理和调试等复杂任务。三、SELECT语句中算术表达式和NULL值3.1 算术表达式使用算术表达式创建具有数字和日期数据的表达式使用算术表达式-- 直接进行计算 SQL SELECT 99*99 FROM DUAL; 99*99 ---------- 9801 SQL SELECT (12)*3 FROM DUAL; (12)*3 ---------- 9-- 在列中进行运算 SELECT last_name, salary, salary 300 FROM employees;运算符优先级和数学中的加减乘除一致可以通过括号改变优先级-- 不用括号 SELECT last_name, salary, 12*salary100 FROM employees; -- 使用括号 SELECT last_name, salary, 12*(salary100) FROM employees;3.2 NULL定义一个空值空值是不可用未分配未知或不适用的值。空不等于零或空格。SELECT last_name, job_id, salary, commission_pct FROM employees;算数计算中的NULL包含空值的算术表达式为空。-- commission_pct列有的为NULL有的不为NULL -- 任何和NULL计算的结果都为NULL SELECT last_name, 12*salary*commission_pct FROM employees;四、列别名定义列别名列别名重命名列标题对计算有用紧随列名之后列名和别名之间也可以有可选的AS关键字如果包含空格或特殊字符或者区分大小写则需要双引号使用列别名-- 只有小写 -- 直接使用AS SELECT last_name AS name, commission_pct comm FROM employees; -- 包含大小写或空格 -- 省略AS SELECT last_name Name , salary*12 Annual Salary FROM employees;五、使用串联运算符文字字符串替代引号运算符和DISTINCT关键字5.1 连接符||连接符操作:将列或字符串链接到其他列用两个竖线||表示创建作为字符表达式的结果列-- 中间用:将两列连接起来 SELECT last_name|| : ||job_id AS Employees FROM employees; -- 中间什么都不加直接将两列连接 -- 可见中间会自动用_连接 SELECT last_name || job_id AS Employee Details FROM employees;5.2 文字字符串文字是SELECT语句中包含的字符数字或日期。日期和字符文字值必须用单引号引起来。每个字符串对于返回的每一行输出一次。-- 中间用is a将两列连接起来 SELECT last_name || is a ||job_id AS Employee Details FROM employees;5.3 替代运算符q’[]’指定您自己的引号定界符。选择任何定界符。提高可读性和可用性。-- 示例 SELECT HELLO WORLD FROM DUAL;-- 最前面的和最后面的两个单引号代表的是界限中间的两个单引号代表的是转义后一个单引号 SELECT HELLO WORLD FROM DUAL; -- 可以看见如果打涉及到特殊符号的内容非常不方便那么就可以使用替代运算符q[]其中[]内即可正常输入任何想要的内容不需要再转义-- 使用了替代运算符后可见Departments不需要转义也可以正常输出了 SELECT department_name || q[ Departments Manager Id: ] || manager_id AS Department and Manager FROM departments;5.4 去重运算符 DISTINCT查询的默认显示为所有行包括重复的行。SELECT department_id FROM employees; -- 不去重 SELECT DISTINCT department_id FROM employees; -- 去重六、列出表结构DESCRIBE使用DESCRIBE命令显示表的结构。或者在“连接”树中选择表然后使用“列”选项卡查看表结构。DESC[RIBE] tablename -- 可以简写为DESCDESC employees; -- 简写 DESCRIBE employees; -- 全写 -- 返回结果不会有任何区别