SQL Server数据库 -- 表的高级查询

这篇具有很好参考价值的文章主要介绍了SQL Server数据库 -- 表的高级查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识

 

文章目录

  • 一、子查询
    • 嵌套子查询
    • 相关子查询
  • 二、查询运算
    • 并运算union
    • 交运算intersect
    • 差运算except
  • 三、函数的使用
    • if语句
    • while语句
    • case语句
  • 四、总结

前言

高级子查询是对查询更灵活的运用,学会了高级查询将对数据库使用有很大的帮助。


一、子查询

     1、子查询简介

      在SQL语言中,一个select-from-where语句称为一个查询块。如果一个select语句嵌套在另一个select、insert、update或delete语句中,则称之为子查询或内层查询。

      包含子查询的语句则称为主查询或父查询,一个子查询可以嵌套在另一个子查询中,这样就可以形成:父查询->子查询->子查询......

     where子句中的子查询通常有如下几种形式:

      where <列名> (not)   in   (子查询)  

      where <列名> (>=)    <=  (子查询)   

      where <列名>    exists    (子查询)

下面分别介绍上述几种形式的子查询。


2、嵌套子查询

      嵌套子查询指在内层查询中不关联外层查询的子查询,在where下面的这种子查询,要么返回一个单值,要么返回一个值的列表,嵌套子查询的信息传递是单项的,子查询只向外传递信息。

形式如下:

       select *from 表 

       where 列名  (not)  in 

       ( select * from ...)

例如:select *from 表

          where sno in(子查询)

子查询 求sno 张三、sno李四...

现在有学生表如下:

SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识

查询与李晨是同一个系的学生 

 基本思路:查找结果是学生信息,条件是在where中寻找相同的系,子查询条件是和李晨相同的系,则在子查询中查询所有和李晨相同系的系名即可

select * from student
where dept in 
(select dept from student
where sname = '李晨'
)

SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识

查找考试成绩大于等于90岁的学生的学号和姓名

 基本思路:

方法1:首先应从sc表中找出所有成绩大于等于90的学生学号,然后再根据这些学号在student表中查找出对应的学生学号和姓名,此方法不连接表

方法2:直接连接sc表 设置条件为grade>=90

select sno ,sname from student
where sno in
(select sno from sc
where grade>=90
)

SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识


 3、相关子查询

      相关子查询与嵌套子查询的主要区别在于信息传递,嵌套子查询的信息传递是单向的,子查询向外传递信息。相关子查询的信息传递是双向的,子查询给外层查询传递信息,外层查询也向子查询传递信息。 

      相关子查询的执行过程可分为3个步骤:

1、从外层查询获取一条记录,并将该记录信息传递给内层查询

2、内层查询根据外层查询传递的值执行查询操作

3、内层查询将执行结果传回给外层查询,外层查询利用返回值完成对当前记录的处理

SC表如下:

SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识

 由于内层查询和外层查询使用的是同一张表,而且内、外层查询都需要从对方处获取信息,因此需要为表取别名以区分是外层查询的表还是内层查询的表

查询每门课程中考试成绩低于该门课程的平均成绩的学生的课程号、学号和成绩

 分析:要的东西是:课程号、学号和成绩,条件是考试成绩低于--课程平均成绩

则子查询为:课程平均成绩

select cno,sno,grade from sc sc1
where grade <
( select avg(grade) from sc sc2
  where sc1.cno = sc2.cno
)

SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识


二、查询运算

SQL支持对查询结果再进行并、交、差运算。每个运算都有属于自己的关键字。

1、并运算

并运算可将两个或多个查询语句的结果集 合并为一个结果集,并运算关键字为:union,可以让两个表或多个表以行的形式合并,之前的join on是以列的形式合并。

如示意图所示:

SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识

并运算的语法格式如下:

      select 语句1

      union

      select 语句2

      ......

规定:两个语句的列数必须相同,列数的数据类型必须相同或兼容

