news 2026/5/13 14:39:43

SQL Server——约束与多表联查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL Server——约束与多表联查

数据库约束与多表联查

一、数据库约束

约束是作用于表中字段上的规则,用于限制存储在表中的数据

用于保证数据库中数据的正确性、有效性和完整性。

约束

  • 主键约束:值唯一且不为NULL,一张表只能有一个主键约束,用于唯一标识记录

  • 唯一约束:值必须唯一,允许有一个为null,确保列值唯一性

  • 非空约束:不能为null

  • 检查约束:限制列的取值范围,保证数据域的正确性

  • 默认值约束:给这一列设置一个默认值

  • 外键约束:从表的某个列的值来源于主表某列的值,维护表间引用完整性

1. 主键约束

三种设置方式

方法1:

//方法1: create table tb_teacher( tid int primary key, tname varchar(20) );

方法2:

create table tb_teacher( ​ tid int, ​ tname varchar(20), ​ primary key(tid) ​ );

方法3:修改表添加

create table tb_teacher( ​ tid int, ​ tname varchar(20) ​ ); ​ ALTER TABLE tb_teacher ​ ADD CONSTRAINT pk_teacher PRIMARY KEY (tid);

组合主键

多列共同构成主键,多对多关联表常用

create table tb_teacher( ​ tid int, ​ tname varchar(20), ​ cardno char(18), ​ primary key(tid, cardno) -- 组合主键 ​ );

*2. 检查约束

create table tb_teacher( ​ tid int primary key, ​ tname varchar(20) not null, ​ cardno char(18) unique, ​ sex char(2) check(sex='男' or sex = '女') ​ );

3. 外键约束

注意事项

· 创建表:先主表后从表

· 删除表:先从表后主表

· 已有数据的表添加外键可能失败

-- 修改表方式添加外键(与主键相同,有三种,创建方式相同,关键字不同)

ALTER TABLE 表名 ​ ADD CONSTRAINT 外键名称 ​ FOREIGN KEY (外键字段名) ​ REFERENCES 主表 (主表列名);

·一对一:外键加在任意一方

·一对多:外键加在"多"的一方

·多对多:需要中间表(命名:tb表1表2)

二、多表联查

1. 联合查询(集合操作)

1. UNION - 并集(去重)
-- 将薪资低于2000的员工和10号部门的员工全部查询出来 select * from emp where sal < 2000 ​ union ​ select * from emp where deptno = 10;
2. UNION ALL - 并集(不去重)
select * from emp where sal < 2000 ​ union all ​ select * from emp where deptno = 10;

注意事项

列名取自第一个查询结果集

3. INTERSECT - 交集
-- 查询既是10号部门又是CLERK的员工 ​ select * from emp where deptno = 10 ​ intersect ​ select * from emp where job = 'CLERK';

注意事项

  1. INTERSECT会自动去除重复行

  2. 所有查询必须有相同数量的列

  3. 对应列的数据类型必须兼容

  4. 结果集的列名取自第一个查询

4 .EXCEPT - 差集
-- 查询10号部门中不是CLERK的员工 ​ select * from emp where deptno = 10 ​ except ​ select * from emp where job = 'CLERK';

注意事项

  1. EXCEPT会自动去除重复行

  2. 所有查询必须有相同数量的列

  3. 对应列的数据类型必须兼容

2. 连接查询

连接类型使用场景特点
内连接需要完全匹配的数据只返回满足条件的记录· 查询结果必须满足连接条件
左外连接需要显示左表所有记录以左表为主表, 左表所有记录都会显示,右表不满足条件的显示NULL
右外连接需要显示右表所有记录以右表为主表, 左表所有记录都会显示,右表不满足条件的显示NULL
全外连接需要显示所有记录两边表记录都显示,不匹配为NULL
自连接查询层级关系(如上下级关系)表自身连接,需要别名
2.1 笛卡尔积(自然连接)

连接查询会产生笛卡尔积,即两个表的乘积(实际开发中不使用,无意义)

SELECT * FROM emp, dept;
内连接

标准写法

SELECT * FROM emp e JOIN dept d ON e.deptno=d.deptno;

非标准写法

