MySQL中常用的查询(DQL)

本文详细介绍了MySQL中的数据查询语言DQL,包括如何创建数据库和表,插入数据,以及各种查询操作,如查询指定列、去重、计算、条件、范围、模糊、排序、聚合和分组查询。还讲解了LIMIT用于数据限制和HAVING在分组后的过滤。最后,提到了在Java中操作数据库的JDBC。

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

DQL: Data Query Language 数据查询语言

用来查询表中的数据,只是把数据查询显示出来而已,不会更改数据库中的数据。

我们先来创建数据库和表


create database xeon;

use xeon;

create table user
(
    id     int auto_increment primary key comment 'id',
    name   varchar(20)                        not null comment '姓名',
    age    int                                not null comment '年龄',
    gender enum ('保密', '男', '女') default '保密' null comment '性别',
    height int                                null comment '身高',
    weight int                                null comment '体重'
)
    comment '用户表';


插入点数据


insert into user(name, age, gender, height, weight)
VALUES ('yzq', 27, '男', 173, 130);
insert into user(name, age, gender, height, weight)
VALUES ('喻志强', 27, '男', 173, 130);
insert into user(name, age, gender, height, weight)
VALUES ('xeon', 20, '保密', 180, 150);
insert into user(name, age, gender, height, weight)
VALUES ('xeon', 27, '男', 168, 130);
insert into user(name, age, gender, height, weight)
VALUES ('张三', 19, '男', 176, 140);
insert into user(name, age, gender, height, weight)
VALUES ('王美丽', 18, '女', 160, 100);
insert into user(name, age, gender, height, weight)
VALUES ('李漂亮', 22, '女', 158, 98);
insert into user(name, age, gender, height, weight)
VALUES ('赵有才', 12, '男', 158, 80);
insert into user(name, age, gender, height, weight)
VALUES ('钱多多', 50, '保密', 163, 120);
insert into user(name, age, gender, height, weight)
VALUES ('孙悟空', 500, '保密', 158, 90);

好了 数据准备好了,我们来看下查询语句

查询所有列的所有数据
语法:

select * from 表名;

示例:

select * from user;

在这里插入图片描述

查询指定列的所有数据

语法:

select 列名,列名,列名 from 表名;

示例:

select name,age,gender from user;

在这里插入图片描述

查询时给某个列名起个别名
语法:

select 列名 as 别名,列名 as 别名 from 表名;

示例:

select name as 姓名, age as 年龄 from user;

在这里插入图片描述

查询时去重

语法:

select distinct 字段名,字段名
from 表名;

示例:

select distinct age from user;

可以看到只查出来3条数据,原因是等于27的数据有三条,去重查询默认返回第一条
在这里插入图片描述

我们加个字段去重查询在看下结果:

select distinct name,age from user;

结果如下,只有当所有指定字段的值相同时才会被去重
在这里插入图片描述

查询结果计算
需要注意的是参与计算的列的值必须是数值类型

示例:查询时年龄加10

select name, age + 10 from user;

在这里插入图片描述
查询的时候计算身高和体重的总和

select name,user.height+user.weight from user;

在这里插入图片描述

条件查询
这个也是最常用的查询,只查出满足条件的数据

语法:

select 字段 from 表名  where 条件;

比较运算符查询

> 	大于
<	小于
<=	小于等于
>=	大于等于
=	等于
!=	不等于


示例:

# 查出年龄大于20的数据
select * from user where age>20;

在这里插入图片描述

逻辑运算符查询

and 多个条件同时满足
or 多个条件其中一个满足
not 不满足

示例:

# 查出年龄大于20且性别为男的数据
select * from user where age>20 and gender='男';

在这里插入图片描述

范围查询
语法:

select 字段 from 表名  where 字段 between 范围值 and 范围值;

示例:

# 查出年龄在20-30之间的数据
select * from user where age between 20 and 30;

在这里插入图片描述

模糊查询

语法:

