MySQL查询语句大全(列举所有常用查询方式)

本文深入讲解了SQL查询的各种技巧,包括简单查询、条件查询、模糊查询、算数运算符、逻辑运算符、in与notin运算符、排序查询、高级查询、范围运算、限制查询、嵌套查询、多表连查、内连接、左连接、右连接、聚合函数等,通过实例演示了如何在实际操作中运用这些技巧。

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

前提条件

首先创建SQL测试文件,其中创建了一个库两个表,用于测试。

文件名称:test.sql

/*------------员工信息库-------------*/
create database staff;
use staff;
create table yunwei(id int not null primary key,name char(4) not null,age tinyint(3) unsigned not null,sex enum('man','woman') not null);
create table caiwu(id int not null primary key,name char(4) not null,age tinyint(3) unsigned not null,sex enum('man','woman') not null);
insert into yunwei values(1,'张三',20,'man'),(2,'张四',21,'man'),(3,'张莉',22,'woman'),(4,'张五',23,'man'),(5,'张六',24,'man'),(6,'张丽',25,'woman');
insert into caiwu values(1,'李一',24,'man'),(2,'李莉',23,'woman'),(3,'李二',22,'man'),(4,'李三',21,'man'),(5,'李四',20,'man'),(6,'李丽',19,'woman');

将SQL文件导入到数据库中

mysql < test.sql

导入完成后,在staff库下有两张表,分别是yunwei和caiwu

mysql> select * from staff.yunwei;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  1 | 张三   |  20 | man   |
|  2 | 张四   |  21 | man   |
|  3 | 张莉   |  22 | woman |
|  4 | 张五   |  23 | man   |
|  5 | 张六   |  24 | man   |
|  6 | 张丽   |  25 | woman |
+----+--------+-----+-------+
mysql> select * from staff.caiwu;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  1 | 李一   |  24 | man   |
|  2 | 李莉   |  23 | woman |
|  3 | 李二   |  22 | man   |
|  4 | 李三   |  21 | man   |
|  5 | 李四   |  20 | man   |
|  6 | 李丽   |  19 | woman |
+----+--------+-----+-------+

简单查询

直接查询

语法:select 字段 from 表名;

最简单的一种查询方式,可查看多个字段或整张表。

例如:查询运维表姓名及年龄

mysql> select name,age from yunwei;
+--------+-----+
| name   | age |
+--------+-----+
| 张三   |  20 |
| 张四   |  21 |
| 张莉   |  22 |
| 张五   |  23 |
| 张六   |  24 |
| 张丽   |  25 |
+--------+-----+

条件查询

关键字为where,通常位于表名后面

语法:select 字段 from 表名 where 条件;

根据条件,查询指定条件的字段。

例如:查询财务表中年龄为20的员工

mysql> select * from caiwu where age=20;
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  5 | 李四   |  20 | man |
+----+--------+-----+-----+

模糊查询

关键字是like,通常位于条件字段后面

语法:select 字段 from 表名 where 字段 like ‘%数据%’;

通过输入具体的数据,来对记录进行查询

例如:模糊查询caiwu表中姓名字段还有三的记录

mysql> select * from caiwu where name like '%三%';
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  4 | 李三   |  21 | man |
+----+--------+-----+-----+

算数运算符

运算符一般配合逻辑运算符一起使用,可以使条件限制更加具体。

符号作用
>大于
<小于
=等于
!=不等于
<>与!=同义,不等于
>=大于等于
<=小于等于

通过逻辑运算符可以将条件限制在一个范围内。

例如:查看caiwu表中id不等于1的记录

mysql> select * from caiwu where id!=1;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  2 | 李莉   |  23 | woman |
|  3 | 李二   |  22 | man   |
|  4 | 李三   |  21 | man   |
|  5 | 李四   |  20 | man   |
|  6 | 李丽   |  19 | woman |
+----+--------+-----+-------+

逻辑运算符

可以将查询的单个条件改为多个条件或满足多个条件中的一个。

符号作用
and与,同时满足多个条件
or或,满足多个条件中的一个即可
not否,不满足条件

和算数运算符一起使用,可以将条件更加具体。

例如:查询yunwei表中性别为女,或年龄为23的记录

mysql> select * from yunwei where sex='woman' or age=23;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  3 | 张莉   |  22 | woman |
|  4 | 张五   |  23 | man   |
|  6 | 张丽   |  25 | woman |
+----+--------+-----+-------+

in与not in运算符

关键字为in,通常位于条件字段后面

语法:select 字段 from 表名 where 字段 in (列表);

符号作用
in在一个条件列表中
not in不在一个条件列表中

例如:查询yunwei表中,年龄为22-25之间的记录

mysql> select * from yunwei where age in(22,23,24,25);
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  3 | 张莉   |  22 | woman |
|  4 | 张五   |  23 | man   |
|  5 | 张六   |  24 | man   |
|  6 | 张丽   |  25 | woman |
+----+--------+-----+-------+

排序查询

关键字为order byasc,desc,通常位于表名之后

排序分为两种,升序(asc)和降序(desc)

语法:select 字段 from 表名 order by 字段 排序方式;

例如:将caiwu表中记录按年龄从大到小查询

mysql> select * from caiwu order by age desc;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  1 | 李一   |  24 | man   |
|  2 | 李莉   |  23 | woman |
|  3 | 李二   |  22 | man   |
|  4 | 李三   |  21 | man   |
|  5 | 李四   |  20 | man   |
|  6 | 李丽   |  19 | woman |
+----+--------+-----+-------+

高级查询

范围运算

关键字为between…and…,通常位于条件字段后面。

语法:select 字段 from 表名 where 字段 between 范围1 and 范围2;

也是用来限制查询范围,作为算数运算符的一种替换。

例如:查询caiwu表中,年龄为21-23的记录,使用算数运算符表示为age>=21 and age<=23,使用范围运算啧表示为age between 21 and 23。

mysql> select *from caiwu where age >=