快捷搜索:

【SqlServer系列】子查询

来源:http://www.shanghai-sourcing.com 作者:金沙澳门官网55网址 人气:150 发布时间:2019-10-24
摘要:1   概述 1.1 已发布【SqlServer系列】文章 【SqlServer连串】SQLSE福睿斯VELX570安装教程  【SqlServer类别】数据库三大范式 【SqlServer类别】表单查询 【SqlServer系列】表连接 【SqlServer系列】子

1   概述

1.1  已发布【SqlServer系列】文章

  • 【SqlServer连串】SQLSE福睿斯VELX570安装教程 

  • 【SqlServer类别】数据库三大范式

  • 【SqlServer类别】表单查询
  • 【SqlServer系列】表连接
  • 【SqlServer系列】子查询
  • 【SqlServer系列】子查询。【SqlServer体系】远程访问
  • 【SqlServer类别】集结运算

1.2  本篇作品内容概要

   子查询和表连接,主要是对准两张及以上表之间关系关系进展查询。子查询,按是还是不是单身划分,分为独立子查询和相关子查询;按内部查询再次回到是还是不是为单值,分为单值子查询(注意:应精通单值子查询和标量子查询关系)和多值子查询;如下表格内容为按子查询是或不是单身来划分的。

图片 1

1.3 本章测量试验样表和sql

工作场景:

有两张表,分别为顾客表(客户ID,顾客姓名,客商公司),即Customers(CustID,CustName,CustCompany)和客商订单表(顾客ID,订单ID,订单日期),即Orders(CustID,OrderID,OrderDate),两张表经过客户ID(CustID)举行关联。

图片 2

SQL语句分别如下:

(1)成立子查询DB:WJM_CHildQuery

1 --创建子查询数据库WJM_ChildQuery
2 IF DB_ID('WJM_CHildQuery') IS NOT NULL
3    DROP DATABASE WJM_ChildQuery
4    GO
5    CREATE DATABASE WJM_ChildQuery

(2)创立Customers表并初阶化

 1 USE WJM_CHildQuery
 2 
 3 --CREATE TABLE Customers
 4 CREATE TABLE Customers
 5 (
 6    CustID INT IDENTITY(1,1)  NOT NULL PRIMARY KEY,  --顾客ID
 7    CustName  VARCHAR(50),--顾客姓名
 8    CustCompany VARCHAR(50) --顾客公司
 9 )
10 
11 --Initial Customers
12 
13 INSERT INTO Customers VALUES('赵武','A')
14 INSERT INTO Customers VALUES('刘杨','B')
15 INSERT INTO Customers VALUES('张永为','C')
16 INSERT INTO Customers VALUES('李龙飞','D')
17 INSERT INTO Customers VALUES('邓华','E')
18 INSERT INTO Customers VALUES('张涛明','F')

【SqlServer系列】子查询。实行查询语句:

1 SELECT *
2 FROM Customers

询问结果为:

图片 3

【SqlServer系列】子查询。 (3)创设Orders表并初叶化

 1 USE WJM_CHildQuery
 2 
 3 CREATE TABLE Orders
 4 (
 5   OrderID INT IDENTITY(1,1) PRIMARY KEY NOT NULL, --订单ID
 6   CustID INT NOT NULL,  --顾客ID
 7   OrderDate DATE --订单日期
 8 ) 
 9 
10 --Initial Orders
11 
12 INSERT INTO Orders VALUES(1,'2015-06-25')
13 INSERT INTO Orders VALUES(2,'2017-06-03')
14 INSERT INTO Orders VALUES(3,'2016-04-25')
15 INSERT INTO Orders VALUES(4,'2016-03-04')
16 INSERT INTO Orders VALUES(5,'2013-03-04')
17 INSERT INTO Orders VALUES(6,'2017-01-01')
18 INSERT INTO Orders VALUES(2,'2016-08-25')
19 INSERT INTO Orders VALUES(5,'2016-12-25')

举行查询语句:

1 SELECT *
2 FROM Orders

查询结果为:

图片 4

2  独立子查询

2.1  独立标量子查询

主题材料:请用三种格局重回Orders表中的订单ID最大的订单消息。

方法生龙活虎:标量单值子查询

1 --返回Orders表中订单ID最大的记录
2 SELECT OutQueryOrders.OrderID,OutQueryOrders.CustID,YEAR(OutQueryOrders.OrderDate) AS OrderDateYear
3 FROM Orders AS OutQueryOrders
4 WHERE OutQueryOrders.OrderID=
5 (
6    SELECT MAX(InnerQueryOrders.OrderID)
7    FROM Orders InnerQueryOrders
8 )