select 字段 from 表名  where 字段 like '通配符字符串'

通配符有两个:

  % 	表示一个或多个字符
  _ 	表示一个字符

我们再来插入几条数据

insert into user(name, age, gender, height, weight) values ('孙行者','100','男',130,70);
insert into user(name, age, gender, height, weight) values ('土行孙','100','男',130,70);
insert into user(name, age, gender, height, weight) values ('孙策','27','男',190,150);

先看看现在的数据:
在这里插入图片描述

查出姓名中以 孙 字开头的数据
示例:

select * from user where name like '孙%';

在这里插入图片描述
查出以 孙 字结尾的数据

select * from user where name like '%孙';

在这里插入图片描述

查出名字包含 孙 的数据

select * from user where name like '%孙%';

在这里插入图片描述

查出 孙字后面只有一个字符的数据

select * from user where name like '孙_'

在这里插入图片描述
查出孙字前面有两个字符的数据

select * from user where name like '__孙';

在这里插入图片描述
排序查询

排序查询时非常常用的查询,可以一个单个字段进行排序也可以以多个字段进行排序

asc:升序 默认值
desc : 降序

语法:

select 字段名 fromorder by 字段 [asc|desc],字段 [asc,desc];

示例:

# 查出所有数据按年龄升序排序
select * from user  order by age ;

在这里插入图片描述

# 查出年龄在20-50之间的数据 倒序排序
select * from user where age between 10 and 50 order by age desc ;

在这里插入图片描述

# 查出年龄在20-50之间的数据 按年龄降序,年龄相同,按身高升序
select * from user where age between 10 and 50 order by age desc,height ;

在这里插入图片描述
聚合函数查询

之前的查询都是横向查询,查出来都是一条条的数据(针对行),聚合函数是纵向的查询,主要针对列进行查询

常用的聚合函数

  • count 指定列的数量(值为null的不计入数量)
  • sum 指定列的数值的和 (非数值类型的视为0)
  • max 指定列中的最大值
  • min 指定列中的最小值
  • avg 指定列的平均值(非数值类型视为0)

示例:

查出年龄大于20的所有数据的个数

# 查出年龄大于20的所有数据的个数
select count(*) from user where age>20;

在这里插入图片描述
查出身高大于170所有数据的身高总和

# 查出身高大于170所有数据的身高总和
select sum(height)  from user where height>170;

在这里插入图片描述
查出年龄大于20岁的人的平均体重

# 查出年龄大于20岁的人的平均体重
select avg(weight)  from user where age>20;

在这里插入图片描述
查出所有数据中身高最高的值

# 查出所有数据中身高最高的值
select max(height) from user;

在这里插入图片描述
查出年龄在10-30岁之间,体重最低的值

# 查出年龄在10-30岁之间,体重最低的值
select min(weight) from user where age between 10 and 30;

在这里插入图片描述

分组查询

分组查询一般和聚合查询一起使用,主要是为了统计某一类的数据的数量。

语法:

select 字段,字段 from 表名 group by 分组字段 [having 条件];

直接查询的话只会返回每组数据的第一条数据,这样实际开发中没有什么意义,我们一般都是配合聚合函数一起使用。

示例:
将数据根据性别分组

select *  from user group by gender;

这里只会返回每组数据的第一条记录
在这里插入图片描述

配合聚合函数进行分组查询
示例:
找出表中性别字段3种值对应的数据个数

# 找出gender字段值对应的数据的个数
select gender,count(*) from user group by gender;

在这里插入图片描述
我们还可以给分组后的数据加条件
示例:

找出年龄在20-30之间,以性别分组,统计每组的数量,并只显示数量大于1的数据

我们先按照性别分组并查看每组的数量

select gender,count(*) from user where age between 20 and 30 group by gender

在这里插入图片描述
然后再加条件

# 找出年龄在20-30岁之间的人,按性别分组,只显示数量大于2的数据
select gender,count(*) from user where age between 20 and 30 group by gender having count(*)>1;

