当前位置: 首页 > news >正文

MySQL 高级学习篇

一、连结(Join)

1.1 概念

联结(Join)操作用于将多个表中的列组合在一起,形成一个新的查询结果集。它允许我们从多个表中提取数据,并基于表之间的关系进行查询。

1.2 类型

1. 内联结(INNER JOIN)
  • 定义:内联结返回两个表中满足连接条件的记录。

  • 示例

    SELECT student.name, score.grade
    FROM student
    INNER JOIN score ON student.id = score.student_id
    WHERE score.grade > 80;
2. 左联结(LEFT JOIN)

  • 定义:左联结返回左表中的所有记录,以及右表中满足连接条件的记录。如果右表中没有匹配的记录,则结果中右表的字段将为 NULL。

  • 示例

    SELECT student.name, score.grade
    FROM student
    LEFT JOIN score ON student.id = score.student_id;
3. 右联结(RIGHT JOIN)

  • 定义:右联结返回右表中的所有记录,以及左表中满足连接条件的记录。如果左表中没有匹配的记录,左表的字段将为 NULL。

  • 示例

    SELECT student.name, score.grade
    FROM student
    RIGHT JOIN score ON student.id = score.student_id;
4. 外连接(OUTER JOIN)
  • 定义:外连接包括左外连接、右外连接和全外连接。全外连接返回左右表中所有记录,匹配则显示对应字段,不匹配则为 NULL。

  • 示例(全外连接)

    SELECT student.name, score.grade
    FROM student
    FULL OUTER JOIN score ON student.id = score.student_id;
5. 交叉连接(CROSS JOIN)
  • 定义:交叉连接返回两个表的笛卡尔积,即左表中的每一行与右表中的每一行组合。

  • 示例

    SELECT department.dept_name, employee.name
    FROM department
    CROSS JOIN employee;

二、集合运算

2.1 概念

集合运算是以行为单位进行的操作,会影响记录行数,但不会改变列的数量。

2.2 类型

1. 并集(UNION)
  • 定义:并集返回两个查询结果集的合并,包含所有出现在第一个或第二个查询结果中的记录。

  • 语法

    SELECT column1, column2, ...
    FROM table1
    UNION [DISTINCT | ALL]
    SELECT col1, col2, ...
    FROM table2;
2. 交集(INTERSECT)
  • 定义:交集返回两个查询结果集中都包含的记录。

  • 语法

    SELECT column1, column2, ...
    FROM table1
    INTERSECT [DISTINCT | ALL]
    SELECT col1, col2, ...
    FROM table2;
3. 差集(EXCEPT)
  • 定义:差集返回出现在第一个查询结果中但不在第二个查询结果中的记录。

  • 语法

    SELECT column1, column2, ...
    FROM table1
    EXCEPT [DISTINCT | ALL]
    SELECT col1, col2, ...
    FROM table2;

三、数据完整性约束

3.1 主键(Primary Key)

  • 定义:用于唯一标识表中的每一行,具有唯一性和非空性。

  • 创建示例

    CREATE TABLE student (id INT PRIMARY KEY,name VARCHAR(100),age INT
    );

3.2 外键(Foreign Key)

  • 定义:用于建立两个表之间的关联关系,确保数据的一致性和完整性。

  • 创建示例

    CREATE TABLE order (order_id INT PRIMARY KEY,customer_id INT,order_date DATE,FOREIGN KEY (customer_id) REFERENCES customer (id)
    );

3.3 唯一约束(Unique)

  • 定义:确保列中的值唯一,允许 NULL 值。

  • 创建示例

    CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50), email VARCHAR(100) UNIQUE, phone VARCHAR(20), CONSTRAINT uk_users_phone UNIQUE (phone) 
    );

四、索引

4.1 定义

索引是用于提高数据查询速度的数据库对象,通过创建额外的数据结构来快速定位和访问表中的数据行。

4.2 分类

按数据结构分类
索引类型数据结构特点适用场景
B-Tree 索引基于平衡树,支持范围查询和排序操作适用于需要频繁进行范围查询和排序的场景
Hash 索引基于哈希表,支持快速等值查询适用于需要快速进行等值查询的场景
全文索引用于文本数据的全文检索适用于需要对文本内容进行搜索的场景
按逻辑结构分类
索引类型特点
普通索引基本索引类型,无唯一性约束
唯一索引索引列的值必须唯一
组合索引由多个列组合而成的索引
主键索引特殊的唯一索引,通常与主键关联

