MySQL DQL数据查询语言

本文介绍了SQL中的基本查询操作,包括使用WHERE子句进行条件筛选,SELECT语句选择列,LIKE进行模糊查询,BETWEEN用于区间查询,ORDERBY进行结果排序,以及COUNT,MAX,MIN,SUM,AVG等聚合函数的应用。此外,还提到了日期函数和字符串函数的使用,以及LIMIT用于分页查询的方法。

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

前言


查询基础语法

在删除、修改以及查找都可以使用where语句,用来筛选满足特定条件的数据。

语法:

select column1,column2··· from table_name where condition;

若要显示所有列,可用*代替列名。

select *from table_name;

其中column表示指定列,table_name 表示表名,condition 表示特定条件。


运算符 

条件关系运算符含义条件逻辑运算符含义

>

大于and并且
<小于or
=等于not取反
!=或<>不等于
>=大于等于
<=小于等于

示例: 

-- 查询年龄不等于18的学生信息
select *from students where stu_age <>18;

区间查询- between and

示例:

-- 查找年龄在[14,17]区间内的学生信息
select *from students where stu_age between 14 and 17;

模糊查询-like

在where子句中可以使用like关键字来实现模糊查询。

语法:

select *from table_name where colunm like 'reg';

其中table_name表示表名,column表示指定列, 

like关键字的'reg'表达式中

  • %表示任意多个字符(%o%表示包含o的字符串)
  • _表示任意一个字符(_o%表示第二个字母为o的字符串)

示例:

-- 查询姓李的学生信息
select *from students where stu_name like '李%';

-- 查询名字最后一个字为'美'的学生信息
select *from students where stu_name like '%美';

-- 查询名字里有'小'字的学生信息
select *from students where stu_name like '%小%';

 查询结果排序-order by

可以在查询语句中添加order by 子句实现对查询结果的升序/降序排列。

语法:

select *from table_name where condition order by column asc|desc;

其中table_name 表示表名,condition表示特定条件,column表示指定列,asc表示升序(默认),desc表示降序。

示例:

-- 查询年龄小于18岁的学生信息并按学号升序排列,默认升序可省略asc
select *from students where stu_age <18 order by stu_num asc;

-- 查询年龄小于18的学生信息,先按性别升序排列再按年龄降序排列
select *from students where stu_age <18 order by stu_gender asc,stu_age desc;

聚合函数

  • count()

统计函数,统计满足特定条件的指定字段值的个数。

示例:

-- 统计学生表中人数
select count(stu_num) from students;

-- 统计学生表中年龄大于18的人数
select count(stu_num) from students where stu_age >18;

  • max()/mim()

最值函数,计算最大(小)值,查询满足条件的记录中指定列的最大(小)值。

示例:

-- 查询学生表中最大年龄
select max(stu_age) from students;

-- 查询学生表中女生最小年龄
select min(stu_age) from students where stu_gender='女';

  • sum()

求和函数,查询满足条件的记录中指定列的值的总和。

示例:

-- 查询学生表中学生年龄和
select sum(stu_age) from students;

-- 查询学生表中女生年龄和
select sum(stu_age) from students where stu_gender='女';

  • avg()

平均值函数,查询满足条件的记录中指定列的平均值。

示例:

-- 查询学生表中学生平均年龄
select avg(stu_age) from students;

-- 查询学生表中男生平均年龄
select avg(stu_age) from students where stu_gender='男';

日期函数

当我们向日期类型的列赋值时,可以通过字符串类型赋值。

示例:

insert into students(stu_num,stu_name,stu_age,stu_qq,stu_gender,stu_time) 
values('2022401','小毓',22,'1237327','女','2023-07-17 16:29:12');

若要获取当前系统时间添加到列,可使用now()或sysdate()函数。

示例:

insert into students(stu_num,stu_name,stu_age,stu_qq,stu_gender,stu_time) 
values('2022402','小文',18,'3237327','男',now());

字符串函数

  • concat()

指定字符拼接多列。

示例:

select concat(stu_name,'-',stu_num,'-',stu_gender) from students; 

-------------------------------------------+
小毓-2022401-女                             |
小文-2022402-男                             |      
                                           
                                           

  • upper()

将指定列的值转换为大写。

示例:

select upper(stu_name) from students; 
---------------+
小毓            |
小文            |
BOB            |

  • lower()

将指定列的值转换为小写。


  • substring()

从指定列中截取部分。

示例:

-- 查询学生表中学生姓名,截取学号从第4位开始后3位。
select stu_name,substring(stu_num,4,3) from students;

--------+----------------------+
李华      |266                   |
小美      |266                   |
小马      |266                   |
小王      |266                   |
小李      |266                   |
小毓      |240                   |
小文      |240                   |
bob     |241                   |

分组查询-group by

将数据表中的记录按照指定的类进行分组。

语法:

select 分组字段/聚合函数
from 表名 
[where 条件] 
group by 分组列名
[having 条件]
[order by 排序字段]

其中[ ]中语句可有可无,having是对分组后的结果进行过滤,而where是对未分组的数据进行过滤。having必须与group by一起使用。

语句执行:先根据where条件在数据库中查询记录,group by 对查询记录进行分组,执行having对分组后的数据进行筛选。

示例:

-- 查询学生表中,按性别分组,再统计人数
select stu_gender,count(stu_num) from students group by stu_gender;

stu_gender|count(stu_num)|
----------+--------------+
女         |             5|
男         |             3|

-- 查询学生表中,按年龄分组,女生中相同年龄人数大于1的人数,按年龄升序排列
select stu_age,count(stu_num) from students where stu_gender='女' 
group by stu_age having count(stu_num)>1 
order by stu_age;

stu_age|count(stu_num)|
-------+--------------+
     15|             2|
     17|             2|
     18|             3|

分页查询-limit 

当数据表中的记录较多时,可以使用limit子句进行分页展示,该子句允许你指定查询结果中的起始位置和返回的记录数。

语法:

select column1, column2, ...
from table_name
[where conditions]
limit [start,] length;
 

其中,start参数是可选的,表示查询结果的起始位置。如果未指定 start 参数,则默认为 0(即从第一行开始)。length 参数是必需的,表示返回的记录数。

示例:

-- 第一页,查询学生表中,从第一行开始返回五条记录
select *from students limit 5;

stu_num|stu_name|stu_age|stu_qq  |stu_gender|stu_time|
-------+--------+-------+--------+----------+--------+
2022668|李华      |     18|21213213|女         |        |
2022667|小美      |     15|        |女         |        |
2022666|小马      |     12|12211345|女         |        |
2022669|小王      |     14|2121232 |男         |        |
2022666|小李      |     17|2124232 |女         |        |

-- 第二页,查询学生表中,从第六行返回五条记录
select *from students limit 6,5;

stu_num|stu_name|stu_age|stu_qq |stu_gender|stu_time           |
-------+--------+-------+-------+----------+-------------------+
2022402|小文      |     18|3237327|男         |2023-07-17 16:45:06|
2022412|bob     |     18|3237227|男         |2023-07-17 17:06:44|
2022789|小雨      |     17|       |女         |                   |
2022871|福克斯     |     15|       |女         |                   |
2022766|小海      |     18|       |女         |                   |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Indifferent-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值