SELECT e.ename,e.sal,e.comm,d.dname FROM emp AS e,dept AS d WHERE e.deptno=d.deptno;
24 外连接
2.4.1 左外连接(LEFT JOIN)
SELECT * FROM emp e LEFT OUTER JOIN dept d ON e.deptno = d.deptno;
2.4.2 右外连接(RIGHT JOIN)
SELECT * FROM emp e ​ RIGHT OUTER JOIN dept d ​ ON e.deptno = d.deptno;
2.4.3 全外连接(FULL JOIN)
SELECT * FROM emp e ​ FULL JOIN dept d ​ ON e.deptno = d.deptno;
2.5 自连接(SELF JOIN)

表自身与自身连接

-- 查询员工及其所属领导的名字

-- 使用JOIN语法

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

;

  1. 连接不限与两张表,连接查询也可以是三张、四张,甚至N张表的连接查询。通常连接查询不可能需要整个笛卡尔积,而只是需要其中一部分,那么这时就需要使用条件来去除不需要的记录。这个条件大多数情况下都是使用主外键关系去除。

  2. 两张表的连接查询一定有一个主外键关系,三张表的连接查询就一定有两个主外键关系,所以在大家不是很熟悉连接查询时,首先要学会去除无用笛卡尔积,那么就是用主外键关系作为条件来处理。如果两张表的查询,那么至少有一个主外键条件,三张表连接至少有两个主外键条件。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 22:28:05

每日诗歌:梦的交响曲

436、梦的交响曲——灵遁者连续3天的失眠让我听到了梦的交响曲这曲目我并不陌生只是感觉到寒冷毕竟刚刚入秋——437、混沌中的觉醒——灵遁者在梦与现实的边缘徘徊&#xff0c;思绪如乱麻&#xff0c;交织着未知的色彩。星辰坠落&#xff0c;化作纷飞的蝴蝶&#xff0c;翅膀煽动…

作者头像 李华
网站建设 2026/5/9 20:03:08

3分钟掌握AlphaFold预测结果:从入门到精通的置信度指南

3分钟掌握AlphaFold预测结果&#xff1a;从入门到精通的置信度指南 【免费下载链接】alphafold Open source code for AlphaFold. 项目地址: https://gitcode.com/GitHub_Trending/al/alphafold 你是否曾面对AlphaFold输出的蛋白质结构感到困惑&#xff1f;那些五颜六色…

作者头像 李华
网站建设 2026/5/9 19:16:05

M3 Pro芯片MacBook运行CosyVoice语音合成的终极指南

M3 Pro芯片MacBook运行CosyVoice语音合成的终极指南 【免费下载链接】CosyVoice Multi-lingual large voice generation model, providing inference, training and deployment full-stack ability. 项目地址: https://gitcode.com/gh_mirrors/cos/CosyVoice 还在为M3 P…

作者头像 李华
网站建设 2026/5/9 21:34:41

NootRX AMD显卡macOS兼容性终极指南:5分钟解决RDNA 2驱动问题

NootRX AMD显卡macOS兼容性终极指南&#xff1a;5分钟解决RDNA 2驱动问题 【免费下载链接】NootRX Lilu plug-in for unsupported RDNA 2 dGPUs. No commercial use. 项目地址: https://gitcode.com/gh_mirrors/no/NootRX 还在为AMD RDNA 2系列显卡在macOS上的兼容性问题…

作者头像 李华
网站建设 2026/5/13 13:10:43

Latest:macOS应用更新的终极管理工具

Latest&#xff1a;macOS应用更新的终极管理工具 【免费下载链接】Latest A small utility app for macOS that makes sure you know about all the latest updates to the apps you use. 项目地址: https://gitcode.com/gh_mirrors/la/Latest 在macOS系统中&#xff0c…

作者头像 李华
网站建设 2026/4/28 4:33:37

PyTorch-CUDA-v2.6镜像是否支持rsync增量同步?

PyTorch-CUDA-v2.6 镜像是否支持 rsync 增量同步&#xff1f; 在现代深度学习开发中&#xff0c;一个常见的工作流是&#xff1a;本地写代码、远程跑训练。你坐在轻薄本前敲完模型结构&#xff0c;按下保存键的瞬间&#xff0c;就希望这段改动能“无声无息”地同步到远端那台配…

作者头像 李华