询问结果:

图片 5

结果深入分析

a.期待结果

图片 6

b.查询语句深入分析

图片 7

措施二:选择变量

1 DECLARE @MaxOrderID AS INT=
2 (
3    SELECT MAX(OD.OrderID)
4    FROM Orders AS OD
5 )
6 
7 SELECT *
8 FROM Orders 
9 WHERE Orders.OrderID=@MaxOrderID

询问结果:

图片 8

结果深入分析:

a.期待结果

图片 9

 

b.查询语句分析

图片 10

2.2  独立子查询

难题:重临订单表中订单ID>5的开支者新闻

1 --返回订单表中订单ID>5的顾客信息
2 SELECT C.CustID,C.CustName,C.CustCompany
3 FROM Customers AS C
4 WHERE C.CustID  IN
5 (
6     SELECT Orders.CustID
7     FROM Orders
8     WHERE Orders.OrderID>5
9 )

询问结果:

图片 11

结果解析:

a.期待结果

图片 12

b.查询语句深入分析

图片 13

2.3  小结

a.每个子查询均有所属的外部查询;
b.独立子查询独立于其外部查询;
c.可以把独立子查询单独运行;
d.独立子查询在执行外部查询之前先执行一次,接着外部查询再使用子查询的结果继续进行查询;
e.标量子查询只返回单个值,不管其是否是独立子查询;
f.标量子查询可以出现在外部查询中期望使用单个值的任何地方(WHERE、SELECT等)
g.算术运算符(>,>=,<,<=,!=,=)其后只能为单值;
h.如果标量子查询没有返回任何值,其结果就转换为NULL,和NULL进行比较得到的是UNKNOWN,查询过滤器不会返回任何让过滤表达式计算结果为UNKOWN的行;
i.多值子查询,一般与谓词连用,如IN,NOT IN,EXISTS等;
j.在子查询中,一般单值和多值是混合用,如常见与BETWEEN......AND.....连用等;

3   相关子查询

3.1  SQL示例及示范结果

难题:在订单表Orders表中,为各类顾客再次来到其订单ID最大的订单

 1 --为每个客户返回其订单ID最大的订单
 2 
 3 SELECT OutQueryOrders.OrderID,OutQueryOrders.CustID,YEAR(OutQueryOrders.OrderDate) AS OrderDateYear
 4 FROM Orders AS OutQueryOrders
 5 WHERE OutQueryOrders.OrderID=
 6 (
 7    SELECT MAX(InnerQueryOrders.OrderID)
 8    FROM Orders InnerQueryOrders
 9    WHERE OutQueryOrders.CustID=InnerQueryOrders.CustID
10 )

查询结果:

图片 14

3.2  示例结果剖判

a.期待结果

图片 15

 

b.查询语句解析

图片 16

3.3  小结

a.相关子查询内部查询依赖于外部查询,不能独立运行;
b.相关子查询内部查询中,受限制于外部查询的条件,如上述例子中的WHERE之后的条件;
c.在逻辑上,子查询会为每个外部查询单独计算一次;
d.多值子查询,一般与谓词连用,如IN,NOT IN,EXISTS等;
e.在子查询中,一般单值和多值是混合用,如常见与BETWEEN......AND.....连用等;

4   子查询拓宽

 关于子查询,还会有众多内容,如再次回到前后记录查询,一而再聚合,行为不当等,但那有的内容属于子查询的中高档部分,筹划放在【SqlServer种类】中高端部分来与大家大饱眼福。

5   参考文献

【01】Microsoft  SqlServer 二零一零本领内情:T-SQL 语言基础

【02】Microsoft  SqlServer 二零一零本领内部情状:T-SQL 查询

6   版权

 

  • 多谢您的翻阅,若有白玉微瑕,应接指教,同盟学习、协同升高。
  • 博主网站:
  • 极少一些小说利用读书、参谋、援引、抄袭、复制和粘贴等三种办法组成而成的,抢先二分一为原创。
  • 如您心爱,麻烦推荐一下;如你有新主张,应接提议,邮箱:二〇一六177728@qq.com。
  • 能够转发该博客,但必须著名博客来源。

本文由金沙澳门官网55网址发布于金沙澳门官网55网址,转载请注明出处:【SqlServer系列】子查询

关键词:

最火资讯