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

文章目录

  • 一、子查询
    • 嵌套子查询
    • 相关子查询
  • 二、查询运算
    • 并运算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李四...

现在有学生表如下:

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

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

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

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

 基本思路:

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

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

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


 3、相关子查询

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

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

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

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

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

SC表如下:

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

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

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

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

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


二、查询运算

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

1、并运算

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

如示意图所示:

并运算的语法格式如下:

      select 语句1

      union

      select 语句2

      ......

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

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

course表和course2表如下:

合并course表和course2表

select *from course
union
select *from course2

 

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


2、交运算

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

course表和course2表如下:

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

select *from course
intersect
select *from course2


3、差运算

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

course表和course2表如下:

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

select *from course
except
select *from course2

 

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

select *from course2
except
select *from course


三、函数的使用

      在使用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>=90print '优'
else if @grade between 80 and 89print '良'
elseprint '其他'


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语句,因此不能单独执行,只能作为可以单独执行的语句的一部分来使用。

学生表如下:

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

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

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

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

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

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

select id,name,grade,
casewhen 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


四、总结

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

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

      总体只介绍了这些东西的基本语法,并没有很深入的探讨,先打好基础了解大概,以后遇到真正的问题能够更快更好的学习,慢慢加深数据库的知识,可以积少成多,一步一步的走下去!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22049.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

比亚迪海外市场势起

监制 | 何玺 排版 | 叶媛 海外市场正成为比亚迪新的增长点。 据媒体报道&#xff0c;从去年下半年至今&#xff0c;比亚迪已经在至少四个国家的纯电车型市场占据“销冠”位置。对于国内用户群体来说&#xff0c;比亚迪销量“霸屏”早已不是新闻&#xff0c;但在海外也保持这个…

易基因“多区域DNA甲基化检测探针设计及其检测方法”获专利授权!

大家好&#xff0c;这里是专注表观组学十余年领跑多组学科研服务的易基因。 DNA甲基化是表观遗传学研究中&#xff0c;修饰最为稳定&#xff0c;含量最为丰富&#xff0c;对基因调控最为活跃、途径最为广泛的一种修饰。不同基因区域或位点的修饰与胚胎发育、疾病发生和发展密切…

数据库--->MySQL(2)【事务、SQL优化】

文章目录 事务什么是事务&#xff1f;隔离性中的不同隔离级别事务实现的原理隔离级别的实现原理&#xff08;MVCC&#xff09;MySQL中的锁机制 SQL优化 事务 什么是事务&#xff1f; 事务就是逻辑上的一组操作&#xff0c;在同一个事务中&#xff0c;如果有多条sql语句执行&am…

android studio 使用lib中的framework.jar编译

本文参考了网上搜索到的内容总结了一下&#xff0c;感谢大神们的无私奉献。 在App中的build.gradle中的android{}下添加&#xff1a; android{...gradle.projectsEvaluated {tasks.withType(JavaCompile) {Set<File> fileSet options.bootstrapClasspath.getFiles()Li…

100种思维模型之安全边际思维模型-92

安全边际&#xff0c; 简而言之即距离某一件糟糕的事件发生&#xff0c;还有多大的空间&#xff0c;安全边际越高&#xff0c;我们就越安全&#xff01; 安全边际思维模型一个 让生活变得更从容 的 思维模型。 01、何谓安全边际思维模型 一、安全边际思维 安全边际 源于…

(9)基础强化:元字符,正则表达式,匹配,提取组,Regex,Match与Matches

一、作业 1、问&#xff1a;下面解压程序出错&#xff0c;什么原因&#xff1f; string src "E:\1.txt";string des "E:\2.txt";using (FileStream read File.OpenRead(src)){using (GZipStream gzip new GZipStream(read, CompressionMode.Decompress…

PHP代码审计(一)之PHP代码审计的意义

PHP代码审计的意义 什么是代码审计 什么是代码审计&#xff1f;代码审计就是获取目标的源代码&#xff0c;这个目标可以是一个网站&#xff0c;也可以是一个手机app&#xff0c;只要我们得到了目标的源代码&#xff0c;我们就可以去挖掘目标系统的漏洞&#xff0c;代码审计是…

电脑上有哪些好用的小众软件?快看看这里!

​ 电脑上的各类软件有很多&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;专注于实用功能&#xff0c;简洁干净、功能强悍。 自动化工具——AutoHotkey ​ AutoHotkey是一个自动化工具&#xff0c;可以让你创建和运行各种脚本&…

快快快快快快快快快快排

作者简介&#xff1a;დ旧言~&#xff0c;目前大一&#xff0c;现在学习Java&#xff0c;c&#xff0c;Python等 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 望小伙伴们点赞&#x1f44d;收藏✨加关注哟&#x1f495;&#x1f495; C语言实现快排☺️ ℹ️…

Spring Boot 系列1 -- 概念、创建和使用

目录 1. 什么是Spring Boot? 2. Spring Boot 的优点 3. Spring Boot 项目的创建 3.1 使用IDEA创建 3.2 网页版创建 4. 项目目录和项目运行 4.1 项目目录 4.2 运行项目 4.3 使用Spring Boot项目实现网页输出Hello World 5. 路径问题 1. 什么是Spring Boot? Spring …

jdk11缺少jre的问题解决

问题&#xff1a;升级jdk的时候文件中缺少jre&#xff0c;导致项目启动报错 jdk11不在默认用户强制安装jre&#xff0c;所以jdk包中不在包含jre文件 解决步骤1&#xff1a;进入jdk安装包的根目录&#xff0c;输入cmd 解决步骤2&#xff1a;在cmd中输入以下命令 bin\jlink.e…

NAT转换网关实现IP地址转换,保障数据采集

NAT转换网关&#xff08;Network Address Translation Gateway&#xff09;是物通博联推出的一款物联网设备&#xff0c;用于在不同网络之间进行网络地址转换&#xff08;Network Address Translation&#xff09;&#xff0c;以实现IP地址的转换和映射。 物通博联NAT转换网关…