union all 保留重复的数据行,union 不保留重复数据行

course表和course2表如下:

SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识

合并course表和course2表

select *from course
union
select *from course2

 SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识

 由于限定列数和类型相同,所以对表的要求很高


2、交运算

 交运算是返回同时在两个集合中出现的记录,即返回两个查询结果列值相同的记录,其关键词为:intersect

course表和course2表如下:

SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识

查询同时出现在course表和course2表中的记录

select *from course
intersect
select *from course2

SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识


3、差运算

差运算是返回一个表中有但另一个表中没有的记录,实现差运算的关键词为:except

course表和course2表如下:

SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识

查询在course1表中有但在course2表中没有的记录

select *from course
except
select *from course2

 SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识

 查询在course2表中有但在course1表中没有的记录

select *from course2
except
select *from course

SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识


三、函数的使用

      在使用SQL语句编程时,经常需要按照指定的条件进行控制转移或重复执行某些操作,这个过程可以通过流程控制语句来实现!

      流程控制语句用于控制程序的流程,一般分为三类:顺序,分支和循环。SQL Server也提供了对这三种流程控制的支持!!!

1、if分支语句

      if~else语句用于构造分支选择结构,是最基本的选择结构,可以利用if~else语句对一个条件进行测试,并根据测试结果执行相应的操作!!!

声明一个整形变量@grade,给该变量赋值为88,并判断如果@grade大于等于90,则显示“优”,如果@grade在80~89之间则显示“良”,如果小于80则显示其他

declare @grade int
set @grade = 88
if @grade>=90
	print '优'
else if @grade between 80 and 89
    print '良'
else
	print '其他'

2、while语句

      while语句用于设置重复执行的语句块,例如遍历某个重复代码。如果嵌套了两个或多个while循环,则内层的break将会退出到下一个外层循环。

用while循环实现计算5000减1、减2、减3、......一直减到50的结果,并显示最终结果

declare @i int,@sum int
set @i=1
set @sum=5000
while @i<=50
begin
set @sum = @sum-@i
set @i = @i+1
end
print @sum

3、case语句

      case表达式是一种多分支表达式,它可以根据条件列表的值返回多个可能的结果表达式中的一个。

      case表达式可用在任何允许使用表达式的地方,但它不是一个完整的SQL语句,因此不能单独执行,只能作为可以单独执行的语句的一部分来使用。

学生表如下:

SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识

查询学生表的考试情况,列出学号、姓名和成绩,同时对成绩进行如下处理:

如果成绩大于等于90分,则在查询结果中显示“优”;

如果成绩在80到89分之间,则在查询结果中显示“良”;

如果成绩在70到79分之间,则在查询结果中显示“中”;

如果成绩在60到69分之间,则在查询结果中显示“及格”;

如果成绩在60分以下,则查询结果中显示“不及格。

select id,name,grade,
case
	when grade >=90 then '优'
	when grade between 80 and 89 then '良'
	when grade between 70 and 79 then '中'
	when grade between 60 and 69 then '及格'
	when grade <60 then '不及格'
end as 成绩
from student

SQL Server数据库 -- 表的高级查询,数据库,算法,sqlserver,系列,知识


四、总结

      本章主要介绍了SQK Server 查询语句的高级使用,以及一系列辅助查询的小知识点。首先介绍了子查询的嵌套子查询,只返回一个值或一个列表,并且传递由内到外是单项的,相关子查询是内外相互影响,是双向的。子查询大概有三种形式,要么in ,要么比值符号,要么exists存在的意思。

      往后介绍了并运算union:两个表合在一起去掉重复的,交运算intersect:两张表重复的部分,差运算except:一张表有另一张表没有的部分。最后介绍了几种函数语句的使用。

      总体只介绍了这些东西的基本语法,并没有很深入的探讨,先打好基础了解大概,以后遇到真正的问题能够更快更好的学习,慢慢加深数据库的知识,可以积少成多,一步一步的走下去!!!文章来源地址https://www.toymoban.com/news/detail-538199.html

