Oracle 19c入门学习教程,从入门到精通,SQL语言基础详解:语法、使用方法与综合案例(5)

SQL语言基础详解:语法、使用方法与综合案例

SQL(Structured Query Language)是用于管理关系型数据库的标准语言。本章系统讲解 SQL 语言的基础知识,包括其分类、编写规则、数据查询、函数使用、子查询、DML 操作等,并结合 Oracle 数据库环境提供详细示例和综合性实战。


一、SQL语言简介与特点

1. SQL 简介

  • SQL 是 ANSI/ISO 标准的数据库查询与操作语言。
  • 最早由 IBM 在 1970 年代开发(SEQUEL),后被 Oracle 等厂商广泛采用。
  • 在 Oracle 中,SQL 与 PL/SQL 结合使用,支持复杂业务逻辑。

2. SQL 语言特点

特点说明
非过程化用户只需说明“做什么”,无需指定“怎么做”
统一性DDL、DML、DCL 均用 SQL 实现
高度可读语法接近自然语言(如 SELECT … FROM … WHERE)
跨平台支持多种数据库(Oracle、MySQL、PostgreSQL 等)

二、SQL语言的分类

类别全称功能常见语句
DDLData Definition Language定义数据库结构CREATE, ALTER, DROP
DMLData Manipulation Language操作表中数据SELECT, INSERT, UPDATE, DELETE
DCLData Control Language控制权限与事务GRANT, REVOKE, COMMIT, ROLLBACK
TCLTransaction Control Language事务控制COMMIT, ROLLBACK, SAVEPOINT

本章重点讲解DML(尤其是 SELECT)和部分 DDL/DCL。


三、SQL语言编写规则(Oracle)

  1. 大小写不敏感SELECTselect等效(但字符串值区分大小写)。

  2. 语句以分号;/结束(在 SQL*Plus 中)。

  3. 关键字建议大写,提高可读性。

  4. 对象名(表、列)默认大写,若用小写需加双引号(不推荐)。

  5. 注释方式

    -- 单行注释/* 多行注释 */

四、用户模式(Schema)与模式对象

1. 什么是模式(Schema)?

  • 模式是数据库对象(表、视图、索引等)的集合,属于一个数据库用户。
  • 用户名 = 模式名(如SCOTT用户拥有SCOTT模式)。

2. 模式对象示例

对象类型说明
表(Table)存储数据的基本单位
视图(View)虚拟表,基于 SQL 查询
索引(Index)加速查询
序列(Sequence)生成唯一数字
同义词(Synonym)对象别名

3. 示例模式:SCOTT

Oracle 自带的经典教学模式,包含以下表:

表名说明
EMP员工表
DEPT部门表
SALGRADE工资等级表
BONUS奖金表(通常为空)
启用 SCOTT 模式(Oracle 12c+)
-- 以 sysdba 登录CONNECT/ASSYSDBA-- 解锁 scott 用户并设置密码ALTERUSERscott ACCOUNTUNLOCKIDENTIFIEDBYtiger;-- 连接 scottCONNECTscott/tiger

若未安装 SCOTT 表,可手动运行$ORACLE_HOME/rdbms/admin/scott.sql脚本。


五、检索数据(SELECT 语句详解)

1. 简单查询(SELECT … FROM)

-- 查询所有员工姓名和职位SELECTename,jobFROMemp;-- 使用 * 查询所有列(不推荐用于生产)SELECT*FROMdept;

2. 筛选查询(WHERE 子句)

-- 查询工资大于 2000 的员工SELECTename,salFROMempWHEREsal>2000;-- 多条件筛选SELECTename,job,hiredateFROMempWHEREdeptno=20ANDjob='ANALYST';

3. 排序查询(ORDER BY)

-- 按工资降序排列SELECTename,salFROMempORDERBYsalDESC;-- 多列排序:先按部门升序,再按工资降序SELECTdeptno,ename,salFROMempORDERBYdeptnoASC,salDESC;

4. 分组查询(GROUP BY + HAVING)

