千家信息网

MySQL数据库中多表查询之内连接,外连接,子查询的示例分析

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,小编给大家分享一下MySQL数据库中多表查询之内连接,外连接,子查询的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧
千家信息网最后更新 2026年10月31日MySQL数据库中多表查询之内连接,外连接,子查询的示例分析

小编给大家分享一下MySQL数据库中多表查询之内连接,外连接,子查询的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

多表查询

使用单个select 语句从多个表格中取出相关的查询结果,多表连接通常是建立在有相互关系的父子表上;

1交叉连接

第一个表格的所有行 乘以 第二个表格中的所有行,也就是笛卡尔积
创建一个消费者与顾客的表格:
代码如下:

-- create table customers(-- id int primary key auto_increment,-- name VARCHAR(20)not null,-- address VARCHAR(20)not NULL-- );-- CREATE table orders(-- order_namre VARCHAR(20) primary key,-- num char(20) not NULL,-- price int not null,-- customers_id int,-- constraint cus_ord_fk FOREIGN key(customers_id) REFERENCES customers(id)-- )自己插入数据即可。语法:

隐式语法(不使用关键字): select * from customers,orders;

运行结果如下:

显式语法(使用关键字):select * from customers c INNER JOIN orders o ON c.id=o.customer_id;

两个运行结果一样,但是笛卡尔积有错误,下面的方法进行修正

2内连接

因为交叉连接获得的结果集是错误的。因此内连接是在交叉连接的基础上
只列出连接表中与连接条件相匹配的数据行,匹配不上的记录不会被列出。

语法:

隐式语法:

select * from customers,orders where customers.id=orders.customers_id;

显式语法:

select * from customers c INNER JOIN orders o ON c.id=o.customer_id;

运行结果如下

我们还可以给程序起别名:
代码如下:

select * from customers as c,orders o where c.id=o.customers_id;SELECT * from customers as c inner join orders o on c.id=o.customers_id;

3外连接

内连接只列出所有购买过商品的用户的信息,不会列出没有购买商品用户。
而外链接是以一张表为基表,其他表信息进行拼接,如果有就拼接上,如果没有显示null; 外链接分为左外连接和右下连接。
左外连接: 以关键字左边的表格为基表进行拼接

语法:

select * from customers c LEFT JOIN orders o ON c.id=o.customer_id;

右外连接: 以关键字右边的表格为基表

语法:

select * from orders o RIGHT JOIN customers c ON c.id=o.customer_id;

4子查询

某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候就会用到子查询,为了给主查询(外部查询) 提供数据而首先执行的查询(内部查询)被叫做子查询; 子查询分为嵌套子查询和相关子查询。

嵌套子查询:

内部查询的执行独立于外部查询,内部查询仅执行一次,执行完毕后将结果作为外部查询的条件使用(嵌套子查询中的子查询语句可以拿出来单独运行。)

语法及练习: 查询出id为1的老师教过的所有学生。

select * from students where id in(select s_id from teacher_student where t_id=1);

相关子查询:

内部查询的执行依赖于外部查询的数据,外部查询每执行一次,内部查询也会执行一次。每一次都是外部查询先执行,取出外部查询表中的一个元组,将当前元组中的数据传递给内部查询,然后执行内部查询。根据内部查询执行的结果,判断当前元组是否满足外部查询中的where条件,若满足则当前元组是符合要求的记录,否则不符合要求。然后,外部查询继续取出下一个元组数据,执行上述的操作,直到全部元组均被处理完毕。
创建三个表格
练习1. 查询出id为1的老师教过的所有学生。
- 创建老师表

create table teacher1(id int primary key auto_increment,name char(20) not NULL,subject char(20) not null);

- 创建学生表

create table student1(id int primary key auto_increment,name char(20) unique not null,age int null);

- 创建第三个表格

create table tea_stu(id int PRIMARY KEY,name char(20),t_id int,s_id int,score int not null,constraint teacher1_id_fk foreign key(t_id) references teacher1(id),constraint student_id_fk foreign key(s_id) references student1(id));

练习1. 查询出id为1的老师教过的所有学生。

做法1 用分开的方法写出来:

select s_id from tea_stu where t_id=1;select * from student1 where id in(2,3);

做法2:

select * from student1 where id in(select s_id from tea_stu where t_id=1);

相关子查询:

内部查询的执行依赖于外部查询的数据,外部查询每执行一次,内部查询也会执行一次。每一次都是外部查询先执行,取出外部查询表中的一个元组,将当前元组中的数据传递给内部查询,然后执行内部查询。根据内部查询执行的结果,判断当前元组是否满足外部查询中的where条件,若满足则当前元组是符合要求的记录,否则不符合要求。然后,外部查询继续取出下一个元组数据,执行上述的操作,直到全部元组均被处理完毕。
求:每一科考试成绩大于平均分的学生的分数。

select * from tea_stu as a where a.score>(select avg(b.score) from tea_stu as b where a.s_id=b.s_id);

以上是"MySQL数据库中多表查询之内连接,外连接,子查询的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

查询 数据 结果 语法 表格 学生 条件 关键 关键字 老师 运行 套子 篇文章 语句 交叉 数据库 示例 分析 三个 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 互联网科技公司简介 重生之互联网科技帝国 科技金融是不是互联网金融 中国互联网科技发展 九亚互联网科技 智慧科技互联网 互联网 科技服务平台 互联网科技公司需要的职位 青岛中康互联网医疗科技有限公司 科技互联网大厂 彤创互联网科技有限公司 南平创想时代互联网科技有限公司 互联网科技人工智能实验室 2021互联网科技公司排名 锡山区互联网智能科技产品供应 神州科技互联网有限公司 兰石爱特工业互联网科技分公司 互联网大会出现的黑科技 互联网科技企业文化 互联网科技股 江苏根荣互联网科技 西安互联网科技 杭州壁岐互联网科技有限公司 996高科技互联网公司 宁波跨境商互联网科技有限公司 长沙易易互联网科技有限公司 优雇互联网科技有限公司 恒生科技互联网指数十大成分股 武汉亿视互联网科技有限公司
0