sql server高级查询,看这篇文章就够了

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: sql server高级查询,看这篇文章就够了

先选择一个数据库

use jobtest
go

引入:该数据库jobtest里面有两张表,Student学生表和Grade年级表,表中的数据如下所示:

学生表Student:

年级Grade表:

接下来我们来看看sql server中的子查询:

子查询

1.查询编号比李太白大的学生信息

--先获取李太白的编号
declare @sid int ;
select @sid  = sid from student where sname = '李太白'
--再查询编号比@sid大的信息
select * from student where sid>@sid

当然我们也可以改成子查询:

—可以改成子查询(将@sid替换成获取李太白编号的sql语句)

select * from student where sid>(select  sid from student where sname = '李太白')

其运行结果都是:

以上就是一个最简单的子查询。

习惯上,外面的查询称为父查询,括号里面的则是子查询,返回结果集。因为子查询作为where条件的一部分,所以还可以和update、insert以及delete一起使用,语法和select的类似。

注意:将子查询和比较运算符联合使用,必须保证子查询返回的值不多于一个。

还有一个就是:

select * from student不如select sid,sname,sphone,spass,sgid from student的效率高,可维护性也比不上,所以一般使用后者。

下面我们再来一个子查询的案例

需求:查询青鸟一班的学生信息

我们可以看到思路是这样的:

(1)先根据年级名称查询出年级编号

(2)学生表里面的年级编号让和查询出来的年级编号对应起来就可以了

select * from student where sgid = (select gid from grade where gname = '青鸟一班')

运行结果:

in和not in查询

前面我们说过,将子查询和比较运算符联合使用,必须保证子查询返回的值不多于一个。

如果返回多个值的话会怎么样呢?我们不妨来试试、

查询学生表中,年级编号是1的年级名称

select gname from grade where gid =(select sgid from student where sgid = 1)

运行结果:

可见,程序给我报异常了,表示子查询返回了多个结果。

正确写法应该是这样的:

select gname from grade where gid in(select sgid from student where sgid = 1)

in子查询适合用在子查询结果集返回多条记录的情况下。

反过来not in就是正好与in取反,还是同样上面给出的例子,我们换成not in看看结果是什么样的?

select gname from grade where gid not in(select sgid from student where sgid = 1)

结果:

很明显,除了青鸟一班,其余年级名称均已输出。

exists和no exists

exists,只注重子查询是否有返回行,如查有返回行结果为真,否则为假,并不适用子查询的结果,仅使用测试子查询是否有返回结果

下面来举例说明一下:

查询是否有编号为6的学生信息,如果有,则输出‘有编号是6的学生’

if exists(select * from student where sid = 6)
print '有编号是6的学生'

运行结果为:

因为表中并没有编号是6的学生信息。

而not exists正好与exists相反,还是利用上面的案例

if not exists(select * from student where sid = 6)
print '有编号是6的学生'

运行结果为:


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
8天前
|
SQL 关系型数据库 MySQL
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
|
10天前
|
SQL Java 关系型数据库
Mybatis多表关联查询与动态SQL(下)
Mybatis多表关联查询与动态SQL
26 0
|
10天前
|
SQL Java 数据库连接
Mybatis多表关联查询与动态SQL(上)
Mybatis多表关联查询与动态SQL
13 0
|
2天前
|
SQL 关系型数据库 Java
实时计算 Flink版操作报错之在阿里云DataHub平台上执行SQL查询GitHub新增star仓库Top 3时不显示结果,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
2天前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(3)——连接和嵌套查询
简简单单 My SQL 学习笔记(3)——连接和嵌套查询
|
2天前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
|
6天前
|
SQL 关系型数据库 MySQL
查询mysql版本sql - 蓝易云
执行这个命令后,MySQL将返回当前正在运行的版本信息。
42 0
|
6天前
|
SQL Kubernetes 数据库
实时计算 Flink版操作报错合集之查询sqlserver ,全量阶段出现报错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
22 0
|
10天前
|
SQL 分布式计算 DataWorks
实时数仓 Hologres产品使用合集之查询分区表的生命周期(即之前设置的'auto_partitioning.num_retention'值)的SQL语句,可以使用什么查询
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
24 0
|
10天前
|
数据库 数据库管理 Python
sqlserver练习----涉及多个表的连接查询
sqlserver练习----涉及多个表的连接查询
14 0