sqlserver 子查询

--产品id  产品名 单价
select productid,productname,unitprice from products--产品表
--定单编号  产品id  单价  数量
select orderid,productid,unitprice,quantity from [order details]--定单详细表
--定章编号   客户id  货运方式   定单日期
select orderid,customerid,shipname,orderdate from orders--定单表

--1.查找比某一产品贵的产品,并显示产品的所有信息?
--方法1>编程方式
declare @price money
select @price=unitprice from products where productname='Chang'
select  productid,productname,unitprice from products where unitprice>@price
--方法2>一般子查询,主要应用子查询的结果做为其它sql语句的条件
--以下查询,返回一个unitprice列所对应的值
--select unitprice from products where productname='Chang'
select  productid,productname,unitprice from products 
where unitprice>(
select unitprice from products where productname='Chang')

update products set unitprice=unitprice*10
where unitprice>(
select unitprice from products where productname='Chang'
)

--2.查询出销售过50次及以上的产品
--[order details]表中可以得出每件产品销售的次数
--products:表中得到产品信息
--方式1>关连查询
--1.1:关连
select p.productid,p.productname,p.unitprice,o.orderid from products p
inner join [order details] o on p.productid=o.productid
--1.2:分组 count(*):统计符合条件的记录数;分组之后功能为统计组内成员数
select p.productid,p.productname,count(*)
 from products p
inner join [order details] o on p.productid=o.productid
group by p.productid,p.productname
having count(*)>50
--方式2>in子查询
--查询结果单列多行,相当于一个集合
--select productid from [order details] group by productid having count(*)>50
--in 对应集合查询
--select productid,productname,unitprice from products
--where productid in (1,4,5)

select productid,productname,unitprice from products
where productid in (
select productid from [order details] group by productid having count(*)>50
)

--3.查询没有下过定单的客户
--not in子查询
select * from customers 
select customerid from orders group by customerid --已下单的客户
select * from customers where customerid not in
(select customerid from orders group by customerid)

--4.应用:分页查询
declare @pageSize int --每页显示多少条记录
declare @pageNo int --第几页
set @pageSize=5
set @pageNo=2
select top (@pageSize) productid,productname,unitprice from products
where productid not in
(select top ((@pageNo-1)*@pageSize) productid from products)

 

你可能感兴趣的:(sqlserver)