MySql(三)之多表查询

本文深入讲解了多表查询的各种方式,包括交叉连接、内连接、左外连接、右外连接和子查询。通过student和score表的具体实例,详细演示了各种连接查询的使用方法和结果区别,帮助读者掌握复杂查询技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

##概述

本篇blog主要讲解多表查询,包括连接查询和子查询,连接又分为交叉连接,内连接,外连接,外连接又分为左外连接和右外连接。

本篇blog主要以student表和score表为例说明多表查询的操作。

student表结构如下:

create table student (
    id int(11) primary key auto_increment,
    name varchar(100) default '',
    age int(11) default 0
);

student表的测试数据如下:

score表结构如下:

create table student (
    id int(11) primary key auto_increment,
    student_id int(11),
    type varchar(100) default '',
    score int(11) default 0
);

score表的测试数据如下:

 

##交叉查询

交叉查询使用cross join关键词。使用示例如下:

select * from student cross join score

得到的结果如下:

说明:此时得到的数据共12行,7列。这是一种笛卡尔积运算,即行数为两表行数相乘,列说为之前两列相加。

这种用户显然没有丝毫意思,但我们添加where条件后,就变得有意义了,如下:

select * from student st cross join score sc where st.id = sc.student_id

结果如下:

此时可以清晰的看到每个学生的各个成绩。

在开发中最常用的是下面语句:

select st.name,st.age,sc.type,sc.score from student st,score sc where st.id = sc.student_id

说明:

  1. 此时分别给student和score分别起了别名st和sc。
  2. 此时cross join关键词可以省略,使用逗号隔开即可。
  3. 此时查询我们需要的字段即可。

##内连接查询

内连接使用关键词inner join。sql示例如下:

select * from student st inner join score sc on st.id = sc.student_id

此时得到的结果如下:

注:这种方式与交叉连接得到的结果相同。所以这种方式很少使用。

##外连接查询

外连接分为左外连接和右外连接。

##左外连接

左外连接使用关键词:left outer join。示例如下:

select * from student st left outer join score sc on st.id = sc.student_id

得到的结果如下:

说明:左外连接会获取左边的所有数据。

##右外连接

左外连接使用关键词:right outer join。示例如下

select * from student st right outer join score sc on st.id = sc.student_id

得到的结果如下:

说明:右外连接会获取右边的所有数据。

##嵌套查询

嵌套查询也叫子查询,示例如下:

select * from score where student_id in (select id from student where name='guoxiang')

得到的结果如下:

说明:此时先根据name从student表中获取id,然后根据student_id获取score表中的数据。

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值