MySQL 查询语句总结(基础查询、条件查询、模糊查询、聚合查询、排序查询、分页查询、连表查询) - 指南

一、基础查询

(一)查询关键字与基本语法

查询关键字:select

基础语法为 “select 字段 from 表名”

示例 1:查询某一个字段

查询 student 表中的 name 字段

select name from student;

示例 2:查询多个字段

查询 student 表中的 name、sex、age 字段

select name,sex,age from student;

(二)查询所有列

语法:select * from 表名;

示例:查询 student 表中所有列的数据

select * from student;

(三)条件查询

关键字:where ,where用于指定查询条件

语法为 “where 条件列 运算符 值”(字符串需加单引号 '')

常用运算符:包含 >、<、>=、<= 以及不等于(!= 或 <>)

具体示例:

1.运用运算符进行查询:

查询名字为张三的人

select * from student where name = '张三';

查询年龄不等于 20 的同学

select * from student where age !=20;
select * from student where age <> 20;

2.区间查询:between ...and...,查询条件列的值介于两个值之间

select * from student where age between 20 and 20;

3.多值匹配:in,  判断条件列的区间是否包含指定多个值

select * from student where id in (1,2,3,4);
select * from student where id in ('张三','李四');

4.空值判断:查询字段为空的记录

select * from student where class_num is null;

5.多条件查询:

和关系(and):同时满足多个条件

select * from student where class_num = '20201001' and sex = '男';

或关系(or):满足任意一个条件即可

select * from student where sex = '女' and class_num !='20201001' or class_num ='20201001' and sex = '男';

(四)模糊查询

关键字:like

用于根据关键词进行搜索,搭配通配符使用

通配符说明:% 可以匹配任意字符;_ 只能匹配一个字符(例如 “王_” 只能匹配两个字且姓王的名字)

具体示例:

1.查询姓王的学生

select * from student where name like '王%';

2.查询名字中包含 “王” 字的学生

select * from student where name like '%王%';

查询名字为 “王 X”(两个字且姓王)的学生

select * from student where name like '王_';

 二、分组查询 / 聚合查询

(一)聚合函数

常用聚合函数及功能:

  1. sum:对指定字段求和。
  2. avg ():计算指定字段的平均值。
  3. max ():获取指定字段的最大值。
  4. min ():获取指定字段的最小值。
  5. count:统计记录数,查询结果为一个值,而非一列表。聚合函数示例:
  6. 查询同学中年龄的最大值

1.查询表中的某个字段的最大值

select max(age) from student;

2.查询表中的记录总

select count(*) from student;
select count(class_num) from student;

(二)分组查询

关键字:group by

用于根据指定字段进行分组

字段命名:查询时可对聚合函数结果重命名,语法为 “select 聚合函数 (字段)  (空格) 新字段名“

具体示例:

1.查询每个班的平均年龄

