sql server 2016 第七章 ch02

7-2 结合多个表

内部结合:根据关系情报进行结合演算

文法:

SELECT 选择的列 FROM 表名1 INNER JOIN 表名2 
on 表名1.结合键所在列= 
表名2.结合键所在

实例
将社员表和部门表进行内部结合.结合键为 部门编号

SELECT*FROM 社員 INNER JOIN 部門

ON 社員.部門番号=部門.部門番号 


因为将社员表与部门表中的部门编号相等的列联结了起来,所以这种结合也称做“等价结合”


指定选出列名的结合方式:

SELECT 氏名,部門名

FROM 社員 INNER JOIN 部門

ON 社員.部門番号=部門.部門番号


然而,如果要取得部门编号这一列,会出现以下错误:列名不明确


SELECT 氏名,部門名,部門番号

FROM 社員 INNER JOIN 部門

ON 社員.部門番号=部門.部門番号


由于部门编号列既存在于社员表中,又存在于部门表中,所以必须明确其存在位置。

改为:

SELECT 氏名,部門名,部門.部門番号

FROM 社員 INNER JOIN 部門

ON 社員.部門番号=部門.部門番号

在实际的开发中,需要频繁结合多个表,建议将每个被选择列编写为:表名.列名   增加程序可读性。


为表名添加别名

当表名过长时,频繁记述表名太过繁琐,可以用别名替代表名使用。

SELECT s.氏名,b.部門番号,b.部門名

FROM 社員 AS s INNER JOIN 部門 AS b

ON s.部門番号=b.部門番号


如果用别名来替代表明,在select 语句中也必须用别名进行替换。在这里虽然使用了s,b这种名称,出于保守性(sql会进行更改或者有其他人要对sql进行修改的时候)的考虑

·尽量用简单易懂的名字进行替换。


2.使用编辑查询器GUI操作进行多个表的结合与选择。





利用GUI操作就能自动生成代码了。


栏目1 不使用inner join 的内部结合

以前的数数据库支持不使用inner join语句的内部结合方式,而是采用:


SELECT*FROM 社員,部門

WHERE 社員.部門番号=部門.部門番号

近年来的大多数数据库渐进开始采用INNER JOIN 进行 内部结合,将来可能不再支持省略INNER JOIN的方式,除了将既存的代码进行整修之外,也需要学会使用INNER jOIN进行内部结合。


栏目2 自我结合

自我结合 指的是在同一表内进行连结。例如

SELECT 社員.*,上司社員.社員名 AS 上司社員名

FROM 社員 INNER JOIN  社員 AS  上司社員

ON 社員.上司社員番号=上司社員.社員番号


2.GROUP BY 句与结合演算


将社员表与部门表进行结合,统计每个部门的人数数量。同时显示对应的部门名称。


SELECT 部門名,COUNT(*)

FROM 社員 INNER JOIN 部門

ON 社員.部門番号=部門.部門番号

GROUP BY 部門名


用GROUP BY句指定多列。

统计部门名称和人员数量后,也想在第一列加入部门编号。

正确的代码为:

SELECT 部門.部門番号,部門名,COUNT(*)

FROM 社員 INNER JOIN 部門

ON 社員.部門番号=部門.部門番号

GROUP BY 部門.部門番号,部門名


HINT 使用MAX和 MIN


用GROUP BY 句制定多列时,有一个回避冗长记述的方法。使用max,min 函数


SELECT 部門.部門番号,MAX(部門名),COUNT(*)

FROM 社員 INNER JOIN部門

ON 社員.部門番号=部門.部門番号

GROUP BY 部門.部門番号


仅限于部门名从属于部门编号的情况(因为用max或min 值只有一个)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值