5.1.3 内部连接 INNER JOIN+ON 1999年
2020年3月31日
12:14
内连接通过关键字INNER JOIN 将多表连接，并通过关键字ON，指定连接条件。内连接又称等同连接，返回连接表所有相匹配的记录，舍弃不匹配的记录。
1999年标准：
SELECT 徒弟,师傅 
FROM 表a
INNER JOIN 表b 
ON 表a.师傅编号=表b.序号;（on是条件）
查询结果：
内部联接分类：
等值连接：在连接条件中使用等于号(=)运算符比较被连接列的列值，其查询结果中列出被连接表中的所有列，包括其中的重复列。
select * from 表1 inner join 表2  on 表1.字段名 = 表2.字段名
不等值连接：在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
 概念：在连接条件中使用除等于号之外运算符（>、<、<>、>=、<=、!>和!<）
select * from 表1 inner join 表2  on 表1.字段名 <> 表2.字段名
自然连接：在连接条件中使用等于(=)运算符比较被连接列的列值，但它使用选择列表指出查询结果集合中所包括的列，并删除连接表中的重复列。
一、等值连接
语法：
SELECT 字段名 FROM 表1 INNER JOIN 表2 ON 连接条件 
例 1：把店名V过来
SELECT 日期,a.店号,店名,商品编码,销售数量
FROM 销售表 a
INNER JOIN 店铺表 b
ON a.`店号`=b.`店号`
例2：查询店号为1.3.7的店名，销售总数量
SELECT a.店号,店名,SUM(销售数量) AS 销售总量
FROM 销售表 a
INNER JOIN 店铺表 b
ON a.`店号`=b.`店号`
WHERE a.店号 in(1,3,7)
GROUP BY 店名                   # 这里使用a.店号效果一样
例3.将店铺表中的表名Vlookup到销售名中，条件是2020.1.1至1.3
SELECT 日期,a.店号,店名,商品编码,销售数量
FROM 销售表 a INNER JOIN 店铺表 b ON b.店号=a.店号
WHERE 日期 BETWEEN '2020-01-01' AND '2020-01-03';
注意：如果假设有一个店号，在商品表里有，销售表里没有，那么就V不过来，反之，在销售表里有，在商品表里没有，也V不过来，因为取的是同时符合条件的。条件是什么呀？是：
如果你想成为数据库开发和维护人员注意：a表和b表的店号类型要一致。
分析结果：
1、运算FROM语句将两个表连接在一起，连接条件是两个表店号相等的内容才会连接
2、WHETE条件只保留级别日期是2020.1.1至1.3区间的数据
3、SELECT后面是返回的字段名
例4：在例1基础上，再添加条件，只看店铺1.3.7这三家店，商品只看A001和B005这两种商品的销售情况
SELECT 日期,a.店号,店名,商品编码,销售数量
FROM 销售表 a INNER JOIN 店铺表 b ON b.店号=a.店号
WHERE 日期 BETWEEN '2020-01-01' and '2020-01-03' and 商品编码 in('A001','B005') and a.店号 in(1,3,7)