子查询,又叫做嵌套查询。

将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询。

子查询有两种类型:

一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数;

另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的数据表。

示例:

--创建一个数据库,建立一个部门表格和部门人员表格

Create database gongs --创建一个gongs的数据库
go
use gongs --使用这个数据库
go
create table bm --添加一个bm的表格
(
bbian int primary key not null, --添加部门编号bbian 整数类型,用primary key约束来创建bbian为主键 具有唯一性,not null具有非空性
bname varchar(20),--添加部门名字
bceo varchar(20),--添加部门领导名字
bdh varchar(20),--添加部门电话
)
go
create table ry --添加一个部门人员ry的表格
(
bian int primary key identity(1001,1) not null,--添加人员编号,primary key identity(1001,1)从1开始,每次增长1,添加values时不用添加此列
name varchar(20),--添加部门人员名字
xingbie char(10),--添加xingbie
age int,--添加年龄
sfz varchar(20),--添加身份证号
dh varchar(20),--添加电话号码
bcode int,--部门编号
)
go --向部门表bm中插入数据
insert into bm values(101,'人事部','袁天罡','')
insert into bm values(102,'业务部','李元吉','')
insert into bm values(103,'企划部','公孙胜','')
insert into bm values(104,'客服部','冯程程','') --插入人员列表信息
insert into ry values('袁天罡','男',28,'','',101)
insert into ry values('袁大','男',25,'','',101)
insert into ry values('袁二','女',27,'','',101) insert into ry values('李元吉','男',25,'','',102)
insert into ry values('李元a','女',23,'','',102)
insert into ry values('李元b','女',24,'','',102) insert into ry values('公孙胜','男',28,'','',103)
insert into ry values('公孙a','女',23,'','',103)
insert into ry values('公孙b','女',24,'','',103)
insert into ry values('公孙吉','男',25,'','',103)
insert into ry values('公孙c','男',23,'','',103) insert into ry values('冯程程','女',25,'','',104)
insert into ry values('冯锡范','男',32,'','',104)
insert into ry values('冯斯托洛夫斯基','男',20,'','',104)
go select * from bm
select * from ry --插入一条错误数据 显示一下外键是什么作用
insert into ry values('甲鱼','女',26,'','',108) --显示一下主键的作用
insert into bm values(101,'人事部','钱八','') ---查询人数最多的部门里年龄最大的人的信息
select bcode from ry group by bcode having COUNT(*)>4--查找人数最多的部门
select MAX(age) from ry where bcode=103--查找里面最大年龄
select bian from ry where bcode=103 and age =28--查找这个人的编号
--子查询的方法:
select * from ry where bian=
(select bian from ry where bcode=103 and age =28) --按照年龄从小到大排序,取789号人员的所有信息
select top 3 * from ry where bian not in
(select top 6 bian from ry order by age) order by age --查找所有男同志里面年龄最大的人的信息
select*from ry where bian=
(select top 1 bian from ry where age=
(select MAX(age) from ry where xingbie='男')) --分页查询
select top 5 * from ry
--6~10
select top 5 * from ry where bian not in
(select top 5 bian from ry)
--11-14
select top 5 * from ry where bian not in
(select top 10 bian from ry) --能分多少页
select ceiling(( select COUNT(*)from ry)/5.0) --将人员表显示出来 并且将部门编号变为部门名称显示
select name , xingbie ,(select bname from bm where bm.bbian = ry.bcode) from ry

