SQLServer中exists和except用法
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,一、exists1.1 说明EXISTS(包括 NOT EXISTS)子句的返回值是一个BOOL值。EXISTS内部有一个子查询语句(SELECT ... FROM...),我将其称为EXIST的内查
千家信息网最后更新 2026年11月01日SQLServer中exists和except用法
一、exists
1.1 说明
EXISTS(包括 NOT EXISTS)子句的返回值是一个BOOL值。EXISTS内部有一个子查询语句(SELECT ... FROM...),我将其称为EXIST的内查询语句。其内查询语句返回一个结果集。EXISTS子句根据其内查询语句的结果集空或者非空,返回一个布尔值。Link
exists:强调的是是否返回结果集,不要求知道返回什么,比如:select name from student where sex = 'm' and mark exists(select 1 from grade where ...) ,只要exists引导的子句有结果集返回,那么exists这个条件就算成立了,大家注意返回的字段始终为1,如果改成"select 2 from grade where ...",那么返回的字段就是2,这个数字没有意义。所以exists子句不在乎返回什么,而是在乎是不是有结果集返回。EXISTS = IN,意思相同不过语法上有点点区别,好像使用IN效率要差点,应该是不会执行索引的原因。Link
相对于inner join,exists性能要好一些,当她找到第一个符合条件的记录时,就会立即停止搜索返回TRUE。
1.2 示例
--EXISTS--SQL:select name from family_memberwhere group_level > 0and exists(select 1 from family_grade where family_member.name = family_grade.nameand grade > 90)--result:namecherrie--NOT EXISTS--SQL:select name from family_memberwhere group_level > 0and not exists(select 1 from family_grade where family_member.name = family_grade.nameand grade > 90)--result:namemazeyrabbit
二、except
2.1 说明
查询结果上EXCEPT = NOT EXISTS,INTERSECT = EXISTS,但是EXCEPT / INTERSECT的「查询开销」会比NOT EXISTS / EXISTS大很多。
except自动去重复,not in / not exists不会。
2.2 示例
--except--SQL:select name from family_memberwhere group_level > 0except(select name from family_grade)--result:namerabbit--NOT EXISTS--SQL:select name from family_memberwhere group_level > 0and not exists(select name from family_grade where family_member.name = family_grade.name)--result:namerabbitrabbit
三、测试数据
-- ------------------------------ Table structure for family_grade-- ----------------------------DROP TABLE [mazeytop].[family_grade]GOCREATE TABLE [mazeytop].[family_grade] ([id] int NOT NULL ,[name] varchar(20) NULL ,[grade] int NULL )GO-- ------------------------------ Records of family_grade-- ----------------------------INSERT INTO [mazeytop].[family_grade] ([id], [name], [grade]) VALUES (N'1', N'mazey', N'70')GOGOINSERT INTO [mazeytop].[family_grade] ([id], [name], [grade]) VALUES (N'2', N'cherrie', N'93')GOGO-- ------------------------------ Table structure for family_member-- ----------------------------DROP TABLE [mazeytop].[family_member]GOCREATE TABLE [mazeytop].[family_member] ([id] int NOT NULL ,[name] varchar(20) NULL ,[sex] varchar(20) NULL ,[age] int NULL ,[group_level] int NULL )GO-- ------------------------------ Records of family_member-- ----------------------------INSERT INTO [mazeytop].[family_member] ([id], [name], [sex], [age], [group_level]) VALUES (N'1', N'mazey', N'male', N'23', N'1')GOGOINSERT INTO [mazeytop].[family_member] ([id], [name], [sex], [age], [group_level]) VALUES (N'2', N'cherrie', N'female', N'22', N'2')GOGOINSERT INTO [mazeytop].[family_member] ([id], [name], [sex], [age], [group_level]) VALUES (N'3', N'rabbit', N'female', N'15', N'3')GOGOINSERT INTO [mazeytop].[family_member] ([id], [name], [sex], [age], [group_level]) VALUES (N'4', N'rabbit', N'female', N'15', N'3')GOGO-- ------------------------------ Table structure for family_part-- ----------------------------DROP TABLE [mazeytop].[family_part]GOCREATE TABLE [mazeytop].[family_part] ([id] int NOT NULL ,[group] int NULL ,[group_name] varchar(20) NULL )GO-- ------------------------------ Records of family_part-- ----------------------------INSERT INTO [mazeytop].[family_part] ([id], [group], [group_name]) VALUES (N'1', N'1', N'父亲')GOGOINSERT INTO [mazeytop].[family_part] ([id], [group], [group_name]) VALUES (N'2', N'2', N'母亲')GOGOINSERT INTO [mazeytop].[family_part] ([id], [group], [group_name]) VALUES (N'3', N'3', N'女儿')GOGO-- ------------------------------ Indexes structure for table family_grade-- ------------------------------ ------------------------------ Primary Key structure for table family_grade-- ----------------------------ALTER TABLE [mazeytop].[family_grade] ADD PRIMARY KEY ([id])GO-- ------------------------------ Indexes structure for table family_member-- ------------------------------ ------------------------------ Primary Key structure for table family_member-- ----------------------------ALTER TABLE [mazeytop].[family_member] ADD PRIMARY KEY ([id])GO-- ------------------------------ Indexes structure for table family_part-- ------------------------------ ------------------------------ Primary Key structure for table family_part-- ----------------------------ALTER TABLE [mazeytop].[family_part] ADD PRIMARY KEY ([id])GO
SQLServer中exists和except用法
结果
查询
子句
语句
字段
条件
示例
相同
个子
原因
女儿
就是
布尔
开销
性能
意义
意思
效率
数字
数据
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
亿人帮互联网科技有限公司
新华互联网科技
上海卓越科技互联网
云之行互联网科技
互联网科技工作委员会主任
互联网科技活动banner
互联网科技视频
上游互联网科技
深圳艾佳互联网科技
开启互联网科技时代小说
广州慧亚互联网科技怎么样
创业天下互联网科技有限公司
移动互联网科技股
想开互联网科技公司怎么样
2021互联网科技公司排名
江苏苏星互联网科技有限公司
互联网科技包装股
云鲸互联网络科技有限公司
互联网科技新闻
中国互联网公司的科技投入
互联网络科技
上海睿民互联网科技有限公司
互联网巨头反垄断金融科技
互联网科技公司招聘
富国互联网科技创新基金
互联网科技公司实习生
互联网科技与大数据专业
互联网新科技动漫ppt素材
徐州市互联网科技有限公司
工业互联网科技成果转化