SQL零基础入门教程,贼拉详细!贼拉简单! 速通数据库期末考!(六)

SQL JOIN

前面我们一直学习的是单表上的查询、更新、删除等操作,但是往往需要操作的数据并非都在同一张表上,因此有很多需求都要涉及到多表的连接查询,也叫跨表查询。此时便需要将多张表进行连接,方便我们对其中的数据进行操作,这就是 JOIN 语句的作用。

JOIN 用于把来自两个或多个表的行结合起来。

示例表除了之前的学生数据students表之外,还需要再创建两个表,分别是学生分数score表(3个字段,共六千条数据),以及课程数据subject表(2个字段,共9条数据),两个表的sql文件已绑定。

score表:

subject表:

首先,观察一下这三张表,我们发现students表与score表具有共同字段 id 字段(学生id),score表与subject表具有相同字段 subject_id 字段(课程id),这也是关联三三张表的前提条件。

INNER JOIN

INNER JOIN 用于关联两个表,ON 关键字后指定两个表共有的字段,表的每一行数据的该字段值与另一张表的每行数据该字段值匹配,字段值相同,两个表该数据行进行合并返回结果,两表中匹配不上的数据行则不返回结果。

语法:

SELECT column
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;

columns:要显示的列名。
table1:表1的名称。
table2:表2的名称。
column_name:表中用于连接的列名。
table1.column_name:表示table1表的column_name字段。

例如:
将学生成绩表与课程数据表进行关联,显示每个学生的各科成绩:

SELECT *
FROM score
INNER JOIN subject
ON score.subject_id = subject.subject_id;

从结果中能看到,两张表匹配成功的数据行拼接到一起,所有同时有两个 subject_id 字段。如果不想显示所有字段,只需要在SELECT语句后指定要显示的字段即可,但是需要注意的是只显示一个匹配字段,也需要使用 table1.column_name 的形式 ,否则就会报错。如下:

SELECT id,subject_id
FROM score
INNER JOIN subject
ON score.subject_id = subject.subject_id;


报错信息 Column ‘subject_id’ in field list is ambiguous 意思为 字段列表中的列’subject_id’是不明确的,也就是说系统不知道你是要查询哪张表的subject_id字段。

正确写法:

SELECT id,score.subject_id,subject_name,score
FROM score
INNER JOIN subject
ON score.subject_id = subject.subject_id;


强调两张表共有的字段要使用 table1.column_name 的形式,其他字段不需要
强调两张表共有的字段要使用 table1.column_name 的形式,其他字段不需要
强调两张表共有的字段要使用 table1.column_name 的形式,其他字段不需要

同样的,两表关联后也可以进行WHERE条件查询,例如:
关联学生成绩表与课程数据表,只查询语文科目的学生成绩:

SELECT id,score.subject_id,subject_name,score
FROM score
INNER JOIN subject
ON score.subject_id = subject.subject_id
WHERE subject_name = '语文';

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值