select avg(age) avg_age from student GROUP BY class_num;

      2.查询各个班级的男女同学数量,需结合 group by 与 count 函数实现

      select count(*) sex_count ,sex , class_num from student group by class_num,sex

      三、查询排序

      关键字:order by    用于对查询结果进行排序

      默认排序规则:根据 id 从小到大排序,新插入的数据因 id 较大,默认显示在末尾。

      排序方式:

      1.正序排列:默认按升序排列,也可显式指定 asc(通常省略)

      select * from student order by age;

      2.倒序排列:在字段后加 desc

      select * from student order by age desc;

      3.特殊需求:将新插入的数据放到最前面展示

      select * from student order by id desc;

      四、分页查询(限制查询)

      (一)语法格式

      格式 1:

      limit pageSize offset pageStart(pageSize 为每页查询条数,pageStart 为查询起始位置)

      格式 2:

      limit pageStart, pageSize(与格式 1 功能一致,仅参数顺序不同)

      (二)参数说明

      前端通常提供 pageSize(每页显示数量)和 pageIndex(页码,如 1、2、3...)

      换算关系:pageStart = (pageIndex - 1) * pageSize,因此分页查询语句可表示为 “limit pageSize offset (pageIndex - 1)*pageSize”

      (三)具体示例

      每页展示 5 条数据,limit pageSize offset pageStart

      #假设每页显示5条数据
       select * from student limit 5 offstet 0;#第一页
       select * from student limit 5 offstet 5;#第二页
       select * from student limit 5 offstet 10;#第三页
       select * from student limit 5 offstet 15;#第四页

      另一种写法 limit pageStart pageSize

       #另一种写法 limit pageStart pageSize
       select * from student limit 5 ,0;#第一页
       select * from student limit 5 ,5;#第二页
       select * from student limit 5 ,10;#第三页
       select * from student limit 5 , 15;#第四页

      五、连表查询(跨表查询)

      (一)基本概念

      适用场景:查询涉及多张表的数据,例如查询每个学生的班级名称

      笛卡尔积现象:两张表进行连接查询时,若未添加任何条件限制,查询结果总数为两张表记录数的乘积

      例子:

      表一:class

      表二:student

      这两张表的笛卡尔积现象:

      select s.name,c.class_name from student s,class c;

      student s,class c:给两个表起了简称

      方法:原表名 (空格)新表名

      查询结果:

      (二)连接语法

      1. SQL 92 语法

      语法:select XXX from A 表,B 表 where 表连接条件 and 数据查询条件

      示例 1(表连接条件):查询学生姓名与对应班级名称

      select s.name,c.class_name from student s,class c where s.class_num = c.class_num(表连接条件);

      示例 2(表连接条件和数据查询条件):查询张三对应的班级名称

      select s.name,c.class_name from student s,class c where s.class_num = c.class_num and s.name = '张三';

      缺点:提前把where占用了,并且表连接条件与数据查询条件被放在了一起

      2. SQL 99 语法

      语法:select XXX 字段(需标明所属表)from A 表名称 join B 表名称 on 表的连接条件

      核心要求:查询的字段必须明确来自哪张表

      示例:查询学生姓名与对应班级名称

      select s.name,c.class_name from student s join class c on s.class_num = c.class_num;

      (三)连接方式

      1. 内连接(inner join)

      语法:select XXX 字段 from A 表名称 inner join B 表名称 on 表的连接条件

      功能:仅查询两张表中满足连接条件的相交部分数据

      示例:查询学生姓名与对应班级名称

      select s.name,c.class_name from student s inner join class c on s.class_num = c.class_num;

      结果说明:student 表中有 17 条数据,该查询仅返回 15 条结果,class_num 无法与 class 表匹配的两条数据(如 id=16、id=17 的学生)不显示。

      2. 左外连接(left join)

      语法:select XXX 字段 from 左表 left join 右表 on 表的连接条件

      功能:默认显示左表的全部信息,右表仅显示满足连接条件的数据,不满足则显示为 null

      示例:查询学生姓名与对应班级名称(左表为 student,右表为 class)

      select s.name,c.class_name from student s left join class c on s.class_num = c.class_num;

      结果说明:

      左表(student)的 17 条数据全部显示

      右表(class)中无匹配的 class_num 对应的 class_name 显示为 null(如 id=16 的学生 class_num=20201004,id=17 的学生 class_num 为 null,对应的 class_name 均为 null)

      右表中 “数学” 班级(class_num=20201005)无对应学生,不显示。

      3. 右外连接(right join)

      语法:select XXX 字段 from 左表 right join 右表 on 表的连接条件

      功能:默认显示右表的全部信息,左表仅显示满足连接条件的数据,不满足则显示为 null

      示例:查询学生姓名与对应班级名称(左表为 student,右表为 class)

      select s.name,c.class_name from student s right join class c on s.class_num = c.class_num;

      结果说明:

      右表(class)的 4 个班级全部显示

      左表(student)中无对应 class_num 的数据(如 “数学” 班级)显示为 null

      左表原本 17 条数据,仅显示满足连接条件的 15 条,不满足的两条数据不显示

      posted @ 2025-12-17 11:51  gccbuaa  阅读(5)  评论(0)    收藏  举报