学习日记-day30-6.15
完成目标:
知识点:
1.DDL和DML的补充
知识点 | 核心内容 | 重点 |
快速创建表 | 使用CREATE TABLE...AS SELECT语句基于现有表快速创建新表 | 结构和数据复制 vs 仅复制结构(WHERE 1=2) |
数据删除操作 | DELETE FROM逐条删除 vs TRUNCATE TABLE重建表结构 | DML操作 vs DDL操作、效率差异、自增ID重置 |
部分数据复制 | 通过指定列名和WHERE条件选择性复制数据 | 列筛选(SELECT s_no,s_name,age)与行筛选(WHERE s_no=2)的组合使用 |
操作类型区分 | DDL(CREATE/DROP/TRUNCATE)与DML(INSERT/UPDATE/DELETE) | 数据库对象操作 vs 数据操作的语法差异 |
2.DQL##表的准备
知识点 | 核心内容 | 重点 |
DQL查询操作 | 数据库中最重要且最常用的部分,涵盖单表查询、多表查询、子查询 | 多表关联逻辑(如自关联)、NULL与零值的区别(comm字段) |
表结构设计 | 四张表(部门表dept、员工表emp、薪资等级表sale grade、奖金表bonus) | 外键关联(emp.dept_no参考dept,emp.mgr自关联)、字段含义(如loc=location) |
Oracle与MySQL对比 | Oracle安装后自带四张表,MySQL需手动创建 | 表移植差异(字段兼容性) |
数据插入与验证 | 批量运行SQL脚本初始化表数据 | 数据完整性检查(如部门与员工的关联性) |
薪资等级逻辑 | sale grade表定义工资区间等级(1-5级) | 区间边界值理解(如1200属于1级还是2级) |
3.最简单的SQL语句
知识点 | 核心内容 | 重点 |
单表查询基础 | SELECT * FROM emp 查询整表数据,SELECT 列名 筛选部分列,WHERE 子句过滤行 | 星号(*)表示所有列,WHERE 条件需注意数据类型匹配 |
列别名与特殊字符处理 | 使用 AS 或直接空格定义别名(如 empno AS 员工编号),含空格/特殊符号时需加单/双引号 | 别名含空格时必须加引号,否则报错(如 "涨薪后工资") |
算术运算符应用 | 在查询中直接计算(如 sal+1000),但 NULL 参与运算结果为 NULL | NULL 与 0 的区别,需后续学习 NVL 函数处理 |
去重操作 | DISTINCT 对单列或多列组合去重(如 DISTINCT job, deptno) | 多列去重时针对组合结果,非单列独立去重 |
排序规则 | ORDER BY 默认升序(ASC),降序需显式声明(DESC),支持多列混合排序 | 多列排序时优先级按字段顺序,如 ORDER BY sal ASC, deptno DESC |
经典案例 | Oracle 示例表 emp 包含 14 条记录,如用户 SCOTT(密码 TIGER)为早期员工数据 | 表设计巧妙覆盖多数查询场景,适合教学 |
4.where子句
知识点 | 核心内容 | 重点 |
WHERE子句基础 | 通过WHERE子句添加过滤条件筛选数据,支持关系运算符(=、>、<、>=、<=、!=) | 区分=与!=的写法(<>或!=均有效) |
字符型数据查询 | 字符串比较默认不区分大小写,需用BINARY关键字强制区分(如WHERE BINARY job='CLERK') | 单引号/双引号通用,但大小写敏感需特殊处理 |
日期与数值过滤 | 支持日期比较(如hiredate < '1981-12-25')和数值区间查询(sal BETWEEN 1500 AND 3000) | BETWEEN AND包含边界值,而> AND <不包含 |
逻辑运算符 | AND(与)、OR(或)及符号替代(&&、` | |
IN运算符 | 替代多条件OR(如deptno IN (10,20)),支持字符型(job IN ('MANAGER','CLERK')) | IN列表内为精确匹配,非范围 |
模糊查询 | LIKE配合通配符:%(任意多字符)、_(单个字符),如ename LIKE '_A%'(第二位为A) | 通配符位置影响匹配结果 |
NULL值处理 | 需用IS NULL/IS NOT NULL判断空值,不可用=NULL | 零值(0)与NULL本质不同 |
综合查询示例 | 多条件组合(如(job='SALESMAN' OR job='CLERK') AND sal>=1500) | 括号对逻辑表达式的关键影响 |
5.函数的分类
知识点 | 核心内容 | 重点 |
SQL函数概念 | 封装特定功能的可调用模块(类似JAVA方法/Python函数),通过名称直接调用 | 函数不改变原数据值,仅对展示结果加工处理 |
单行函数 | 对每条记录独立计算(如LOWER()/UPPER()),输入输出记录数一致 | 与多行函数的核心区别:逐条处理 vs 聚合计算 |
多行函数(分组函数) | 对一组数据聚合运算(如MAX()/SUM()),返回单一结果 | 仅5种:MAX/MIN/COUNT/SUM/AVG |
函数分类记忆技巧 | “除多行函数外均为单行函数”(因单行函数数量庞大) | 易混淆点:分类依据是处理逻辑而非结果行数 |
函数作用 | 提升查询能力(如大小写转换、数值统计) | 注意:LOWER(e_name)等单行函数会保留原表行数 |
6.单行函数(1)
7.单行函数(2)
知识点 | 核心内容 | 重点 |
字符串/数值/日期函数 | 回顾内容,包含字符串、数值、日期与时间函数的SQL示例 | 空值处理(如NULL参与计算时需用IFNULL转换) |
流程函数-IF | IF(条件, 真值, 假值)实现双分支逻辑,示例:薪资分级(高薪/低薪) | 单分支逻辑:IFNULL(com,0)解决NULL计算问题 |
流程函数-NULLIF | NULLIF(值1,值2):相等返回NULL,不等返回值1 | 适用场景较少,需注意与IFNULL区别 |
流程函数-CASE(等值判断) | CASE job WHEN 'clerk' THEN '店员'...实现职位中英文映射 | 必须包含END结尾,ELSE处理默认情况 |
流程函数-CASE(区间判断) | CASE WHEN salary<=1000 THEN 'A级'...实现薪资分级(A/B/C/D) | 区间条件需严格递进(如1000-2000需隐含>1000) |
其他函数 | DATABASE()/USER()/VERSION()查询当前库/用户/版本信息 | 版本号识别(如8.0.21对应MySQL 5.8+) |