先选择一个数据库

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 server高级查询,看这篇文章就够了相关推荐

  1. sql server高级查询及更新操作一

    sql server高级查询及更新操作一 题目要求 实现代码 题目要求 一.将素材中的"学生管理"数据库附加到SQL SERVER中,完成以下操作: 班级信息(班级编号 班级名称 ...

  2. 好多人都说存储过程很难?认真看这篇文章就够了

    何为存储过程? 存储过程是在数据库管理系统中保存的.预先编译的并能实现某种功能的sql程序,说直白点,java知道吧?和java的方法一样. 每遇到一个新的知识点时,我们都会看看它的优点,从而加深对它 ...

  3. Vue开发入门看这篇文章就够了

    摘要: 很多值得了解的细节. 原文:Vue开发看这篇文章就够了 作者:Random Fundebug经授权转载,版权归原作者所有. 介绍 Vue 中文网 Vue github Vue.js 是一套构建 ...

  4. 万字心得,PMP学习考试那些事儿,看这篇文章就够了

    声明:文章为原创,首发于知乎,链接:万字长文!PMP考试那些事儿,看这篇文章就够了 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/524966002 以下内 ...

  5. Android 8.0新特性(看这篇文章就够了)

    2019独角兽企业重金招聘Python工程师标准>>> 在刚结束不久的谷歌 I/O2017开发者大会上发布的第二个Android O(安卓8.0)开发者预览,并且向普通用户开放了第二 ...

  6. 使用分层网络模型的两个优点是什么_从零开始学网络|搞懂OSI参考模型和TCP/IP分层模型,看这篇文章就够了...

    从零开始学网络|搞懂OSI参考模型和TCP/IP分层模型,看这篇文章就够了​mp.weixin.qq.com 前言 今天和大家一起谈谈"网络",之前写的文章可能不太通俗易懂,有人就 ...

  7. python入门书籍推荐,看这篇文章就够,请!

    python入门书籍推荐,看这篇文章就够,请! 事实上,有关python的书籍很多很多,就当当网就有50000件和python有关的书籍,我特地去了当地的新华书店,蹲了大半天,回来给大家推荐,适合想学 ...

  8. 斗鱼html5插件音画不同步,音画不同步在直播中怎么解决?看这篇文章就够了!...

    原标题:音画不同步在直播中怎么解决?看这篇文章就够了! 什么是音画不同步? 很容易判断,就是画面和声音不匹配. 为什么会音画不同步? 首先我们要明白一个概念,虽然人的肉眼很容易辨别音画是否同步的,但是 ...

  9. java黄油刀_ButterKnife原理解析看这篇文章就够了

    原标题:ButterKnife原理解析看这篇文章就够了 作者:SheHuan https://juejin.im/post/5acec2b46fb9a028c6761628 ButterKnife 算 ...

  10. Python-Excel 零基础学习xlwings,看这篇文章就够了

    零基础学习xlwings,看这篇文章就够了 | 一起大数据-技术文章心得 (17bigdata.com) 1.xlwings是什么 2.xlwings安装更新与卸载 3.xlwings详细使用 4.案 ...

最新文章

  1. 基于C#的UDP协议的同步实现
  2. 应用内设置语言不重启方法
  3. CSS 样式书写规范
  4. sping拦截器配置顺序影响事务正常运行
  5. 【每周CV论文推荐】 掌握残差网络必读的10多篇文章
  6. 进程调度之最短作业优先
  7. 手把手教会|绘制风控中常用的可视化图表
  8. 蓝桥杯每日真题之货物摆放
  9. Photoshop 操作显示滞后问题及解决方法
  10. graphql java sql_GraphQL标准的Java实现graphql-java概述
  11. 简单高效,分享几款我在使用的效率神器
  12. CISA,CISM,CISSP证书区别及cisp,oscp,osce,che简介
  13. 普中51单片机数码管实例
  14. 鼠标指针乱跑的解决方案
  15. 后氧传感器正常数据_怎么看氧传感器数据流
  16. 【数据库】聊一下数据库的锁机制
  17. rabbitmq reply-code=404, reply-text=NOT_FOUND
  18. 对路径“C:\”的访问被拒绝
  19. Spark Streaming控制每秒消费数据的速度
  20. 老调重弹--自建blog网站

热门文章

  1. 《C++ Primer》7.2节练习
  2. [蓝桥杯2017初赛]九宫幻方-数论+next_permutation枚举
  3. mysql php状态函数_mysql_stat()查询MySQL服务器当前系统状态
  4. mysql查询语句能否让一个字段不显示出来_天天写order by,你知道Mysql底层如何执行吗?
  5. Mat详解-OpenCV
  6. 【NOI2019】 机器人 【区间dp】【插值】【下降幂多项式】【分段函数】
  7. 【NOI2019】回家路线【无后效性dp状态设计】【斜率优化】
  8. King of Range
  9. F - Heron and His Triangle UVALive - 8206
  10. CF1491H Yuezheng Ling and Dynamic Tree(分块)