-- 统计每个部门的平均工资SELECTdeptno,AVG(sal)ASavg_salaryFROMempGROUPBYdeptno;-- 筛选平均工资 > 2000 的部门SELECTdeptno,AVG(sal)ASavg_salaryFROMempGROUPBYdeptnoHAVINGAVG(sal)>2000;

⚠️ 注意:WHERE用于筛选行,HAVING用于筛选分组。

5. 多表关联查询(JOIN)

-- 内连接:查询员工及其部门名称SELECTe.ename,e.job,d.dnameFROMemp eINNERJOINdept dONe.deptno=d.deptno;-- 左外连接:显示所有部门,即使没有员工SELECTd.dname,e.enameFROMdept dLEFTJOINemp eONd.deptno=e.deptno;-- Oracle 旧式写法(不推荐)SELECTe.ename,d.dnameFROMemp e,dept dWHEREe.deptno=d.deptno;

六、Oracle常用系统函数

1. 字符类函数

函数说明示例
UPPER(str)转大写UPPER('scott') → 'SCOTT'
LOWER(str)转小写LOWER('KING') → 'king'
SUBSTR(str, pos, len)截取子串SUBSTR('ORACLE', 2, 3) → 'RAC'
LENGTH(str)字符长度LENGTH('Hello') → 5
TRIM(str)去除空格TRIM(' abc ') → 'abc'
-- 示例:格式化员工姓名为大写SELECTUPPER(ename)AS"Employee Name"FROMemp;

2. 数字类函数

函数说明
ROUND(n, d)四舍五入(d 为小数位)
TRUNC(n, d)截断(不四舍五入)
MOD(m, n)取余
ABS(n)绝对值
-- 计算每人奖金(假设佣金为 10%)SELECTename,sal,NVL(comm,0)AScommission,ROUND(sal*0.1+NVL(comm,0),2)AStotal_bonusFROMemp;

3. 日期和时间类函数

函数说明
SYSDATE当前系统日期时间
ADD_MONTHS(date, n)加 n 个月
MONTHS_BETWEEN(d1, d2)两日期间月数
TO_CHAR(date, fmt)日期转字符串
-- 查询入职超过 40 年的员工(截至 2026 年)SELECTename,hiredate,ROUND(MONTHS_BETWEEN(SYSDATE,hiredate)/12,1)ASyears_workedFROMempWHEREMONTHS_BETWEEN(SYSDATE,hiredate)/12>40;

4. 转换类函数

函数说明
TO_CHAR(value, fmt)转字符串
TO_NUMBER(str)转数字
TO_DATE(str, fmt)转日期
NVL(expr1, expr2)若 expr1 为 NULL,返回 expr2
-- 将工资格式化为货币字符串SELECTename,TO_CHAR(sal,'$99,999.99')ASformatted_salaryFROMemp;

5. 聚集函数(Aggregate Functions)

函数说明
COUNT(*)行数
SUM(col)求和
AVG(col)平均值
MAX(col)最大值
MIN(col)最小值
-- 统计员工总数、最高/最低工资、平均工资SELECTCOUNT(*)AStotal_employees,MAX(sal)ASmax_salary,MIN(sal)ASmin_salary,AVG(sal)ASavg_salaryFROMemp;

七、子查询(Subquery)

1. 什么是子查询?

  • 在一个 SQL 语句中嵌套另一个SELECT语句。
  • 子查询先执行,结果作为外层查询的条件。

2. 单行子查询(返回一行一列)

-- 查询工资高于平均工资的员工SELECTename,salFROMempWHEREsal>(SELECTAVG(sal)FROMemp);

3. 多行子查询(返回多行)

-- 查询在 SALES 或 RESEARCH 部门工作的员工SELECTename,jobFROMempWHEREdeptnoIN(SELECTdeptnoFROMdeptWHEREdnameIN('SALES','RESEARCH'));-- 使用 ANY / ALLSELECTename,salFROMempWHEREsal>ANY(SELECTsalFROMempWHEREdeptno=30);-- 高于销售部任一员工

4. 关联子查询(Correlated Subquery)

子查询引用外层查询的列。

