多表查询(嵌套查询)

----如果查询涉及到多张表,选用嵌套查询还是连接查询?
--1.如果查询嵌套和连接都能实现,嵌套查询效率高
--2.在很多查询中,只能用连接嵌套无法实现功能(查询的内容在多个表中)

 

---=====嵌套查询 =================
---查询出陈鹏借了哪些书

--Student--SNO--->Borrowbook-----BookId---->Book
Select BookName
From LibraryDB.dbo.Book
Where BookId In
(
    Select BookId 
    From LibraryDB.dbo.BorrowBook
    Where SNO =
    (
        Select SNO 
        From LibraryDB.dbo.Student 
        Where SName='陈鹏'
    )
)
---查询出借的最多的那本书的作者

--条件: BorrowBook ---BookId--->Book----AuthorID---->AuthorName

Select AuthorName
From LibraryDB.dbo.Author
Where AuthorID In
(
    Select BookAuthor
    From LibraryDB.dbo.Book
    Where BookId In
    (
        Select BookId 
        From LibraryDB.dbo.borrowBook 
        Group by BookId 
        Having count(*)=
        (
            Select Top 1 Count(*)
            from LibraryDB.dbo.BorrowBook
            Group by BookId 
            Order by Count(*) DESC
        )
    )
)

---查询出计算机书中借的最多的那本书的作者的电话
Select AuthorTelNo
From Author
Where AuthorID IN
(
    Select BookAuthor
    from LibraryDB.dbo.Book
    Where BookID in
    (
        Select BookId 
        From (
            Select T3.BookID As bookId

           from LibraryDB.dbo.BookType As T1 Inner Join LibraryDB.dbo.Book As T2 On T1.ID=T2.BookTypeID
                                                                            Inner Join LibraryDB.dbo.BorrowBook As T3 on T2.BookID=T3.BookID
            where T1.TypeName='计算机'
        ) AS T5
        Group by BookId 
        Having count(*)=
        (
            Select Top 1 count(*)
            From 
            (
                Select T3.BookID As bookId

               from LibraryDB.dbo.BookType As T1 Inner Join LibraryDB.dbo.Book As T2 On T1.ID=T2.BookTypeID
                                                                                Inner Join LibraryDB.dbo.BorrowBook As T3 on T2.BookID=T3.BookID
                where T1.TypeName='计算机'
            ) AS T4
            Group by bookId
            Order by Count(*) DESC
        )
    )
)


----In,Exists,Any,some,All
---查询出借过书的学员姓名

Select SNo,SName 
from LibraryDB.dbo.Student
Where SNo = any
(
    Select SNo  
    From LibraryDb.dbo.BorrowBook
)

---------------------------------------------

Select SNo,SName 
From LibraryDB.dbo.Student 
Where Exists
(
    Select
    From LibraryDB.dbo.BorrowBook
    Where LibraryDB.dbo.Student.SNO=LibraryDB.dbo.BorrowBook.SNO
)

--查询出年龄最大学生学号和姓名 

Select
from LibraryDb.dbo.Student
where SAGE>=All
(
    Select IsNull(Sage,0) 
    from LibraryDB.dbo.student 
)
 

--统计出每一类书中的最高的价格

  Select TypeName AS '类别名称',MaxPrice As '最高价格'
  From 
    (
          Select BookTypeId,max(Bookprice) As 'MaxPrice'
          from LibraryDB.dbo.Book 
          Group By BookTypeID
      ) AS T1,LibraryDB.dbo.BookType AS T2
  Where T1.BookTypeID=T2.ID

--查询出借的最多的书的ID号
Select BookName 
From LibraryDB.dbo.Book
Where BookId IN 
(
    Select BookId
    from LibraryDB.dbo.BorrowBook
    Group by BookId
    Having Count(*)= 
    (
        Select Top 1 Count(*)
        from LibraryDB.dbo.BorrowBook
        Group by BookId 
        order By  Count(*) DESC
    )
)
 

-- 统计出借书多于两本的学生姓名以及数量,按照数量的降序排列
 ---连接查询

 Select T1.SNO As '学号',SName As '姓名',BorrowNumber As '借书数量'
 From 
 (
     Select SNO,count(*) As BorrowNumber
     From LibraryDB.dbo.BorrowBook
     Group by SNO 
     Having Count(*)>2
 ) AS T1, LibraryDB.dbo.Student AS T2
 Where T1.SNO=T2.SNO 

---统计出第一季度洗衣机销售总量大于12000的区域,按照销量的降序排列

Select PArea As '区域',Pname AS '名称',sum(PSaleNO) As '销量'
from LibraryDB.dbo.SalesTable
Where PName='洗衣机'   ---在分组之前筛选记录
Group by PArea,Pname
Having sum(PSaleNO)>12000   ---对于分组之后的结果进行筛选 
Order by sum(PSaleNO) DESC


----RollUp ,cube  单字段----

Select IsNULL(PArea,'合计:') ,Sum(PSaleNo)
from LibraryDB.dbo.SalesTable
Group by PArea with rollup


Select IsNULL(PArea,'合计:') ,Sum(PSaleNo)
from LibraryDB.dbo.SalesTable
Group by PArea with cube

--结论:如果分组的时候只有一个字段,rollUp和Cube功能一样,对分组的结果做一个累加

-----Rollup和Cube多字段------

Select PArea,PMonth ,Sum(PSaleNo)
from LibraryDB.dbo.SalesTable
Group by PArea,PMonth with rollup

Select PArea,PMonth ,Sum(PSaleNo)
from LibraryDB.dbo.SalesTable
Group by PArea,PMonth with cube

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值