表与其自身进行笛卡儿积连接、根据相同名称的字段进行记录匹配,查询结果仅包含符合连接条件与筛选条件的行。为了区别该表的每一次出现,需要为表分别定义别名。
INNER JOIN使用比较运算符“ = ”匹配每个表共有列 的列值,查询结果仅包含符合连接条件与筛选条件的行。
select A.col_name1,B,col_name2 from table1 A inner join table1 B on A.col_nameY=B.col_nameX
table1:表示数据表
table1 A inner join table1 B:一个表用两次,并起别名,避免混淆
A,B:标注表的别名
from:从哪个表格里面查询数据
自连接的数据查询通过 inner join on 实现
inner join:连接待查询的表
on 后面连接【表与表连接匹配条件】
实例 |
---|
查询至少借了书名id为1,2两本的学生 |
下面的表记录了学生借阅书籍的记录 |
数据表t_borrow_record
读者id | 读者名字 | 借取数量 | 书id | 书名 | |||
---|---|---|---|---|---|---|---|
reader_id | reader_name | borrow_count | book_id | book_name | |||
|
|
1 |
|
python终极 | |||
|
|
1 |
|
python终极 | |||
3 | 小三 | 1 | 5 | python初级 | |||
4 | 小四 | 1 | 2 | python高级 | |||
5 | 小五 | 1 | 5 | python初极 | |||
|
小二 | 1 |
|
python高级 | |||
|
小一 | 1 |
|
python高级 |
操作语句 | 同一张表连接两次 |
---|---|
SELECT A.reader_name FROM t_borrow_record A INNER JOIN t_borrow_record B ON A.reader_id = B.reader_id WHERE A.book_id = 1 AND B.book_id = 2; |
选择 A表的reader_name【字段为搜索结果】 从哪个表 是t_borrow_record表,并且把表起别名为:A 前面的哪个表和后面的这个表连接 t_borrow_record表 并且把表起别名为:B 【ON】连接里面相同的字段 是 A表的reader_id=B表的reader_id 筛选条件为: A表的book_id等于1的值, 与…并且 B表的book_id等于2的值 |
思路
先匹配 A.reader_id = B.reader_id | ||
---|---|---|
|
||
where 再次筛选 得出4条数据
|
||
最终筛选select + 显示哪个表的字段,最终显示两个学生名 | ||
|
得到的输出结果
reader_name |
---|
小一 |
小二 |
搜索reader_name的语句【写为一行】 |
---|
select A.reader_name from t_borrow_record A inner join t_borrow_record B on A.reader_id = B.reader_id WHERE A.book_id = 1 and B.book_id = 2; |
搜索reader_id的语句【写为一行】 |
select A.reader_id from t_borrow_record A inner join t_borrow_record B on A.reader_id = B.reader_id WHERE A.book_id = 1 and B.book_id = 2; |
创建表的语句
create table t_borrow_record(
reader_id int,
reader_name varchar(20),
borrow_count int,
book_id int,
book_name varchar(20)
);
添加数据内容语句
insert into t_borrow_record values
(1,‘小一’,1,1,‘python终极’),
(2,‘小二’,1,1,‘python终极’),
(3,‘小三’,1,5,‘python初级’),
(4,‘小四’,1,2,‘python高级’),
(5,‘小五’,1,5,‘python初极’),
(2,‘小二’,1,2,‘python高级’),
(1,‘小一’,1,2,‘python高级’);
第二种查询方法 |
---|
select A.reader_name from t_reader_record A,t_reader_record B where A.reader_id=B.reader_id and A.book_id=1 and B.book_id=2; |
科学上没有所谓的真理,在课堂里面学到的所有定理,公理都是前人对自然现象的归纳总结,是现状下最好的归纳总结,可以有效解释自然现象,甚至推测一些未发生的现象,随着人类对周围环境和宇宙认知的加深,这些定理和公理都有失效的时候