到了这里,关于SQL Server数据库 -- 表的高级查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库 SQL高级查询语句:聚合查询,多表查询,连接查询

    创建Students和Courses表 直接查询 设置别名查询 设置条件查询 使用COUNT(*) 和 COUNT(StudentID)是一样的效果,因为StudentID是主键,每行记录的主键都不同。另外我们在聚合查询中还是能使用WHERE子句的,比如我们要 查找年龄大于20岁的学生数量 ,可使用以下SQL语句: 函数 说明 SUM

    2024年02月09日
    浏览(127)
  • [SQL Server]数据库入门之多表查询

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ ------------------❤️分割线❤️------------------------- —————————

    2024年02月08日
    浏览(57)
  • 在Azure SQL DB/Azure托管实例里快速查询各数据库大小以及每个数据库下表的大小

    目录 (一)前言 (二)正文 1. 环境: 2. 查看实例下每个数据库的空间大小 (1) SQL语法 (2)运行结果 3. 查看特定数据库下每张表的大小 (1)SQL语法 (2)运行结果 日常工作中对于各个数据库以及每一个数据库中下辖的表的大小,是我们日常监控以及分析问题的重要方向

    2024年02月11日
    浏览(69)
  • SQL Server 数据库中复制一张表数据到另一张表的详细步骤与代码示例

    在 SQL Server 数据库中,有时需要将一张表中的数据复制到另一张表中,可能是为了备份数据、进行数据迁移或其他目的。本文将详细介绍如何在 SQL Server 数据库中实现这个操作,并提供相关的 SQL 代码示例。 最常见的方法是使用 SQL 的 INSERT INTO 语句将数据从一张表复制到另一

    2024年02月07日
    浏览(57)
  • 【数据库Microsoft SQL Server】实验一 数据库的定义与单表查询

    一、实验目的 1.要求学生熟悉掌握在DBMS中用SQL语言定义数据库、表、主码及外码。 2.熟悉关系数据库中常用数据类型,为关系表各属性定义合理的数据类型。 3.在建立好的数据库表中输入部分虚拟数据,实现基于单表的sql查询并分析查询结果。 二、实验环境与实验准备工作

    2024年02月05日
    浏览(62)
  • 数据库SQL Server实验报告 之 SQL语言进行简单查询(3/8)

    实验名称          SQL语言进行简单查询 注意:原版word在下载资源里面(免费下载) 实验目的及要求: 掌握各种查询的SQL脚本写法,包括SELECT、FROM、WHERE、GROUP BY、HAVING子句的用法,特别要求比较内连接、外连接的结果 在XSGL数据库中,使用各种查询条件完成指定的查询

    2024年02月02日
    浏览(63)
  • Python 通过pymssql访问查询操作 SQL Server数据库

    在企业应用开发中,经常用到应用程序访问数据库的开发模式,中小企业使用的数据库中,以ms SQL Server居多。本文就以一个简单的实例模型,简单介绍一下python访问ms sql sever数据库的方法。 本文中以下面的本地SQL Server数据库为例进行数据库连接,数据表的查询、增加、删除

    2024年02月10日
    浏览(105)
  • SQL Server数据库查询速度慢的原因和解决方法

    SQL Server数据库查询速度慢的原因和解决方法 SQL Server 数据库 查询速度慢的原因有很多,常见的有以下几种: 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足

    2024年02月07日
    浏览(66)
  • Sql Server中查询数据库所有表及其数据总条数和占用空间

    1、查询某数据库中的所有数据表 SELECT name 数据表 FROM sysobjects WHERE xtype=\\\'u\\\' ORDER BY name 2、查询某数据库中的所有数据表及其数据总条数 SELECT a.name 数据表, b.rows 数据总条数 FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE ( a.type = \\\'u\\\' ) AND ( b.indid IN ( 0, 1 ) ) ORDER BY a.name,b.row

    2024年02月02日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包