mysql高级查询教程_MySQL高级查询(仅学习使用)

本文详细介绍了SQL查询的基础语法及高级应用,包括排序、聚合函数、分组、嵌套查询和多表连接等核心概念,并提供了丰富的实例帮助理解。

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

select ... 聚合函数 from 表名

where ...

group by ...

having ...

order by ...

limit ...

order by 给查询结果排序

语法格式:

... order by 字段名 ASC/DESC;

ASC:默认,升序

DESC:降序

举个栗子

select name from stuinfo order by id desc;

limit 显示查询记录的条数

limit放在查询语句的最后,后边不再放其他的语句。

用法:

limit n; —–> 显示 n 条记录

limit m, n; —–> 从第(m+1)条记录开始,显示 n 条记录

limit 分页

要求每页显示 5 条记录,显示第 4 页的内容

第1页:limit (1-1)*5,5; # 1,2,3,4,5

第2页:limit (2-1)*5,5; # 6,7,8,9,10

第3页:limit (3-1)*5,5; # 11,12,13,14,15

...

第m页:limit (m-1)*n,n;

由上可知:第 4 页是:limit 15,5;

聚合函数

avg(字段名):求该字段的平均值

sum(字段名):求和

max(字段名):求最大值

min(字段名):求最小值

count(字段名):统计该字段的记录的条数

举个栗子:统计id、name两个字段分别有多少条记录

select count(id),count(name) from stuinfo;

1

group by 给查询的结果分组

注意:select之后的字段名如果没有在group by之后出现,则必须要对该字段进行聚合和处理(即聚合函数)

举个栗子:查询表中有哪些国家

select country from people

group by country;

####having语句

作用:对查询的结果进一步筛选

使用注意:

having语句通常和group by语句联合使用,过滤由group by语句返回的记录集决定

where只能操作表中实际存在的字段,having语句可操作由聚合函数的显示列

举个栗子:找出平均攻击力 大于105的国家的前两名,显示国家名和平均攻击力。

select country,avg(gongjili) as average from sanguo

group by country

having average>105

order by average desc

limit 2;

查询表记录时可以做数学运算

运算符:+、-、*、/、%

举个栗子:查询时显示所有英雄攻击力翻倍

select id, name, gongjili*2 as newgjl from sanguo;

1

嵌套查询

嵌套查询也叫子查询,是把内层的查询结果作为外层的查询条件

语法格式

select 字段名列表 from 表名 where 字段名 运算符

(select 字段名 from 表名 where 条件)

注意:外层的where的条件必须和内层的select查询的字段名一样,个数也一样

如:把攻击值小于平均攻击值的名字和攻击值显示出来(sanguo表)

我们可以分开来查,然后合并成一条语句

分析:查名字和攻击值,条件是攻击值小于平均攻击值;

第一步:先求平均值

select avg(gongjizhi) from sanguo;

假设我们用avg记录查询出来的平均值

第二步:查找攻击值小于平均值的名字和攻击值

select name, gongjizhi from sanguo where gongjizhi

第三步:将上边两条合并

select name, gongjizhi from sanguo where gongjizhi<

(select avg(gongjizhi) from sanguo);

在举个栗子:找出每个国家攻击力最高的英雄的名字和攻击值

第一步:按国家分组找出攻击最大的攻击值

select max(gongjizhi) from sanguo

group by country;

第二步:显示以上英雄的名字和攻击值

select name, gongjizhi from sanguo where

gongjizhi in (第一步的结果);

第三步:合并上两步

select name, gongjizhi from sanguo

where gongjizhi in

(select max(gongjizhi) from sanguo

grounp by country);

将第三步改进一下:

select name, gongjizhi from sanguo

where (country, gongjizhi) in

(select country, max(gongjizhi) from sanguo

group by country);

1

2

3

4

方法不止一种,当然有更优的写法,现在不涉及。

多表查询

语法格式:

select 字段名列表 from 表1,表2 where 条件;

1

笛卡尔积的匹配规则(面试中常问)

记录多的表的每一条记录,去匹配另一张表的所有记录;

两张表的记录条数相同时,则后表的每一条记录去匹配前表。

这里写图片描述

连接查询

内连接 inner join

外连接

左连接 left join

右连接 right join

内连接

语法格式:

select 字段名列表 from 表1 inner join 表2 on 表1.字段=表2.字段;

1

注意:inner 可以省略,on后边的条件在两个表中必须都存在,是连接两个表的标志。

内连接显示的内容要同时满足条件,如

这里写图片描述

外连接之左连接

left join

以左表为基准,匹配右表的所有内容,不够的用显示NULL

这里写图片描述

外连接之右连接

right join

以右表为基准,去匹配左表的内容,不够的也是显示NULL

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值