【Oracle】Oracle之DQL中SELECT的基础使用

Oracle版本:19c

一、DQL简介

  • DQL(Data Query Language) :数据查询语言,使用SQL语句实现对数据表的查询

  • SQL:Structured Query Language标准结构化查询语言简称

Oracle的DQL(数据查询语言)核心是SELECT语句,其语法结构完整且功能强大,支持从简单查询到复杂分析的各种场景。

1.1 基本语法结构

Oracle的DQL基本语法结构如下

cpp 复制代码
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 1+3 FROM DUAL;

WHERE子句:筛选符合条件的行

  • 比较运算符=, >, <, >=, <=, !=, <>

  • 范围查询BETWEEN...AND...

  • 集合查询IN(值1, 值2, ...)

  • 模糊查询LIKE '模式'%匹配任意字符,_匹配单个字符)

  • 空值判断IS NULLIS NOT NULL

  • 逻辑运算符AND, OR, NOT(优先级:NOT > AND > OR)

ORDER BY子句:对结果进行排序

  • 升序ORDER BY 列名 ASC(默认)

  • 降序ORDER BY 列名 DESC

  • 多列排序ORDER BY 列名1 DESC, 列名2 ASC

  • 空值处理NULLS FIRSTNULLS LAST

GROUP BY子句:按列分组进行统计

  • 基本用法:SELECT 列名, 聚合函数 FROM 表名 GROUP BY 列名;

  • HAVING子句 :对分组结果进行筛选,GROUP BY 列名 HAVING 聚合函数 > 值;

二、SELECT的基础使用

2.1 SELECT语句的功能

基础的SELECT语句

cpp 复制代码
SELECT  *|{[DISTINCT] column [alias],...}
FROM    table;
  • SELECT标识要显示的列(*代表所有列)

  • FROM标识包含这些列的表(从哪张表查询数据)

使用SELECT语句列出所有列的值

cpp 复制代码
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 算术表达式

使用算术表达式创建具有数字和日期数据的表达式

使用算术表达式

cpp 复制代码
-- 直接进行计算
SQL> SELECT 99*99 FROM DUAL;

     99*99
----------
      9801

SQL> SELECT (1+2)*3 FROM DUAL;

   (1+2)*3
----------
         9
cpp 复制代码
-- 在列中进行运算
SELECT last_name, salary, salary + 300 FROM employees;

运算符优先级

和数学中的加减乘除一致,可以通过括号改变优先级

cpp 复制代码
-- 不用括号
SELECT last_name, salary, 12*salary+100
FROM   employees;

-- 使用括号
SELECT last_name, salary, 12*(salary+100)
FROM   employees;

3.2 NULL

定义一个空值

  • 空值是不可用,未分配,未知或不适用的值。

  • 空不等于零或空格。

cpp 复制代码
SELECT last_name, job_id, salary, commission_pct
FROM   employees;

算数计算中的NULL

包含空值的算术表达式为空。

cpp 复制代码
-- commission_pct列有的为NULL,有的不为NULL
-- 任何和NULL计算的结果都为NULL
SELECT last_name, 12*salary*commission_pct
FROM   employees;

四、列别名

定义列别名

列别名:

  • 重命名列标题

  • 对计算有用

  • 紧随列名之后(列名和别名之间也可以有可选的AS关键字)

  • 如果包含空格或特殊字符,或者区分大小写,则需要双引号

使用列别名

cpp 复制代码
-- 只有小写
-- 直接使用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 连接符||

连接符操作:

  • 将列或字符串链接到其他列

  • 用两个竖线(||)表示

  • 创建作为字符表达式的结果列

cpp 复制代码
-- 中间用:将两列连接起来
SELECT	last_name||' : '||job_id AS "Employees" FROM employees;

-- 中间什么都不加直接将两列连接
-- 可见中间会自动用_连接
SELECT last_name || job_id AS "Employee Details" FROM employees;

5.2 文字字符串

文字是SELECT语句中包含的字符,数字或日期。

日期和字符文字值必须用单引号引起来。

每个字符串对于返回的每一行输出一次。

cpp 复制代码
-- 中间用is a将两列连接起来
SELECT last_name ||' is a '||job_id AS "Employee Details" FROM employees;

5.3 替代运算符q'[]'

指定您自己的引号定界符。

选择任何定界符。

提高可读性和可用性。

cpp 复制代码
-- 示例
SELECT '''HELLO WORLD''' FROM DUAL;-- ''''  最前面的和最后面的两个单引号代表的是界限,中间的两个单引号代表的是转义后一个单引号
SELECT '"HELLO WORLD"' FROM DUAL;
-- 可以看见如果打涉及到特殊符号的内容非常不方便,那么就可以使用替代运算符q'[]',其中[]内即可正常输入任何想要的内容,不需要再转义
cpp 复制代码
-- 使用了替代运算符后,可见Department's不需要转义也可以正常输出了
SELECT department_name || q'[ Department's Manager Id: ]' || manager_id AS "Department and Manager" FROM departments;

5.4 去重运算符 DISTINCT

查询的默认显示为所有行,包括重复的行。

cpp 复制代码
SELECT department_id FROM employees;			-- 不去重
SELECT DISTINCT department_id FROM employees;	-- 去重

六、列出表结构DESCRIBE

使用DESCRIBE命令显示表的结构。

或者,在"连接"树中选择表,然后使用"列"选项卡查看表结构。

cpp 复制代码
DESC[RIBE] tablename	-- 可以简写为DESC
cpp 复制代码
DESC employees;			-- 简写
DESCRIBE employees;		-- 全写
-- 返回结果不会有任何区别
相关推荐
老苏畅谈运维2 小时前
Oracle 在线表重定义:将非分区表转换为分区表的最佳实践
数据库·oracle
云栖梦泽2 小时前
Linux内核与驱动:10.平台总线platform
linux
Deitymoon2 小时前
linux——TCP多进程并发服务器
linux·服务器·tcp/ip
网络安全许木2 小时前
自学渗透测试第15天(基础复习与漏洞原理入门)
linux·网络安全·渗透测试·kali linux
treacle田2 小时前
达梦数据库-达梦数据库中link链接访问oracle 19c/11g-记录总结
数据库·oracle·达梦 link访问oracle
萌兰三太子2 小时前
RAG 向量数据库设计指南:从入门到生产
数据库·oracle
Hello World . .2 小时前
linux驱动编程2 : uboot、Linux内核、rootfs来源及制作流程
linux·运维·服务器
.柒宇.2 小时前
Ansible自动化运维实战笔记:环境搭建与四大核心模块详解
运维·自动化·ansible