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

前提条件

首先创建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 >=21 and age<=23;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  2 | 李莉   |  23 | woman |
|  3 | 李二   |  22 | man   |
|  4 | 李三   |  21 | man   |
+----+--------+-----+-------+
mysql> select *from caiwu where age between 21 and 23;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  2 | 李莉   |  23 | woman |
|  3 | 李二   |  22 | man   |
|  4 | 李三   |  21 | man   |
+----+--------+-----+-------+

限制查询

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

语法:select 字段 from 表名 limit n,m;

limit可以强制指定查询结果的记录条数。

n是开始记录行,0表示第一条记录,m表示显示行,从n开始,共显示几行记录。

时刻注意开始范围时从0开始的,1表示的是第二行,而非第一行。
显示范围就是共显示几条记录,并不是结束范围。

例如:查询yunwei表中第2-4行记录

mysql> select * from yunwei limit 1,3;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  2 | 张四   |  21 | man   |
|  3 | 张莉   |  22 | woman |
|  4 | 张五   |  23 | man   |
+----+--------+-----+-------+

命令解读:查询yunwei表中记录,从第二行开始,共显示三行。

嵌套查询

没有关键字,嵌套查询分为查询语句和子查询语句,在查询语句中含有子查询语句,所以叫做嵌套查询。

嵌套子查询通常位于查询语句的条件之后。

例如:在caiwu表中查询名称为张三的字段。

先在caiwu表中添加一个张三字段,并且年龄不同

mysql> insert into caiwu values(7,'张三',25,'man');

通过子查询的方式,查询caiwu和yunwei表中名称字段相同的字段

mysql> select name,age from caiwu where name=(select name  from yunwei where age=20);
+--------+-----+
| name   | age |
+--------+-----+
| 张三   |  25 |
+--------+-----+

前半段是正常的查询语句,name=()中为子查询语句,查询的字段为name,查找yunwei表中age为20的name,结果为张三,将结果执行外部的查询语句,就完成了。

使用嵌套查询,两个表必须要有一个关联字段,否则无法实现。

测试完成后,将添加的字段删除即可。

多表连查

多表连查全称多表连接查询,和嵌套子查询一样,都需要有一个共同的字段,然后将多个表连接在一起查询,将符合条件的组成一个合集。

常见连接:内连接,外连接

内连接

根据两个表中共有的字段进行匹配,然后将符合条件的合集进行拼接。

关键字为inner join…on…,通常位于表名后面。

语法:select 字段 from 表1 inner join 表2 on 表1.字段=表2.字段;

on后面的是连接条件,也就是表1和表2共有的字段

例如:将yunwei和caiwu表连接在一起

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

左连接

关键字为left join…on,通常位于表名后面

语法:select 字段 from 表1 left join 表2 on 连接条件;

左连接是左表为主表,指定字段都显示,右表为从表,没内容显示null。

使用左连接将两个表连接到一起

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

右连接

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

语法:select 字段 from 表1 right join 表2 on 连接条件

右连接是以右表为主表,指定字段都显示,左表为从表,没内容显示null。

使用右连接将两个表连接在一起

mysql> select * from yunwei right join caiwu on yunwei.id=caiwu.id;
+------+--------+------+-------+----+--------+-----+-------+
| id   | name   | age  | sex   | id | name   | age | sex   |
+------+--------+------+-------+----+--------+-----+-------+
|    1 | 张三   |   20 | man   |  1 | 李一   |  24 | man   |
|    2 | 张四   |   21 | man   |  2 | 李莉   |  23 | woman |
|    3 | 张莉   |   22 | woman |  3 | 李二   |  22 | man   |
|    4 | 张五   |   23 | man   |  4 | 李三   |  21 | man   |
|    5 | 张六   |   24 | man   |  5 | 李四   |  20 | man   |
|    6 | 张丽   |   25 | woman |  6 | 李丽   |  19 | woman |
+------+--------+------+-------+----+--------+-----+-------+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章