-- 查询每个部门中工资最高的员工SELECTe1.ename,e1.deptno,e1.salFROMemp e1WHEREe1.sal=(SELECTMAX(e2.sal)FROMemp e2WHEREe2.deptno=e1.deptno-- 关联条件);

八、操作数据库(DML 语句)

1. 插入数据(INSERT)

-- 插入完整行INSERTINTOdept(deptno,dname,loc)VALUES(50,'IT','BEIJING');-- 插入部分列(其他列为 NULL 或默认)INSERTINTOemp(empno,ename,job,hiredate,sal,deptno)VALUES(8000,'ALICE','DEVELOPER',SYSDATE,5000,50);

2. 更新数据(UPDATE)

-- 给所有 ANALYST 加薪 10%UPDATEempSETsal=sal*1.1WHEREjob='ANALYST';-- 更新多个字段UPDATEempSETsal=6000,comm=500WHEREempno=8000;

3. 删除数据

DELETE(可回滚,触发器生效)
-- 删除奖金为 NULL 的员工DELETEFROMempWHEREcommISNULL;
TRUNCATE(不可回滚,更快,不触发触发器)
-- 清空 bonus 表TRUNCATETABLEbonus;

⚠️ 区别:

  • DELETE是 DML,可ROLLBACK
  • TRUNCATE是 DDL,自动COMMIT,不能回滚。

九、综合性实战案例

案例:生成“高绩效员工年度报告”

需求

  1. 找出每个部门工资最高的员工;
  2. 显示其姓名、职位、工资、部门名、入职年限;
  3. 工资格式化为货币;
  4. 按部门编号排序;
  5. 输出到 SQL*Plus 报表。
-- 设置 SQL*Plus 环境SETPAGESIZE40SETLINESIZE150SETFEEDBACKOFFTTITLE CENTER'High Performer Annual Report - &SYSDATE'SKIP2BTITLE CENTER'Confidential'-- 格式化列COLUMNename HEADING"Employee Name"FORMAT A15COLUMNjob HEADING"Job Title"FORMAT A12COLUMNdname HEADING"Department"FORMAT A15COLUMNsal_fmt HEADING"Salary"FORMAT A12COLUMNyears HEADING"Years Worked"FORMAT999.9-- 主查询:使用关联子查询找部门最高薪员工SELECTe.ename,e.job,d.dname,TO_CHAR(e.sal,'$99,999.99')ASsal_fmt,ROUND(MONTHS_BETWEEN(SYSDATE,e.hiredate)/12,1)ASyearsFROMemp eJOINdept dONe.deptno=d.deptnoWHEREe.sal=(SELECTMAX(sal)FROMemp e2WHEREe2.deptno=e.deptno)ORDERBYe.deptno;-- 清理TTITLEOFFBTITLEOFFSETFEEDBACKON

输出效果(示例):

High Performer Annual Report - 14-JAN-2026 Employee Name Job Title Department Salary Years Worked --------------- ------------ --------------- ------------ ------------ KING PRESIDENT ACCOUNTING $5,000.00 41.2 SCOTT ANALYST RESEARCH $3,000.00 40.8 BLAKE MANAGER SALES $2,850.00 41.0

十、总结

模块核心知识点
SQL 基础分类、规则、模式概念
数据查询SELECT + WHERE + GROUP BY + ORDER BY + JOIN
函数字符、数字、日期、转换、聚集
子查询单行、多行、关联
DMLINSERT / UPDATE / DELETE / TRUNCATE

💡 提示:掌握这些基础是进阶 PL/SQL、性能调优、数据库设计的前提。建议在SQL*Plus 或 SQL Developer中反复练习 SCOTT 模式下的各类查询。


✅ 附:快速启用 SCOTT 模式的完整脚本(若缺失)

-- 以 sys 用户运行@?/rdbms/admin/scott.sqlALTERUSERscott IDENTIFIEDBYtiger ACCOUNTUNLOCK;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1173942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可解释集成模型如何提升商品搜索效果

