【Mysql】基础篇:DQL(data query language):查询数据库中表的记录——select

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 【Mysql】基础篇:DQL(data query language):查询数据库中表的记录——select,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在这里插入图片描述

  • 博主简介:努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。
  • 博主主页: @是瑶瑶子啦
  • 所属专栏: Mysql从入门到精通
  • 近期目标:写好专栏的每一篇文章

在这里插入图片描述

一、DQL(data query language)

数据查询语言,用于查询数据库表中的记录——select

在实际业务逻辑中,查询操作是远大于增、删、改操作的。

想象以下,当我打开购物软件,输入关键字,进行搜索,其实就是在数据库中进行查询数据的操作,再把数据返回到页面;当我们选中价格范围,那就是一个条件查询;同时可以对查询的结果根据销量、评价等进行排序…这些都是属于数据库查询操作

二、DQL语句:语法结构

  • select 字段列表:选中要查询哪些字段
  • from 表名列表:选中在哪个表中查询(目前基于单表查询)
  • where 条件列表:添加查询条件(根据什么条件来查询,价格范围…)
  • group by 分组字段列表:
  • having 分组后条件列表
  • order by 排序字段列表
  • limit 分页参数

三、查询操作

3.1:基础查询

  • 1、查询并返回指定表中多个字段数据
select 字段1,字段2,字段3... form 表名;

上面是指定查询指定表中的指定字段,可以使用通配符*查询指定表中的所有字段

slect * from 表名;

注意:但是在实际项目中查询所有字段不使用通配符的这种方法;有两个原因:1,不直观(可读性不强);2,执行效率低

  • 2、给查询字段设置别名,增强可读性
select 字段1 [as 别名1],字段2 [as 别名2]... from 表名;
  • 3、去除重复记录
select distinct 字段列表 from table;

3.2:条件查询(where)

  • 语法(在指定表中根据where 后面条件的限制查询指定字段)
select 字段列表 from 表名 where 条件列表;
  • 关于where后的条件
    在这里插入图片描述

注意:

  • 范围查询between ... and ...between后面跟最小值,and后面跟最大值
  • 逻辑运算符and&&更常用

举例:

select * from emp where age = 88;
select * from emp where age <= 20;
select * from emp where idcard is null;
select * from emp where idcard is not null;
select * from emp where age != 88;
select * from emp where age <> 88;
select * from emp where age >=15 and age <=20;
select * from emp where age between 15 and 20;
select * from emp where gender = '女' and age < 25;
select * from emp where age = 18 or age = 20 or 40;
select * from emp where age in(18,20,40);
select * from emp where name like '__'; #查询名字为两个字的员工信息(使用两个占位符)
select * from emp where idcard like '%x'; #查询身份证号最后一位是`x`的员工信息

3.3:聚合函数(count max,min)

3.3.1:什么是聚合函数

使用聚合函数,可以将一列数据作为一个整体进行纵向计算。都是作用于表中某一列

3.3.2:常见聚合函数

聚合函数 功能
count 统计某一列或者整张表的记录数
max 求某一列最大值
min 求某一列最小值
avg 求某一列平均值
sum 求和(某一列)

3.3.3:聚合函数怎么用

  • 对指定表中指定字段数据使用聚合函数
select 聚合函数(字段列表) from 表名;

注意:null值数据不参与聚合函数运算

举例:

#统计员工数量
select count(*) from emp;
 #统计企业员工的平均年龄
 select avg(age) from emp;
 #求所有员工中最大年龄
 select max(age) from emp;
 #求最大年龄
 select min(age) from emp;
 #查询所有在西安工作的员工的年龄之和
 select sun(age) from emp where workaddressed = '西安';

3.4:分组查询(group by)

  • 语法:在指定表中根据条件where查询指定字段,并根据分组字段进行分组(可加上分组后的过滤条件)
select 字段列表 from 表名 where 条件 group by 分组字段名 [having 分组后进行过滤的条件];
  • 注意
    • 执行顺序:where > 聚合函数 >having
    • 查询的字段一般为:聚合函数和分组依据字段,查询其他字段无意义
  • where 和 having 区别
    • 执行顺序:where条件是在分组前进行数据过滤,having是在分组之后,对每个组别进行数据过滤
    • where 不能对聚合函数进行判断,having可以
      举例:
