内部结合:根据关系情报进行结合演算
文法:
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 值只有一个)