news 2026/2/27 23:36:28

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/2/16 14:21:58

Plum 完整指南:Rime 输入法配置管理的终极解决方案

Plum 完整指南&#xff1a;Rime 输入法配置管理的终极解决方案 【免费下载链接】plum 東風破 /plum/: Rime configuration manager and input schema repository 项目地址: https://gitcode.com/gh_mirrors/pl/plum Plum 是专为 Rime 输入法引擎设计的强大配置管理工具&…

作者头像 李华
网站建设 2026/2/26 15:25:39

LZ4极速压缩终极指南:如何实现毫秒级数据处理

LZ4极速压缩终极指南&#xff1a;如何实现毫秒级数据处理 【免费下载链接】lz4 Extremely Fast Compression algorithm 项目地址: https://gitcode.com/GitHub_Trending/lz/lz4 在现代数据处理场景中&#xff0c;LZ4压缩算法以其惊人的速度和效率成为业界标杆。这款高性…

作者头像 李华
网站建设 2026/2/24 15:41:21

2026毕设ssm+vue基于疫情防控的物资管理与发放系统论文+程序

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景 关于突发公共卫生事件中物资保障问题的研究&#xff0c;现有研究主要以宏观层面的应急物流、供应链协同及政策建议为主&#…

作者头像 李华
网站建设 2026/2/27 10:01:41

SMP语言基础知识-应用系统,个人开发者的痛点(2)

接上篇 SMP语言基础知识-应用系统&#xff0c;个人开发者的痛点&#xff08;1&#xff09; 三、技术的痛点 1、 吃技术老本 个人开发者出来创业一般都是高手&#xff0c;而高手的特点就是有技术专长。这个长处当然是长处&#xff0c;但是&#xff0c;也可能变为短处&#xff0c…

作者头像 李华
网站建设 2026/2/16 20:40:42

Screen to Gif时间轴编辑功能深度剖析

让 GIF 会说话&#xff1a;Screen to Gif 时间轴编辑的实战智慧你有没有过这样的经历&#xff1f;录完一段操作演示&#xff0c;回放时却发现动画太快、细节看不清&#xff0c;或者中间夹杂着一堆静止画面&#xff0c;节奏像卡顿的幻灯片。这时候&#xff0c;一个能“精雕细琢”…

作者头像 李华