五、视图

5.1 定义

视图是一个虚拟表,基于一个或多个基表的定义。视图中的数据是动态的,依赖于基表的数据。

5.2 优点

  • 便捷整合:封装复杂的 SQL 查询,简化操作。

  • 保密:隐藏基表结构,保护敏感数据。

  • 简化权限管理:通过视图授权,减少对基表的直接访问。

5.3 缺点

  • 耗费时间:查询时需要转换为基表查询。

  • 修改不便:复杂视图的更新操作受限较多。

5.4 操作

操作类型语法示例
创建视图CREATE VIEW view_name AS SELECT ...
查询视图SELECT * FROM view_name
删除视图DROP VIEW view_name

六、存储过程

6.1 定义

存储过程是一组预编译的 SQL 语句,存储在数据库中,可通过名称调用执行。

6.2 优点

  • 提高代码复用性

  • 减少网络传输

  • 提高执行效率

  • 增强安全性

6.3 创建示例

CREATE OR REPLACE PROCEDURE proc_name
AS
BEGIN-- SQL 语句
END;

七、函数

7.1 定义

函数是用于计算和返回值的预编译代码块,可在 SQL 查询中使用。

7.2 创建示例

CREATE OR REPLACE FUNCTION fun_sum (P_N NUMBER)
RETURN NUMBER
ISS NUMBER := 0;
BEGINFOR I IN 1..P_N LOOPS := S + I;END LOOP;RETURN S;
EXCEPTIONWHEN OTHERS THENROLLBACK;
END;

7.3 调用示例

SELECT fun_sum(100) FROM DUAL;

八、触发器

8.1 定义

触发器是一种特殊的数据库对象,当特定事件发生时自动执行预定义的操作。

8.2 创建示例

CREATE OR REPLACE TRIGGER tri_insert
BEFORE INSERT ON emp1
FOR EACH ROW
BEGININSERT INTO emp2 (empno) VALUES (1);
END;

8.3 优缺点

  • 优点:实现复杂的数据约束、审计等。

  • 缺点:可能影响数据库性能,设计和维护复杂。

http://www.xdnf.cn/news/905491.html

相关文章:

  • 【SpringBoot自动化部署】
  • 【WebSocket】SpringBoot项目中使用WebSocket
  • 主流定位技术:Zigbee、蓝牙、UWB、RFID、5G通信介绍及对比
  • Day 41 训练
  • 鸿蒙图片缓存(一)
  • 2025年7月-12月【CISP】考试计划时间
  • 全新Xsens Animate版本是迄今为止最大的软件升级,提供更清晰的数据、快捷的工作流程以及从录制开始就更直观的体验
  • C++11 Move Constructors and Move Assignment Operators 从入门到精通
  • 现代Web安全实践:基于Token与Refresh Token的单点登录(SSO)实现
  • Java常用的判空方法
  • 数据库学习(一)——MySQL基础
  • 信息化安全与自主可控需求:国产飞腾D2000 VPX3U主板设计与实践
  • 多种风格导航菜单 HTML 实现(附源码)
  • 增量式网络爬虫通用模板
  • 嵌入式学习之系统编程(十一)网络编程之协议头,测试命令及工具
  • 可视化图解算法49:滑动窗口的最大值
  • 大话软工笔记—需求工程概述
  • day45_Tensorborad使用介绍
  • 4G网络中频段的分配
  • 进行用户VMware官网注重中一直无法登录,该怎么处理
  • Java下载文件(特殊字符编码处理)
  • 基于React + FastAPI + LangChain + 通义千问的智能医疗问答系统
  • QT: `long long` 类型转换为 `QString` 2025.6.5
  • ruoyi-plus-could 负载均衡 通过 Gateway模块配置负载均衡
  • Curtain MonGuard:智能水印颜色适配,提升屏幕信息安全
  • LabVIEW实时系统数据监控与本地存储
  • C++ 基础特性深度解析
  • 化学小工具之OpenBabel
  • idea中 maven 本地仓库有jar包,但还是找不到,解决打包失败和无法引用的问题———————————————— 版权声明:本文为博
  • 第16节 Node.js 文件系统