链接查询与分组查询

连接查询

内连接查询是典型的、常用的连接查询,根据两个表共同的列进行匹配,特别是两个表存在的外键关系通常使用内连接查询。

内连接查询会使用 "=" "<>" 等运算判断数据值是否相等

内连接查询使用inner join...on关键字或者where子句来进行表之间的关联

1.使用INNER JOIN...ON关键字

可以把两个符合连接条件的数据抽取出来形成第3个表。通过inner join...on关键字生成的表数据通常会比两个园表中任一表的数据量少。或者等于数据量较小的那个表数据量

使用inner join... on关键字实现查询图书信息和图书分类名称的T-SQL语句如下(A.B.C代表别名(AS可以省略))

select c.categoryName, b.Bname, B.bprice, B.bAuthor
from bookInfo AS b
inner join bookcategory As c on b.cid = c.Categorycode

语句参数说明如下。

inner join:用来连接两个表

inner:可以省略

on:用来设置两个表之间的关联条件

AS:指定表的"别名"。查询的列名在用到的两个或多个表中不重复,则对这一列的引用不必用表面限定

注意:内连接查询所返回的查询结果是从两个以上表的组合中筛选出符合连接条件的数据,如果数据无法满足连接条件,则将其忽略。在内连接查询中,参与连接的表的地位是平等的

2.在where子句中指定连接条件

使用where子句也可以实现连接,在from后面罗列要连接查询的表面以'',''分隔,然后在where子句中规定连接过滤条件

查询图书分类名称、图书名称、图书价格和图书作者的T-SQL语句示例如下

select bookcategory.CategorgName, bookInfo.BName, bookInfo,BPrice, bookInfo.BAuthor
from BookInfo, bookCategory
where BookInfo.CId = bookcategory.CategorCode

在上述语句中,from后面紧跟了两个表名,在查询列中用"表名,列名"来区分各表的列,然后在where子句规定连接条件

外连接查询

外连接查询可分为主表和从表,主表的数据会被完全显示,而从表中只显示满足连接条件的数据。这样,外连接查询的数据一般会比主表和从表中数据量最小的表中的数据多

外连接查询根据连接反向不同,可以划分为左连接、右连接和全连接(从左至右)

left join..on                  right join..on                    full join...on

如果左外连接left join...on 则位于from关键字左端的表为主表,另一端为从表。若是外连接,则反之。若是完全连接,则没有主从表关系

1.左外连接查询

左外连接查询使用left join...on或left outer join..on关键字进行表与表之间的关联若左表的某行在右表中没有匹配记录,则在相关的结果集行中右表所有选择列均为null

图书管理系统不仅要统计每位用户的借书情况,还要显示没有借过图书的用户。以用户信息为主表、图书借出信息表为从表(A.B.C代表别名(AS可以省略))

select U.UserName, B.BorrowDate, B.BId From UserInfo AS U 
left outer join BorrowInfo AS B on B.UserID = U.UserId

2.右外连接查询

右外连接查询使用 right join...on或 right outer join...on关键字,若右表中存在左表无法匹配的记录,则以null值填充

select U.UserName,B.BorrowDate,B.Bid from UserInfo As U 
right outer join BorrowInfo AS B on B.UserId = U.UserId

3.完全连接查询

完全连接查询使用full join..on或 full outer join..on关键字 完全连接查询会从两个连接表中获取数据。若右对应关系,则会填上对应数据;否则,以null值填充。完全连接表生成的数据量会比两个连接表生成的数据量大

select U.UserName, B.borrowDate,B.Bid from UserInfo As U 
full join BorrowInfo As B on b.UserId = U.UserId

分组查询

聚合函数

函数名称说明
SUM返回表达式中所有数值的和
AVG返回表达式中所有数值的平均值
MIN返回表达式中的最小值
MAX返回表达式中最大值
COUNT返回查询记录的总个数
DISTINCT返回一个集合,并从指定的集合中删除重复项

1.SUM函数

SUM函数用于返回表达式中所有数值的和。SUM函数只能用于数字列,若参与计算记录在该列上的值为空值(NULL)则该条记录在计算中忽略

使用SUM函数统计图书分类编号为1的所有图书总价

select SUM(BPrice) AS 图书总价 From bookInfo where CId = 1

注意:SUM函数返回的结果是一个数值,因此它不能直接与可能返回多行的列一起使用。

select SYM(BPrice) AS 图书总价,BName AS 图书名称 From BookInfo where CId = 1

返回错误:选择列表中的列'BookInfo.BName'无效 ,因为该列没有包含在聚合函数或group by 子句中

2.AVG函数

AVG函数用于返回表达式中所有数值的平均值,该列值为空(NULL)的记录将被忽略

使用AVG函数统计图书分类编号为1的所有图书价格的平均值

select AVG(BPrice) AS 平均价格 from BookInfo where CId = 1

3.MIN函数

MIN函数返回表达式中的最小值,出现空值,则记录将被忽略。MIN函数可以用于数值、字符串和日期类型的数据列。

使用MAX函数查询图书信息表中价格最低的图书信息

select MIN(BPrice) AS 最低价格 from BookInfo

4.MAX函数

MAX函数用于返回表达式中最大值,出现空值,则将被忽略

使用MAX函数查询图书信息表中价格最高的图书信息

select MAX(BPrice) AS 图书总家, BName AS 图书名称 from BookInfo

5.COUNT函数

COUNT函数返回提供的组或记录集中的技数。COUNT函数可以用于text、image、ntext外的任何类型列。另外,也可以使用星号(*)作为COUNT函数的参数

使用COUNT(*)统计图书信息表的图书总数

select COUNT(*) AS 总数 from BookInfo

6.DISTINCT函数

DISTNCT函数对指定的结果集去重时,会先排除该结果集中的重复值,然后返回结果集

select DISTINCT(CId) AS 不重复图书分类编号 from BookInfo

使用GROUP BY子于进行分组查询

可以利用GROUP BY子句实现对数据的分组。GROUP BY 子句结合聚合函数,根据一个人或多个列对结果集进行分组,然后由聚合函数进行分组统计

查询每一个用户Id对应的借书数量。

select UserId AS 用户 ID, COUNT(USerId) AS 借书数量 from borrowInfo group by userId

使用HAVING子句进行分组筛选

HAVING用于指定搜索条件,通常在GROUP BY子句中使用

根据用户Id对应用户信息分组后,在此借出上使用HAVING子句添加过滤条件,筛选出借书数量超过1本的用户的用户Id

select UserId from BorrowInfo group by userId having count(Bid)>1

提示:在select语句中,where、group by、having子句和聚合函数的执行次序如下:where子句从数据源筛掉不符合搜索条件的记录;group by子句将记录分到各组中;having子句从筛选分组后不符合搜索条件的记录

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值