ylb:SQL 表的高级查询-多表连接和子查询

ylbtech-SQL Server: SQL Server-表的高级查询-多表连接和子查询

 SQL Server 表的高级查询-多表连接和子查询。

1,ylb:表的高级查询-多表连接和子查询 返回顶部
--================================

-- ylb:表的高级查询-  多表连接和子查询

--    pubs库的练习

-- 17:18 2011/12/13

--================================

use pubs

go

select * from authors

select * from titles

--select * from titleauthor

select * from publishers

--1,查看出版社名称,书名称

go

--2,查看出版社名称,出版社出书预付款总额

select pub_name,SUM(advance) '预付款总额' from publishers p

inner join titles t on p.pub_id=t.pub_id

group by pub_name

go

--3,查看出版社名称,出版社出书预付款最大值,单价最小值

select pub_name,max(advance) '付款最大值',MIN(price) '单价最小值' from publishers p

inner join titles t on p.pub_id=t.pub_id

group by pub_name

go

--4,查看出版社编号,出版社名称,书名称,书单价,作者编号

select * from publishers p

inner join titles t on p.pub_id=t.pub_id

inner join titleauthor ta on t.title_id=ta.title_id

go

--5,查看出版社编号,书总价,书最高价格,作者总数

---5分析

--这本书(TC7777)有两个作者(472-27-2349,672-71-3249)

--这个作者(486-29-1786) 出了两本书(PC9999,PS7777)



--5_1,错的

select p.pub_id,SUM(price),MAX(price),count(title_id) from publishers p

inner join titles t on p.pub_id=t.pub_id

group by p.pub_id

go

--5_2,正确的

select p.pub_id,SUM(price),MAX(price),count(distinct au_id) from publishers p

inner join titles t on p.pub_id=t.pub_id

inner join titleauthor ta on t.title_id=ta.title_id

group by p.pub_id

go



--6,查看出版社编号,书总价,书最高价格,要求作者总数大于9的信息

select pub_id,SUM(price),MAX(price) from titles t 

inner join titleauthor ta on t.title_id=ta.title_id

group by pub_id

having count(distinct au_id)>9

go



--7,查找书名称,书编号,作者编号

 

 go

--8,查找书名称,作者数量

select title,COUNT(au_id) '作者数量' from titles t

inner join titleauthor ta on t.title_id=ta.title_id

group by title

go

--9,查找商业书的所有书名称,作者数量, 

select title,COUNT(au_id) '作者数量' from titles t

inner join titleauthor ta on t.title_id=ta.title_id

where type='business'

group by title

go

--10,查找商业书的所有作者姓名,作者编号,作者城市

select * from titles t

inner join titleauthor ta on t.title_id=ta.title_id

inner join authors a on ta.au_id=a.au_id

where type='business'

go

--11,在CA州的作者出的书,书名,书单价总和,

--书最高预付款,书的最低价格。

select title,SUM(price),MAX(advance),MIN(price) from titles t

inner join titleauthor ta on t.title_id=ta.title_id

inner join authors a on ta.au_id=a.au_id

where state='CA'

group by title

go

--12,和商店的同一州作者出的书,书名,书单价总和,

--书最高预付款,书的最低价格。

--12_1,

select au_id from authors a

where state in(select state from stores where state=a.state)

go

--12_2,

select distinct title_id from titleauthor ta

where au_id in(select au_id from authors a

where state in(select state from stores where state=a.state))

go

--12_3,

select * from titles t

where title_id in(select distinct title_id from titleauthor ta

where au_id in(select au_id from authors a

where state in(select state from stores where state=a.state)))

go

--12_4,结论

select title,SUM(price),MAX(advance),MIN(price) from titles t

where title_id in(select distinct title_id from titleauthor ta

where au_id in(select au_id from authors a

where state in(select state from stores where state=a.state)))

group by title

go

--13,和商店的同一州作者出的书,书名,书单价总和,

--书最高预付款,书的最低价格,要

--求书必须大于所有商业书的价格。

--13_1,

select * from titles 

where price>(select max(price) from titles where type='business')

go

--13_2,总结

select title,SUM(price),MAX(advance),MIN(price) from titles t

where title_id in(select distinct title_id from titleauthor ta

where au_id in(select au_id from authors a

where state in(select state from stores where state=a.state)))

and price>(select max(price) from titles where type='business')

group by title

go

--SQL脚本总结

--1,如果有条件“先做条件”

--2,多列先链表,再做条件

--3, 先做条件后排序

--3,分组常和聚合函数在一起。

--4,

--5,子查询,如果有已知条件用嵌套子查询,否则就是相关子查询。



--前(where 列条件)group by 后(having 组条件)



select * from titles

where type='business'

order by title_id desc
warn 作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

你可能感兴趣的:(sql)