可解释集成模型改进商品检索 机器学习领域正飞速发展,新模型层出不穷,均承诺超越前代。然而,为特定用例评估新模型是一个耗时且消耗资源的过程。这对于像某中心的商店这样承诺为客户提供最先进技术、同时又全天候高负载运营的在线服务而言&am…

2026管道除铁器厂家权威推荐榜单:旋转式除铁机/电磁粉料除铁机/旋转式除铁器/电磁除铁机/永磁管道除铁机源头厂家精选。 - 品牌推荐官

在工业物料处理领域,除铁设备是保障产品质量的关键环节。新乡市胜宇机电有限公司作为深耕筛分与除铁设备领域的科技型企业,凭借全链条研发、生产、服务能力,为新能源、陶瓷、化工、矿业等行业提供多元化解决方案。其…

Java版LeetCode热题100之二叉树的直径:从深度计算到路径优化的全面解析

Java版LeetCode热题100之二叉树的直径:从深度计算到路径优化的全面解析本文将深入剖析 LeetCode 第543题「二叉树的直径」,不仅提供深度优先搜索(DFS)的高效解法,还涵盖算法原理、复杂度分析、面试技巧、工程应用及关联…

2025-2026年徐州高品质住宅评选与推荐报告:于深度调整期中寻找价值确定性 - 2026年企业推荐榜

开篇引言:一个改善家庭的选房困局与市场之变 2025年初,徐州的李先生开始为家庭置换一套终极改善住房。他的需求明确:核心地段、顶尖产品力、国企或优质品牌保障、以及能够穿越周期的资产价值。然而,在市场调研中他…

杭州市英语雅思培训辅导机构推荐,2026权威出国雅思课程排行榜 - 苏木2025

雅思培训领域,杭州市备考群体普遍面临诸多痛点:选课乱象丛生,优质教育机构鱼龙混杂,难从海量口碑排名筛选靠谱选项;考试备考缺乏系统规划,提分技巧不精准,提分效果大打折扣;多数机构教学方案无个性化适配,无法…

2026年金亿重工高臂钻机市场口碑推荐,浙江地区用户评价分析 - 工业品牌热点

在工程建设领域,一款高效可靠的高臂钻机是解决复杂边坡施工难题的核心装备,关乎项目进度、施工安全与成本控制。面对市场上琳琅满目的高臂钻机品牌,如何挑选一款适配自身施工需求、口碑过硬的产品?以下结合用户痛点…

泉州市英语雅思培训辅导机构推荐;2026权威出国雅思课程排行榜 - 苏木2025

基于英国文化教育协会《2024-2025中国大陆地区雅思考生成绩大数据报告》核心洞察,结合泉州鲤城区、丰泽区、洛江区、泉港区、晋江市等区域考生备考痛点,本次通过权威、全面、深度测评,围绕雅思培训选课核心诉求,从…

Java版LeetCode热题100之二叉树的层序遍历:从BFS到多维拓展的全面解析

Java版LeetCode热题100之二叉树的层序遍历:从BFS到多维拓展的全面解析本文将深入剖析 LeetCode 第102题「二叉树的层序遍历」,不仅提供广度优先搜索(BFS)的标准解法,还涵盖算法原理、复杂度分析、面试技巧、工程应用及…

逆向 讀墨Readmoo iOS客户端:Readium LCP加密

中国台湾电子书主流平台之一的读墨Readmoo拥有十分全面的书库,虽然其使用的支付平台为 藍新金流NewebPay 导致不支持银联UnionPay,国内发卡行的VISA/MasterCard也可能拒付,对中国大陆并不友好。 但是出于读墨采用了…

ACPI!ACPIBuildProcessRunMethodPhaseCheckSta函数对节点BAT1方法_STA的处理在异步线程ACPI!ACPIWorker

ACPI!ACPIBuildProcessRunMethodPhaseCheckSta函数对节点BAT1方法_STA的处理在异步线程ACPI!ACPIWorker 0: kd> kc# 00 ACPI!ACPIBuildProcessRunMethodPhaseCheckSta 01 ACPI!ACPIBuildProcessGenericList 02 ACPI!ACPIBuildDeviceDpc 03 nt!KiRetireDpcList 04 nt!KiDispa…