在这里插入图片描述

这里要注意下having和where的区别

where是在分组前对数据进行过滤,不能使用聚合函数
having是在分组后对数据进行过滤,且可以使用聚合函数

limit查询

limit查询也是很常用的查询,是对最终查出来的数据进行条数限制,一般出现在分页的业务场景中。

注意是对最终查询出来的数据进行限制,所以,limit都是在最后面的。

语法:

查询语句  limmit [offset] length
  • offset 偏移量,默认是0
  • length 限制的条数

示例:
查出用户表前5条数据

 select * from user limit 5;

在这里插入图片描述
查出年龄大于20并且性别为男的数据,从第单挑开始显示,显示10条

# 查出年龄大于20并且性别为男的数据,从第单挑开始显示,显示10条
select * from user where age>20 and gender='男' limit 3,10;

在这里插入图片描述
如果数据不够多,那就有多少条显示多少条。

好了,MySql中简单的查询就是这样。

下一篇我们来看看在Java代码中怎么去操作数据库

JDBC 详解


如果你觉得本文对你有帮助,麻烦动动手指顶一下,可以帮助到更多的开发者,如果文中有什么错误的地方,还望指正,转载请注明转自喻志强的博客 ,谢谢!

mysql常用查询测试及答案: 参考链接: http://blog.sina.com.cn/s/blog_767d65530101861c.html -------------------创建如下表---------------------- 1.创建表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4), birth YEAR, department VARCHAR(20), address VARCHAR(50) ); CREATE TABLE score ( id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT, stu_id INT(10) NOT NULL, c_name VARCHAR(20), grade INT(10) ); 2.为student表和score表增加记录向student表插入记录的INSERT 语句如下: INSERT INTO student VALUES( 901,'张老大', '男',1985,'计算机系', '北京市海淀区'); INSERT INTO student VALUES( 902,'张老二', '男',1986,'中文系', '北京市昌平区'); INSERT INTO student VALUES( 903,'张三', '女',1990,'中文系', '湖南省永州市'); INSERT INTO student VALUES( 904,'李四', '男',1990,'英语系', '辽宁省阜新市'); INSERT INTO student VALUES( 905,'王五', '女',1991,'英语系', '福建省厦门市'); INSERT INTO student VALUES( 906,'王六', '男',1988,'计算机系', '湖南省衡阳市'); 向score表插入记录的INSERT语句如下: INSERT INTO score VALUES(NULL,901, '计算机',98); INSERT INTO score VALUES(NULL,901, '英语', 80); INSERT INTO score VALUES(NULL,902, '计算机',65); INSERT INTO score VALUES(NULL,902, '中文',88); INSERT INTO score VALUES(NULL,903, '中文',95); INSERT INTO score VALUES(NULL,904, '计算机',70); INSERT INTO score VALUES(NULL,904, '英语',92); INSERT INTO score VALUES(NULL,905, '英语',94); INSERT INTO score VALUES(NULL,906, '计算机',90); INSERT INTO score VALUES(NULL,906, '英语',85); --------练习及答案---------- -- 3.查询student表的所有记录 -- SELECT * FROM student -- 4.查询student表的第2条到4条记录 -- SELECT * from student LIMIT 1,4 -- 5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息 -- SELECT s.id,s.name,s.department FROM student s -- 6.从student表中查询计算机系和英语系的学生的信息 -- SELECT * FROM student s WHERE s.department in ('英语系','计算机系') -- 7.从student表中查询年龄18~22岁的学生信息 -- SELECT *,2015-s.birth AS age FROM student s WHERE 2015-s.birth BETWEEN 20 and 25; -- SELECT *,2015-birth AS age FROM student s WHERE 2015-birth>=18 AND 2015-birth<=2 -- 8.从student表中查询每个院系有多少人 -- SELECT department, COUNT(1) FROM student s GR
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

XeonYu

码字不易,鼓励随意。

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

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

打赏作者

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

抵扣说明:

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

余额充值