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.pswp.cn/bicheng/83869.shtml

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

相关文章

clickhouse 学习总结

在 ClickHouse 中,配置文件通常位于 /etc/clickhouse 目录下。这个目录包含了多个配置文件,用于控制 ClickHouse 的各种服务(如服务器、用户、远程服务等)的配置。 数据存储目录/var/lib/clickhouse 配置 文件目录 /etc/clickho…

理解JavaScript中map和parseInt的陷阱:一个常见的面试题解析

前言 在JavaScript面试中,map和parseInt的组合常常被用作考察候选人对这两个方法理解深度的题目。让我们通过一个简单的例子来深入探讨其中的原理。 问题现象 [1, 2, 3].map(parseInt) // 输出结果是什么?很多人可能会预期输出[1, 2, 3],但…

字符串 金额转换

package heima.Test09;import java.util.Scanner;public class Money {public static void main(String[] args) {//1。键盘录入一个金额Scanner sc new Scanner(System.in);//请输入一个数据String result "";int money;while (true) {System.out.println("请…

静态相机中的 CCD和CMOS的区别

文章目录 CCD处理方式CMOS处理方式两者区别 首先根据 成像原理,CCD和CMOS的作用是一致的,都是为了将光子转化为数字图像,只是 转换的方式出现差异。 CCD处理方式 获取光子: 在电荷耦合器件(CCD)传感器中…

Pycharm的终端无法使用Anaconda命令行问题详细解决教程

很多初学者在Windows系统上安装了Anaconda后,在PyCharm终端中运行Conda命令时,会遇到以下错误: conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 请检查名称的拼写,如果包括路径,请确保…

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…

TDengine 替换 Hadoop,彻底解决数据丢失问题 !

完全替换 Hadoop,彻底解决写入丢数问题 !TDengine 助力积成电子更好服务电力客户! 小T导读:在内蒙古某新能源集控项目中,三区需接入并分析大量风电、光伏逆变器及储能设备的监测数据。随着数据规模不断扩大&#xff0c…

从0到1认识ElasticStack

一、ES集群部署 操作系统Ubuntu22.04LTS/主机名IP地址主机配置elk9110.0.0.91/244Core8GB100GB磁盘elk9210.0.0.92/244Core8GB100GB磁盘elk9310.0.0.93/244Core8GB100GB磁盘 1. 什么是ElasticStack? # 官网 https://www.elastic.co/ ElasticStack早期名称为elk。 elk分别…

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则&#xf…

DFT测试之TAP/SIB/TDR

TAP的作用 tap全称是test access port,是将jtag接口转为reset、sel、ce、ue、se、si、tck和so这一系列测试组件接口的模块。 jtag的接口主要是下面几个信号: 信号名称信号方向信号描述TCK(测试时钟)输入测试时钟,同…

Python对接印度股票数据源实战指南

Python对接印度股票数据源实战指南 基于StockTV API实现印度证券市场数据对接,覆盖实时行情、K线、指数等核心功能,提供完整开发方案与避坑指南 一、数据源选型要点(技术维度对比) 根据2025年最新实测数据,印度市场主…

usbutils工具的使用帮助

作为嵌入式系统开发中的常用工具,usbutils 是一套用于管理和调试USB设备的Linux命令行工具集。以下是其核心功能和使用方法的详细说明: 1. 工具组成 核心命令: lsusb:列出所有连接的USB设备及详细信息(默认安装&#…

k8s入门教程(集群部署、使用,镜像拉取失败网络问题排查)

文章目录 K8S基础创建centos虚拟机K3S部署配置k3s容器containerd镜像2025年4月测试可用镜像源配置 Pod容器Deployment(部署)和ReplicaSet(副本集)镜像拉取失败问题排查 Service服务ServiceType取值 NameSpace命名空间声明式对象配…

使用VuePress2.X构建个人知识博客,并且用个人域名部署到GitHub Pages中

使用VuePress2.X构建个人知识博客,并且用个人域名部署到GitHub Pages中 什么是VuePress VuePress 是一个以 Markdown 为中心的静态网站生成器。你可以使用 Markdown 来书写内容(如文档、博客等),然后 VuePress 会帮助你生成一个…

Vue3 + Element Plus 防止按钮重复点击的解决方案

在 Vue3 和 Element Plus 项目中,防止按钮重复点击是一个常见的需求,特别是在表单提交、支付等场景下。以下是几种实现方式: 1. 使用 Element Plus 的 loading 状态 Element Plus 的按钮组件本身就支持 loading 状态,这是最简单…

ES101系列09 | 运维、监控与性能优化

本篇文章主要讲解 ElasticSearch 中 DevOps 与性能优化的内容,包括集群部署最佳实践、容量规划、读写性能优化和缓存、熔断器等。 集群部署最佳实践 在生产环境中建议设置单一角色的节点。 Dedicated master eligible nodes:负责集群状态的管理。使用…

如何基于Mihomo Party http端口配置git与bash命令行代理

如何基于Mihomo Party http端口配置git与bash命令行代理 1. 确定Mihomo Party http端口配置 点击内核设置后即可查看 默认7892端口,开启允许局域网连接 2. 配置git代理 配置本机代理可以使用 127.0.0.1 配置局域网内其它机代理需要使用本机的非回环地址 IP&am…

SSL安全证书怎么安装?

SSI并非一个标准的、广为人知的安全证书类型,通常网站安装的是SSL/TLS证书,用于加密网站和用户浏览器之间的通信,保障数据传输安全。以下以安装SSL/TLS证书为例,介绍网站安装证书的步骤: 一、证书申请与获取 选择证书…

QPS、TPS、RT、IOQS、并发数等性能名词介绍

以下是计算机领域中 QPS、TPS 及相关性能名词的详细解释,涵盖定义、计算方法、典型场景和对比: 一、核心概念解析 1. QPS(Queries Per Second) 定义:每秒查询数,指系统每秒能处理的 请求数量(…

MIT 6.S081 2020 Lab7 Multithreading 个人全流程

文章目录 零、写在前面1、XV6 中的锁2、XV6 进程切换3、触发调度 一、Uthread: switching between threads1.1 说明1.2 实现 二、Using threads2.1 说明2.2 实现 三、Barrier3.1 说明3.2 实现 零、写在前面 可以读一下xv6 book 的第六章 锁 以及 第七章 调度: htt…