一、分组查询-对比
WHERE子句:从数据源中去掉不符合其搜索条件的数据
GROUP BY子句:搜集数据行到各个组中,统计函数为各个组计算统计值
HAVING子句 :
去掉不符合分组搜索条件的各组数据行
--1.having与group合作能够先分组后条件
SELECT publisherNo,SUM(price) 同一出版社的所有书价格之和大于1六十的
FROM Book
GROUP BY publisherNo
HAVING SUM(price)>60
--2.而where只能先条件筛选再分组
SELECT publisherNo,price
FROM Book
WHERE price>30
GROUP BY publisherNo,price
having后可以跟聚合语句喔。
二、多表连接
1.内连接:
使用比较运算符进行多表间某(些)列数据的比较操作,查找出这些表中与连接条件相匹配的数据行。
表一:OrderMaster
表二:Employee
(1)等值连接:
--把saleNo与employeeNo相等的连接
SELECT orderNo,employeeNo,employeeName,sex,orderSum,salerNo
FROM OrderMaster INNER JOIN Employee
ON OrderMaster.salerNo=Employee.employeeNo
WHERE orderSum>20000
(2)不等值连接:
这里普及一个知识:运算符包括>、<、!>、!<和<>、!=。依次是大于、小于、不大于、不小于、不等于、不等于
这个就不写了具体无非是:
表1.某某<>表2.某某
(3)自然连接:sqlserver中代表自然连接的就是等值连接(不存在natural join关键字),其它sql语句是含有自然连接: natural join关键字的
2.外连接:
通过比较运算符把多张表的数据连接在一起,与内连接不同点是,外连接不只列出与连接条件相匹配的行,而且还能列出左表、右表或两个表中所有符合搜索条件,不匹配的数据行。
想要列出以符合左表为搜索条件的,使用左连接
想要列出以符合右表为搜索条件的,使用右连接
可以看到同样的查询使用左右外连接的结果是不一样的,使用右连接时,左表(Borrow借书)如果没有与左表匹配的书编号,则说明没有人借,所以readerNo,borrowDate,bookName都为NULL
全外连接:FULL JOIN
如果左边或右边没有匹配行,则左部分或右部分显示NULL
由于我的书库表里面啥书都有,所以不存在说别人借的书是我这没有的,因此跟右外连接一样的结果,这里就不截图了。