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 server高级查询,看这篇文章就够了相关推荐
- sql server高级查询及更新操作一
sql server高级查询及更新操作一 题目要求 实现代码 题目要求 一.将素材中的"学生管理"数据库附加到SQL SERVER中,完成以下操作: 班级信息(班级编号 班级名称 ...
- 好多人都说存储过程很难?认真看这篇文章就够了
何为存储过程? 存储过程是在数据库管理系统中保存的.预先编译的并能实现某种功能的sql程序,说直白点,java知道吧?和java的方法一样. 每遇到一个新的知识点时,我们都会看看它的优点,从而加深对它 ...
- Vue开发入门看这篇文章就够了
摘要: 很多值得了解的细节. 原文:Vue开发看这篇文章就够了 作者:Random Fundebug经授权转载,版权归原作者所有. 介绍 Vue 中文网 Vue github Vue.js 是一套构建 ...
- 万字心得,PMP学习考试那些事儿,看这篇文章就够了
声明:文章为原创,首发于知乎,链接:万字长文!PMP考试那些事儿,看这篇文章就够了 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/524966002 以下内 ...
- Android 8.0新特性(看这篇文章就够了)
2019独角兽企业重金招聘Python工程师标准>>> 在刚结束不久的谷歌 I/O2017开发者大会上发布的第二个Android O(安卓8.0)开发者预览,并且向普通用户开放了第二 ...
- 使用分层网络模型的两个优点是什么_从零开始学网络|搞懂OSI参考模型和TCP/IP分层模型,看这篇文章就够了...
从零开始学网络|搞懂OSI参考模型和TCP/IP分层模型,看这篇文章就够了mp.weixin.qq.com 前言 今天和大家一起谈谈"网络",之前写的文章可能不太通俗易懂,有人就 ...
- python入门书籍推荐,看这篇文章就够,请!
python入门书籍推荐,看这篇文章就够,请! 事实上,有关python的书籍很多很多,就当当网就有50000件和python有关的书籍,我特地去了当地的新华书店,蹲了大半天,回来给大家推荐,适合想学 ...
- 斗鱼html5插件音画不同步,音画不同步在直播中怎么解决?看这篇文章就够了!...
原标题:音画不同步在直播中怎么解决?看这篇文章就够了! 什么是音画不同步? 很容易判断,就是画面和声音不匹配. 为什么会音画不同步? 首先我们要明白一个概念,虽然人的肉眼很容易辨别音画是否同步的,但是 ...
- java黄油刀_ButterKnife原理解析看这篇文章就够了
原标题:ButterKnife原理解析看这篇文章就够了 作者:SheHuan https://juejin.im/post/5acec2b46fb9a028c6761628 ButterKnife 算 ...
- Python-Excel 零基础学习xlwings,看这篇文章就够了
零基础学习xlwings,看这篇文章就够了 | 一起大数据-技术文章心得 (17bigdata.com) 1.xlwings是什么 2.xlwings安装更新与卸载 3.xlwings详细使用 4.案 ...
最新文章
- 基于C#的UDP协议的同步实现
- 应用内设置语言不重启方法
- CSS 样式书写规范
- sping拦截器配置顺序影响事务正常运行
- 【每周CV论文推荐】 掌握残差网络必读的10多篇文章
- 进程调度之最短作业优先
- 手把手教会|绘制风控中常用的可视化图表
- 蓝桥杯每日真题之货物摆放
- Photoshop 操作显示滞后问题及解决方法
- graphql java sql_GraphQL标准的Java实现graphql-java概述
- 简单高效,分享几款我在使用的效率神器
- CISA,CISM,CISSP证书区别及cisp,oscp,osce,che简介
- 普中51单片机数码管实例
- 鼠标指针乱跑的解决方案
- 后氧传感器正常数据_怎么看氧传感器数据流
- 【数据库】聊一下数据库的锁机制
- rabbitmq reply-code=404, reply-text=NOT_FOUND
- 对路径“C:\”的访问被拒绝
- Spark Streaming控制每秒消费数据的速度
- 老调重弹--自建blog网站
热门文章
- 《C++ Primer》7.2节练习
- [蓝桥杯2017初赛]九宫幻方-数论+next_permutation枚举
- mysql php状态函数_mysql_stat()查询MySQL服务器当前系统状态
- mysql查询语句能否让一个字段不显示出来_天天写order by,你知道Mysql底层如何执行吗?
- Mat详解-OpenCV
- 【NOI2019】 机器人 【区间dp】【插值】【下降幂多项式】【分段函数】
- 【NOI2019】回家路线【无后效性dp状态设计】【斜率优化】
- King of Range
- F - Heron and His Triangle UVALive - 8206
- CF1491H Yuezheng Ling and Dynamic Tree(分块)