当前位置: 首页 > 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 优缺点

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

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

相关文章:

  • C++.OpenGL (4/64)纹理(Texture)
  • 智能对联网页小程序的仓颉之旅
  • Linux 内核性能分析确保成效的关键知识点总结
  • Android端口转发
  • DTS 数据迁移
  • 接口限频算法:漏桶算法、令牌桶算法、滑动窗口算法
  • 02 nginx 的环境搭建
  • python打卡训练营打卡记录day46
  • 小程序实现下拉刷新(踩坑 下拉刷新不触发)
  • 【Linux基础知识系列】第十三篇-Cron与定时任务管理
  • 【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
  • 09.三数之和
  • 低内聚高耦合的衡量指标
  • Linux top 命令 的使用总结
  • Python Day43 学习(日志Day10-11复习)
  • SQLServer中的存储过程与事务
  • 【普及+/提高】洛谷P2114 ——[NOI2014] 起床困难综合症
  • Linux操作系统之进程(五):初识地址空间
  • JAVA元编程
  • SCSAI工业智能操作系统=PLM对象模型 × 大模型认知引擎 × 工作流调度层
  • 有没有做机械加工的网站/网络广告策划书
  • 2015百度推广网站遭到攻击/软文是指什么
  • 建站快车金牌代理商/长沙哪家网络公司做网站好
  • 福安做网站/在线检测网站安全
  • 成都品牌网站建设电话/房地产新闻最新消息
  • 柳州做网站的/手机百度seo快速排名