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

【数据库】MySQL数据库之约束与多表查询

约束

1.概述

  1. 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据
  2. 目的:保证数据库中数据的正确性、有效性,完整性和一致性
  3. 分类:

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束

2.外键约束

  • 概念

外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性

  • 语法

添加外键

CREATE TABLE 表名(
字段名 数据类型,
...
[CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);

删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
  • 删除/更新行为

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;

多表查询

1.多表关系

在项目开发中, 各个表结构之间存在三种关系

  • 一对多 (多对一)
  • 多对多
  • 一对一

一对多: 部门和员工

多对多: 学生与课程之间的关系

一对一: 用户与用户详情

2.多表查询概述

笛卡尔积: 集合A 和 集合B 的所有组合情况 (在多表查询时, 需要消除无效的笛卡尔积)

SELECT * FROM emp, dept WHERE emp.dept_id = dept.id;

多表查询分类

  • 连接查询

        内连接: 相当于查询A \ B 交集部分数据

        外连接:

                左外连接: 查询左表所有数据, 以及两张表交集部分数据

                右外连接: 查询右表所有数据, 以及两张表交集部分数据

                自连接: 当前表与自身的连接查询, 自连接必须使用表别名

  • 子查询

3.连接查询

3.1.内连接

内连接查询的时两张表交集的部分

内连接查询语法:

  • 隐式内连接
SELECT 字段列表 FROM 表1, 表2 WHERE 条件 ...;
SELECT ca.camera_id, co.community_name FROM community co, camera ca WHEREca.community_id = co.community_id;
  • 显示内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件 ...;
SELECT ca.camera_name, co.community_name FROM community co INNER JOIN camera ca ONca.community_id = co.community_id;

3.2.外连接

  • 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件 ...;
  • 右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件 ...;

3.3.自连接

自连接查询可以是内连接查询, 也可以是外连接查询

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ...;

4.联合查询

对于 uniobn 查询, 就是把多次查询的结果合并起来, 形成一个新的查询结果集

多张表的字段类型要保持一致

SELECT 字段列表 FROM 表A ...
UNION [ALL]
SELECT 字段列表 FROM 表B ...;

删掉 ALL 则达到去重的效果

5.子查询

SQL 语句中嵌套 SELECT语句, 称为嵌套查询, 又称子查询

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

子查询外部的语句可以是 INSERT / UPDATE / DELETE / SELECT 中的任何一个

根据子查询结果不同, 分为:

  • 标量子查询 (子查询结果为单个值)
  • 列子查询 (子查询结果为一列)
  • 行子查询 (子查询结果为一行)
  • 表子查询 (子查询结果为多行多列)

5.1.标量子查询

标量子查询返回的结果是单个值 (数字 / 字符串 / 日期等), 最简单的形式, 这种子查询称为标量子查询

SELECT * FROM camera WHERE community_id = (SELECT community_id FROM community WHEREcommunity_name = '金达园');

5.2.列子查询

列子查询返回的结果是一列 (可以是多行)

SELECT * FROM camera WHERE community_id in (SELECT community_id FROM community WHEREcommunity_name = '金达园');

5.3.行子查询

行子查询返回的结果是一行 (可以是多列)

SELECT * FROM camera WHERE (community_id, creater) = (SELECT community_id, creater FROM camera WHERE camera_name = '摄像头1')

5.4.表子查询

表子查询返回的结果是多行多列

SELECT * FROM camera WHERE (community_id, creater) in (SELECT community_id, creater FROM camera WHERE camera_name = '摄像头1');

相关文章:

【数据库】MySQL数据库之约束与多表查询

约束 1.概述 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据目的:保证数据库中数据的正确性、有效性,完整性和一致性分类: 注意:约束是作用于表中字段上的,可以在创建表/修改表…...

【Pandas】pandas Series dot

Pandas2.2 Series Binary operator functions 方法描述Series.add()用于对两个 Series 进行逐元素加法运算Series.sub()用于对两个 Series 进行逐元素减法运算Series.mul()用于对两个 Series 进行逐元素乘法运算Series.div()用于对两个 Series 进行逐元素除法运算Series.true…...

02UML图(D2_行为图)

目录 学习前言 ---------------------------------- 讲解一:活动图 ---------------------------------- 讲解二:用例图 ---------------------------------- 讲解三:状态机图 ---------------------------------- 讲解四&#xff1a…...

Kali环境变量技巧(The Environment Variable Technique Used by Kali

Kali环境变量技巧 朋友们好,我们今天继续更新《黑客视角下的Kali Linux的基础与网络管理》中的管理用户环境变量。为了充分利用我们的黑客操作系统Kali Linux,我们需要理解和善于使用环境变量,这样会使我们的工具更具便利,甚至具…...

【C++】如何从源代码编译红色警戒2地图编辑器

【C】如何从源代码编译红色警戒2地图编辑器 操作视频视频中的代码不需要下载三方库,已经包含三方库。 一、运行效果:二、源代码来源及编程语言:三、环境搭建:安装红警2安装VS2022下载代码,源代码其实不太多&#xff0c…...

安路FPGA开发工具TD:问题解决办法 及 Tips 总结

安路科技(Anlogic)是一家专注于高性能、低功耗可编程逻辑器件(FPGA)设计和生产的公司。其提供的开发工具TD(TangDynasty)是专门为安路FPGA系列产品设计的集成开发环境(IDE)。以下是对…...

【Django开发】django美多商城项目完整开发4.0第12篇:商品部分,表结构【附代码文档】

本教程的知识点为: 项目准备 项目准备 配置 1. 修改settings/dev.py 文件中的路径信息 2. INSTALLED_APPS 3. 数据库 用户部分 图片 1. 后端接口设计: 视图原型 2. 具体视图实现 用户部分 使用Celery完成发送 判断帐号是否存在 1. 判断用户名是否存在 后…...

IDEA2023版中TODO的使用

介绍:TODO其实本质上还是注释,只不过加上了TODO这几个字符,可以让使用者快速找到。 注意:在类、接口等文件中,注释是使用// 即:// TODO 注释内容 在配置文件中,注释是使用# 即:# TO…...

windows 搭建flutter环境,开发windows程序

环境安装配置: 下载flutter sdk https://docs.flutter.dev/get-started/install/windows 下载到本地后,随便找个地方解压,然后配置下系统环境变量 编译windows程序本地需要安装vs2019或更新的开发环境 主要就这2步安装后就可以了&#xff0…...

支持向量机算法(三):非线性支持向量原理层层拆解,精读公式每一处细节

支持向量机算法(一):像讲故事一样讲明白它的原理及实现奥秘-CSDN博客 支持向量机算法(二):层层拆解,精读公式每一处细节-CSDN博客 支持向量机算法(一)、算法&#xff0…...

一文读懂iOS中的Crash捕获、分析以及防治

Crash系统性总结 Crash捕获与分析Crash收集符号化分析 Crash类别以及解法分析子线程访问UI而导致的崩溃unrecognized selector send to instance xxxKVO crashKVC造成的crashNSTimer导致的Crash野指针Watch Dog超时造成的crash其他crash待补充 参考文章: 对于iOS端开…...

代码随想录刷题day11|(链表篇)206.翻转链表

目录 一、链表理论基础 二、翻转链表思路 双指针解法 递归解法 三、相关算法题目 四、总结 一、链表理论基础 代码随想录 (programmercarl.com) 二、翻转链表思路 两种方法:双指针解法和递归解法 双指针解法 首先定义一个指针curr,初始化为原…...

【STM32-学习笔记-8-】I2C通信

文章目录 I2C通信Ⅰ、硬件电路Ⅱ、IIC时序基本单元① 起始条件② 终止条件③ 发送一个字节④ 接收一个字节⑤ 发送应答⑥ 接收应答 Ⅲ、IIC时序① 指定地址写② 当前地址读③ 指定地址读 Ⅳ、MPU6050---6轴姿态传感器(软件I2C)1、模块内部电路2、寄存器地…...

2025年1月17日(点亮三色LED)

系统信息: Raspberry Pi Zero 2W 系统版本: 2024-10-22-raspios-bullseye-armhf Python 版本:Python 3.9.2 已安装 pip3 支持拍摄 1080p 30 (1092*1080), 720p 60 (1280*720), 60/90 (640*480) 已安装 vim 已安装 git 学习目标:…...

ASP .NET Core 学习 (.NET 9)- 创建 API项目,并配置Swagger及API 分组或版本

本系列为个人学习 ASP .NET Core学习全过程记录,基于.NET 9 和 VS2022 ,实现前后端分离项目基础框架搭建和部署,以简单、易理解为主,注重页面美观度和后台代码简洁明了,可能不会使用过多的高级语法和扩展,后…...

mysql-5.7.18保姆级详细安装教程

本文主要讲解如何安装mysql-5.7.18数据库: 将绿色版安装包mysql-5.7.18-winx64解压后目录中内容如下图,该例是安装在D盘根目录。 在mysql安装目录中新建my.ini文件,文件内容及各配置项内容如下图,需要先将配置项【skip-grant-tab…...

RK3588平台开发系列讲解(NPU篇)NPU 驱动的组成

文章目录 一、NPU 驱动组成二、查询 NPU 驱动版本三、查询 rknn_server 版本四、查询 librknn_runtime 版本沉淀、分享、成长,让自己和他人都能有所收获!😄 一、NPU 驱动组成 NPU 驱动版本、rknn_server 版本、librknn_runtime 版本以及 RKNN Toolkit 版本的对应关系尤为重…...

ESP32学习笔记_FreeRTOS(6)——Event and Notification

摘要(From AI): 这篇博客详细介绍了 FreeRTOS 中的事件组和任务通知机制,讲解了事件组如何通过位操作实现任务间的同步与通信,以及任务如何通过通知机制进行阻塞解除和数据传递。博客提供了多个代码示例,展示了如何使用事件组和任务通知在多任…...

力扣-数组-350 两个数组的交集Ⅱ

解析 与刚刚的《两个数组的交集》一样&#xff0c;只是这道题允许重复&#xff0c;将上一题的set去除即可。 代码 class Solution { public:vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {vector<int> res;int index1 …...

云原生第二次练习

1.判断192.168.1.0/24网络中&#xff0c;当前在线的ip有哪些&#xff0c;并编写脚本打印出来。 #!/bin/bash for ip in $(seq 1 254); doping -c 1 -W 1 "192.168.1.$ip" > /dev/null 2>&1if [ $? -eq 0 ]; thenecho "192.168.1.$ip is online&qu…...

终极指南:Hotkey Detective - 3步揪出Windows热键冲突的“幕后黑手“

终极指南&#xff1a;Hotkey Detective - 3步揪出Windows热键冲突的"幕后黑手" 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-d…...

终极网盘直链下载助手:八大平台一键获取真实链接,告别限速烦恼

终极网盘直链下载助手&#xff1a;八大平台一键获取真实链接&#xff0c;告别限速烦恼 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / …...

统计学实战指南——指数在商业决策中的应用

1. 为什么商业决策需要指数分析&#xff1f; 每次看到超市里商品价格标签更换时&#xff0c;你可能不知道背后藏着大学问。去年我们服务的一家连锁超市就遇到个典型问题&#xff1a;他们发现牛奶销售额下降了15%&#xff0c;但单看进货价和售价都没变化。后来用价格指数分析才发…...

丹青幻境常见问题解决:显存不足、脸部模糊?看这篇就够了

丹青幻境常见问题解决&#xff1a;显存不足、脸部模糊&#xff1f;看这篇就够了 1. 问题概述与快速诊断 丹青幻境作为一款基于Z-Image架构的数字艺术创作工具&#xff0c;在使用过程中可能会遇到一些技术问题。本文将重点解决两个最常见的问题&#xff1a;显存不足导致的运行…...

零基础教程:用RetinaFace镜像快速搭建人脸检测与关键点绘制环境

零基础教程&#xff1a;用RetinaFace镜像快速搭建人脸检测与关键点绘制环境 1. 环境准备与快速部署 RetinaFace是目前最先进的人脸检测算法之一&#xff0c;能够同时实现高精度的人脸检测和关键点定位。本教程将带你从零开始&#xff0c;使用预置的RetinaFace镜像快速搭建完整…...

别再只玩Midjourney了!手把手教你用国内API调用Google Gemini 3 Pro Image(Nano Banana 2)做电商海报

电商设计新利器&#xff1a;用Google Gemini 3 Pro Image打造高转化率商品海报 当Midjourney还在艺术创作领域大放异彩时&#xff0c;Google Gemini 3 Pro Image已经悄然改变了电商视觉设计的游戏规则。作为一名长期服务电商品牌的视觉设计师&#xff0c;我发现这款工具在商品展…...

体系结构论文(106):MobileKernelBench: Can LLMs Write Efficient Kernels for Mobile Devices?

MobileKernelBench: Can LLMs Write Efficient Kernels for Mobile Devices?【阿里巴巴26年paper】这篇文章在讲什么这篇文章研究的是&#xff1a;LLM 能不能帮我们给移动端设备写高质量 kernel。这里的“移动端 kernel”不是服务器 GPU 上那种 CUDA kernel&#xff0c;而是面…...

隶属函数配置

光伏MPPT仿真-模糊控制 光伏系统里有个头疼的问题&#xff1a;太阳辐照度和温度一变&#xff0c;发电功率就跟着抽风。这时候就得靠MPPT&#xff08;最大功率点跟踪&#xff09;算法来揪住那个最高效率点&#xff0c;模糊控制在这事儿上特别有优势——它不需要精确数学模型&am…...

【图像增强】基于matlab HSI和局部同态滤波的彩色图像增强【含Matlab源码 15314期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…...

如何快速上手p5.js Web Editor:免费在线创意编程的终极指南

如何快速上手p5.js Web Editor&#xff1a;免费在线创意编程的终极指南 【免费下载链接】p5.js-web-editor The p5.js Editor is a website for creating p5.js sketches, with a focus on making coding accessible and inclusive for artists, designers, educators, beginne…...