学霸同款8个AI论文写作软件,MBA论文高效搞定!

学霸同款8个AI论文写作软件,MBA论文高效搞定! AI 工具如何助力论文写作,让学术之路更高效 在当今快速发展的学术环境中,MBA 学生和科研工作者面临着越来越高的论文写作要求。传统的写作方式不仅耗时费力,还容易因格式不…

2026年工业滤芯厂家权威推荐榜单:除杂滤芯/活性炭滤芯/精密滤芯/吸气滤芯/聚结分离滤芯源头厂家精选 - 品牌推荐官

在工业流体分离领域,滤芯作为核心部件直接影响系统运行效率与稳定性。河南纵达过滤设备有限公司凭借年产10万件(套)的规模化生产能力,成为国内滤芯制造领域的重要参与者。其产品覆盖天然气滤芯、氢气滤芯、聚结滤芯…

2026必备!专科生毕业论文必备的9款AI论文工具深度测评

2026必备!专科生毕业论文必备的9款AI论文工具深度测评 2026年专科生毕业论文必备AI工具测评指南 随着人工智能技术的不断发展,越来越多的专科生开始借助AI工具提升毕业论文写作效率。然而面对市场上琳琅满目的论文辅助软件,如何选择真正适合自…

互联网大厂Java面试实战:Spring Boot、微服务与AI技术综合解析

文章内容: 本文以在线教育场景为背景,讲述一位严肃的面试官与搞笑的水货程序员谢飞机之间的三轮面试对话。面试围绕Java核心技术、构建工具、Web框架、数据库ORM、微服务架构、缓存、安全、消息队列以及AI技术展开,层层递进,帮助求…

户外广告投放平台哪家合适?通广传媒多场景服务超给力 - 工业品牌热点

在城市化进程加速与品牌传播需求多元化的当下,户外广告作为连接品牌与消费者的线下核心触点,其投放平台的选择直接关乎品牌曝光效率与转化效果。面对市场上琳琅满目的户外广告投放公司,如何破解效果难评估、反馈滞后…

泉州市英语雅思培训辅导机构推荐,2026权威出国雅思课程排行榜 - 苏木2025

经国际教育测评研究院联合雅思备考指导中心发起,基于2026年度《闽南地区雅思培训行业发展白皮书》,结合泉州市及石狮市、南安市、惠安县、安溪县、永春县五地12000余名雅思考生调研数据、72家教育机构实地探访及3个月…

南京市英语雅思培训辅导机构推荐,2026权威出国雅思课程排行榜 - 苏木2025

经教育部教育考试院相关标准指导、结合《2024-2025中国大陆雅思成绩大数据报告》及南京市5000份雅思考生调研问卷、60家机构实测数据,本次开展权威、全面的深度测评,旨在解决南京考生在雅思培训过程中面临的核心困境…

学长亲荐2026研究生必用TOP10一键生成论文工具测评

学长亲荐2026研究生必用TOP10一键生成论文工具测评 学术写作工具测评:为何需要一份2026年权威榜单 随着人工智能技术的不断进步,学术写作工具在研究生群体中的使用率逐年攀升。然而,面对市场上琳琅满目的AI写作产品,如何选择真正…

2026年石墨烯涂料设计怎么找,石墨烯涂料/无溶剂环氧涂料/环氧玻璃钢/环氧酚醛,石墨烯涂料生产厂家怎么选择 - 品牌推荐师

近年来,随着工业防腐需求的升级与环保政策的收紧,石墨烯涂料凭借其优异的导电性、耐腐蚀性和机械性能,逐渐成为管道、桥梁、船舶等领域的核心材料。然而,市场鱼龙混杂,如何筛选出技术领先、服务可靠、资质齐全的优…

企业运维实战:Linux系统远程连接完整指南

一、操作系统准备阶段 1. 操作系统下载与安装虚拟机环境配置:建议使用VMware/VirtualBox等工具创建Linux虚拟机 系统选择:CentOS/Ubuntu等主流发行版均可2. Linux网络基础配置配置概念:configure表示系统或软件配置…