SQL 数据库 子查询及示例的更多相关文章

  1. SQL 数据库 子查询、主外键

    子查询,又叫做嵌套查询. 将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询. 子查询有两种类型: 一种是只返回一个单值的子查询,这时它可以用在 ...

  2. SQL Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)

    SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...

  3. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  4. 一文让你彻底理解SQL关联子查询

    员工表的主要信息: 需求:检索工资大于同职位的平均工资的员工信息. 直觉的做法 员工多,而相应的职位(如销售员.经理.部门经理等)少,因此首先想到的思路是对职位分组,这样就能分别得到各个职位的平均工资 ...

  5. SQL Fundamentals: 子查询 || 分析函数(PARTITION BY,ORDER BY, WINDOWING)

    SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...

  6. SQL Fundamentals: 子查询 || WHERE,HAVING,FROM,SELECT子句中使用子查询,WITH子句

    SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...

  7. SQL的子查询操作

    对于表中的每一个记录,我们有时候需要提取特殊的或者你需要的记录,要提前做一个表的筛选,之后再对你选出的记录做一个修改,此时你必须使用SQL的子查询操作.如:修改id=5的记录的strContent字段 ...

  8. SQL关联子查询

    SQL关联子查询执行顺序: 1.先取到主查询中的相关数据,一次取一行主查询的数据 2.然后传入子查询,进行子查询 3.最后做主查询where筛选,注意子查询的where条件同样需要加在主查询后 参考: ...

  9. SQL Server 数据库子查询基本语法

    一.SQL子查询语句 1.单行子查询        select ename,deptno,sal        from emp        where deptno=(select deptno ...

随机推荐

  1. AngularJS+ThinkPHP实例教程

    总体思路 thinkphp通过RESTful方式提供数据给angular,前端(包括模板页面)全部由angular来接管. 示例 实现一个用户管理模块,走通增删改查4个操作,通过该示例,演示如何在th ...

  2. 【python】python中__name__的使用

    Py1.py #!/usr/bin/env python def test(): print '__name__ = ',__name__ if __name__ == '__main__': tes ...

  3. 安装Linux软件时没有图形界面的问题

    Q: 现在Linux下的软件有很多也采用图形界面安装了:但有时候我们发现启动安装程序时本该出现图形界面时却出现了文本界面. A: 检查常用的图形函数库(最主要的自然是gtk, qt)是否已安装.尤其是 ...

  4. sublime快捷键功能记录

    shift+tab  向前缩进 ctrl+shift+k  删除当前行 菜单栏 view--side bar 选项 控制左侧文件展示视图 菜单栏“view”——“hideMiniMap” or &qu ...

  5. [转]Java 运算符的优先级

    Java 运算符的优先级(从高到低) 优先级 描述 运算符 1 括号 ().[] 2 正负号 +.- 3 自增自减,非 ++.--.! 4 乘除,取余 *./.% 5 加减 +.- 6 移位运算 &l ...

  6. nginx二进制编译-启动脚本编写

    首先先把这个文件上传到root目录下,并解压 #tar zxf nginx-1.11.2.tar.gz 写脚本 # vi nginx-running.sh 内容如下 #!/bin/bash #chkc ...

  7. 第10章 线程控制(5)_多线程下的fork

    6. 线程和fork 6.1 多线程下的fork (1)历史包袱 ①fork与多线程的协作性很差,这是POSIX系统操作系统的历史包袱. ②长期以来程序都是单线程的,fork运行正常,但引入线程这后, ...

  8. 【Linux_Unix系统编程】chapter5 深入探究文件IO

    Chapter5 深入探究文件I/O 本章节将介绍另一个与文件操作相关的系统调用:多用途的fcntl(),并展示其应用之一读取和设置打开文件的状态标志. 5.1 原子操作和竞争条件 所有系统调用都是以 ...

  9. 在docker中运行kong和kong dashboard

    一.制作alpine版的kong镜像 https://github.com/Kong/docker-kong/tree/d4cec3dc46c780a916a40963309554ca81da2b46 ...

  10. sencha touch在华为emotion ui 2.0自带浏览器中圆角溢出的bug

    在华为emotion ui 2.0自带的浏览器中,给部分组件设置了圆角后会发现背景仍然是方的,内部边框是圆的, 对于这种bug, 只需在对应的设置圆角的css样式中加入 background-clip ...