#根据性别进分组,统计男性员工和女性员工的数量
select gender,count(*) from emp group by gender;
#根据性别进行分组,统计男性员工和女性员工的平均年龄
select gender,avg(age) from emp group by gender;
 #查询年龄小于45的员工,并且根据工作地址进行分组,获取员工数量大于等于3的工作地址
 select workaddress,count(*) from emp where age < 45 group by workaddress having count(*) >= 3;

3.5:排序查询(order by)

  • 语法:在指定表中查询指定字段,并根据排序字段及其排序方式进行排序
select 字段列表 from 表名 ordered by 字段1 排序方式1,字段2 排序方式2;
  • 排序方式:分为两个
    • asc: Ascending的简写
    • desc: Descending的简写
  • 注意
    • 之前的那个desc(describe)是查看表结构,这个desc是降序
    • 默认就是asc升序排序,所以当排序方式为升序时,可以省略asc
    • 多字段排序,以第一个字段为第一关键字,第二个字段为第二关键字

举例:

#根据年龄对公司员工进行升序排序,如果年龄相同,再安装入职时间进行降序排序
select * from emp order by age asc, entrydate desc;

3.6:分页查询(limit)

  • 语法:查询从指定索引index开始,包括指定索引的n条记录
select 字段列表 from 表名 limit 起使索引index,查询记录数n;
  • 注意
    • 如何记忆呢?把表中的每条数据,想成数组中的一个个元素,起使索引和数组下标一样,从0开始,那么分页查询就代表从索引为index开始,包括index的从前往后n条记录/字段

    • 起使索引 = (查询页码-1)* 每页显示的记录数;页码一般都是从1开始,所以需要-1

    • 分页查询语法,不同数据库有其各自不同的实现,对于mysql数据库来说就是limit

    • 如果查询的就是第一页的数据,那么起使索引可以省略,查询语句简写为:select 字段列表 from 表名 limit 查询记录数n;

举例:

# 查询第一页员工数据,每页展示10条记录
select * from emp limit 0,10;
select * from emp limit 10;

# 查询第二页数据,每页展示10条记录
select * from emp limit 10,10;

四、案例练习

  • 创建表格
-- 数据准备
create table emp
(
    id      int comment '编号',
    worknum varchar(10) comment '工号',
    name    varchar(10) comment '姓名',
    gender  char comment '性别',
    age     tinyint unsigned comment '年龄',
    idcard  char(18) comment '身份证号码',
    workaddress varchar(50) comment '工作地址',
    entrydate date comment '入职时间'
)comment '员工表';
  • 增加数据
-- 添加数据
insert into emp(id,worknum,name,gender,age,idcard,workaddress,entrydate)
values (1,'1','瑶瑶子','女',19,'123456789012345671','北京','2004-10-03'),
       (2,'2','李明','男',20,'123456789012345672','上海','2003-2-1'),
       (3,'3','李华','男',14,'123456789012345673','武汉','2005-4-2'),
       (4,'4','张小红','女',20,'123456789012345674','武汉','2005-4-2'),
       (5,'4','黄小丫','女',22,'123456789012345675','天津','2006-4-2'),
       (6,'6','张小红','女',23,'123456789012345676','武汉','2007-3-9'),
       (7,'7','李晓东','男',64,'123456789012345677','哈尔滨','1999-11-4'),
       (8,'8','张浩','男',35,'123456789012345678','大连','2001-5-4');

  • 操作练习
#1、查询年龄为20、22、23岁女性员工信息
select * from emp where gender = '女' and age in(20,21,22,23);

在这里插入图片描述

#2、查询性别为男,并且年龄再20-40以内(含),且姓名为3个字以内的员工
select * from emp where gender = '男' and age between 20 and 40 and name like '___';

在这里插入图片描述

#3、统计员工表中,年龄小于60的男性和女性数量
select gender, count(*) from emp where age < 60 group by gender;

在这里插入图片描述

#4、查询所有年龄小于35岁的员工的姓名、年龄,并对查询结果安装年龄升序排序,入职时间为第二关键字降序排序
select name,age from emp where age <= 35 order by age asc , entrydate desc ;

在这里插入图片描述

#5、查询性别为难,且年龄为20-40岁(含)以内的5个员工信息,并对查询结果安装年龄升序,入职时间降序
 select * from emp where gender = '男' and age between 20 and 40 order by age asc ,entrydate desc limit 5;

在这里插入图片描述

五、select语句执行顺序比较:

在这里插入图片描述

注意:对于selct语句执行顺序 FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY -> LIMIT


在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142422.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!