四十五、mysql数据库4:MySQL高级查询

本文主要介绍了MySQL数据库的查询操作,包括连接查询(内连接、左连接、右连接)、自关联查询(查询省市县信息)、子查询(标量、列级、行级、表级子查询)以及关键字(any/some/all/in)的使用,还指出部分表级子查询可用连接查询替代。

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

一、连接查询操作:

mysql支持三种类型的连接查询,分别为:内连接、右连接、左连接。

注意:一个数据库中如果有多个表的话,表名是不能省略的。

1、使用内连接查询班级表与学生表(inner join)

on后面跟着连接查询的条件:

select students.name,classes.name from students inner join classes on students.cls_id = classes.id;

使用as 优化一下:

select s.name as 姓名,c.name as 班级 from students as s inner join classes as c on s.cls_id =c.id;

查出两个表相关的所有信息:(简写可省略inner,但一般都加上)

2、左连接:那students是主表,那classes是从表。(left join

3、右连接:就是以classes为主表,那students就是从表。(right join

二、自关联查询的基本操作

准备个数据库表province里面含所有的省市的id和pid。

1、查询所有的省和自治区:

原理:所有省/直辖市的pid=0,前面对应的id=对应市的pid号

2、查询河北省有哪些市:(想像成两张表)

 select p.name as 省名,s.name as 市名 from province as p inner join province as s on p.id = s.pid where p.name="河北省";

3、查看石家庄市有哪些县或者区:

 select p.name as 市名 ,s.name as 区县 from province as p inner join province as s on p.id = s.pid where p.name="石家庄市";

三、(重点)子查询

在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句

(重点)子查询分类(以子查询返回的结果作为外部主查询的条件)

1、标量子查询: 子查询返回的结果是一个数据(一行一列)

例:查询身高最高的学生的名字:

2、列级子查询: 子查询返回的结果是一列(一列多行)

3、行级子查询: 子查询返回的结果是一行(一行多列)

例:查找班级年龄最大,身高最高的学生(必须都同时满足才行,一一对应才行

4、表级子查询: 返回的结果是多行多列(以inner join子查询出来的结果作为表,且必须都要有别名,使用as

①查询学生与班级对应的信息:表级子查询

  下面的结果必须加别名

② 直接 inner join 连接查询

说明:发现很多表级子查询的语句,都是可以使用连接查询实现的,此时推荐使用连接查询,

因为连接查询的语句更简洁,逻辑更清晰

四、关键字:any/some/all/in

1、=any  = some 与in一样

2、all

3、in

4、>any  >=any   <any   <=any

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值