SQL Server2008子查询举例

时间:2022-10-31 00:26:15

 1。由订单信息表(TOrder)中,找出最早订单和最晚订单,并按早晚进行排序。(这里默认用升序)

(PS:比较测试中的子查询)

 SELECT * FROM TOrder

    WHERE orderdate=(SELECT MIN(orderdate) FROM TOrder)

    OR orderdate=(SELECT MAX(orderdate) FROM TOrder)

    ORDER BY orderdate

SQL Server2008子查询举例 

 

2.找出订货量大于10的货品信息。

(PS:集合成员中的子查询)

 SELECT * FROMTGoods

 WHERE id IN

 (SELECT gid FROMTOrder o1 WHERE (SELECT SUM(quantity) FROM TOrder o2 WHEREo1.gid=o2.gid)>10)

SQL Server2008子查询举例


(1)由订单信息表中得到订货数量大于10的货品编码,即:

SELECT ordernum FROM TOrder as a WHERE

(SELECT SUM(quantity) FROM TOrder as b WHERE a.ordernum=b.ordernum)>10

SQL Server2008子查询举例

再按照这里选出的货品编码,由货品信息表中选出这些货品的信息,有如下的SQL语句。

 SELECT * FROM TOrder WHERE ordernum IN

 (SELECT ordernum FROM TOrder as a WHERE

 (SELECT SUM(quantity) FROM TOrder as b WHERE a.ordernum=b.ordernum)>10 )

SQL Server2008子查询举例

3.找出有销售业绩的销售人员信息。

(PS:存在性测试中的子查询)

SELECT * FROMTEmployee AS a  WHERE EXISTS

(SELECT id FROMTOrder AS b WHERE a.id=b.eid)

SQL Server2008子查询举例

4.查询每种货品订货量大于最小一次订货量的订单信息。

(PS:批量比较测试中的子查询)

(1)大于最小一次订货量,也就是去年该种货品订货量最小一次的订单。有如下的SQL语句。

(PS:使用ANY关键字的比较测试)

SELECT * FROMTOrder AS a WHERE quantity>ANY

SELECT quantity FROM TOrder AS b WHERE a.gid=b.gid)

或:

SELECT * FROM TOrder o1 WHERE quantity>ANY

(SELECT quantity FROM TOrder o2 WHERE o1.gid=o2.gid)  

(2)查询每种货品订货量最大的一次订单信息。

选择每种货品订货量最大的订单。有如下的SQL语句。

(PS:使用ALL关键字的比较测试)

SELECT * FROM TOrder AS a WHERE quantity>=ALL

(SELECT quantity FROM TOrder AS b WHERE a.gid=b.gid)

或:

SELECT * FROM TOrder o1 WHERE quantity>=ALL

(SELECT quantity FROM TOrder o2 WHERE o1.gid=o2.gid)

SQL Server2008子查询举例

5.在SQL Server ManagementStudio中,往“上海客户”表中添加客户信息,然后通过子查询语句将客户信息一次性添加到“客户信息”表中。

上海客户表是通过SELECT…INTO语句建立一个空表,它的结构与“客户信息”表相同,所以数据是兼容的。有如下的SQL语句。

(PS:使用子查询向表中添加多条记录)

通过SELECT…INTO语句建立一个空表:

 SELECT *

 INTO TshCustomer

 FROM TCustomer

  WHERE address LIKE '上海%'


 INSERT TCustomer SELECT * FROM TshCustomer


  --查看添加结果

  SELECT * FROM TCustomer