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

版权声明:本文为博主原创文章,未经博主允许不得转载。博客地址:https://blog.csdn.net/xk1761299425 https://blog.csdn.net/xk1761299425/article/details/82053143

一、连接查询操作:

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

 

猜你喜欢

转载自blog.csdn.net/xk1761299425/article/details/82053143