首页 > 数据库 >SQL——DQL用来查询数据库表中的记录(MySQL)

SQL——DQL用来查询数据库表中的记录(MySQL)

时间:2024-09-05 18:50:54浏览次数:12  
标签:表中 count -- SQL 查询 emp 查询数据库 tb select

DQL 英文全称是 Data Query Language( 数据查询语言 ),用来查询数据库表中的记录。

关键字:select

一、前言

select    字段列表   from 表名列表 --基本查询

where    条件列表-----条件查询(where)

group by  分组字段列表  having 分组后条件列表--分组查询(group by)

order by   排序字段列表----排序查询(order by)

limit       分页参数----分页查询(limit)  

二、基本查询

(一)、语法

 (1)查询多个字段:select 字段1, 字段2, 字段3  from 表名;

 (2)查询所有字段(通配符):select * from 表名;

 (3)为字段设置别名:select 字段1[ as 别名1 ], 字段2[ as 别名2 ] from 表名;

 (4)去除重复记录:select distinct 字段列表 from 表名;

(二)、相应例子以及对应注意事项

 (1)查询指定字段

select name,entrydate from tb_emp;

 (2)查询所有字段

-- 推荐使用
select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp;
-- 不推荐 不直观,性能低
select *from tb_emp;

注:通配符*号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)。

 (3)查询所有员工的name 、entrydate,并起别名(姓名、入职日期)

select name as 姓名,entrydate as 入职日期 from tb_emp;-- 别名后加空格,与from分开 否则会认为from为别名一部分
select name as '姓名',entrydate as '入职日期'from tb_emp;
select name '姓名', entrydate '入职日期'from tb_emp;-- as后加空格  as可以不加,不加用空格代替

 (4)查询已有员工关联了哪几种职位(不要重复)

select distinct job from tb_emp;

相应建表语句(数据记录中有一个数据记录为null)

job         tinyint unsigned             null comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管',

三、条件查询( where )

(一)、语法

条件查询:select  字段列表  from  表名  where  条件列表;

(二)、运算符及其功能总结

比较运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<>  或  !=不等于
between ... and ...在某个范围之内(含最小、最大值)
in( ... )在in之后的列表中的值,多选一
like  占位符模糊匹配( _ 匹配单个字符,% 匹配任意个字符)
is  null是null

逻辑运算符功能
and  或  &&并且(多个条件同时成立)
or    或  ||或者(多个条件任意一个成立)
not  或  !非 ,不是

(三)、例子

-- ---------条件查询-----------
-- 1、查询姓名为杨逍的员工
select *from tb_emp where name= '杨逍';-- 要用''、 不能用""——名字为字符串

-- 2、查询id小于等于5
select *from tb_emp where id<=5;

-- 3、查询 没有 分配职位 的员工信息(job=null)
select *from tb_emp where job is null;

-- 4、 查询有职位的员工信息
select *from tb_emp where job is not null;

-- 5、查询 密码不等于’123456‘ 的员工信息
select *from tb_emp where password !='123456';
select *from tb_emp where password <> '123456';

-- 6、查询 入职日期 在’2000-01-01‘(包含) 到 ’2010-01-01‘(包含) 之间 的员工信息
select *from tb_emp where entrydate>='2000-01-01'  and entrydate<='2010-01-01';
select *from tb_emp where entrydate between '2000-01-01'  and '2010-01-01';

-- 7、查询 入职日期 在’2000-01-01‘(包含) 到 ’2010-01-01‘(包含) 之间 且性别为女 的员工信息
select *from tb_emp where entrydate between '2000-01-01'  and '2010-01-01' and gender=2;

-- 8、查询 职位是 2(讲师)或 3(学工主管)或 4(教研主管) 的员工信息
select *from tb_emp where job=2 or job=3 or job=4;
select *from tb_emp where job in(2,3,4);

-- 9、查询 姓名 为两个字 的员工信息
select *from tb_emp where name like '__';

-- 10、查询 姓 ’张‘ 的员工信息 即查询第一个字符为’张‘的
select *from tb_emp where name like '张%';-- 查询第一个姓张 后面无所谓即后面为任意个字符

四、分组查询( group by )

(一)、聚合函数

1、聚合函数语法

 (1)介绍:将一列数据作为一个整体,进行纵向计算

 (2)语法:select  聚合函数( 字段列表 )  from  表名;

函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和

2、注意事项

 (1)null值不参与所有聚合函数运算

 (2)统计数量有三种方法:count(*)、count(字段)、count(常量),推荐使用count(*)

 (3)count(*): *是通配符,通过count(*)就可以求取表的总数据量, 推荐使用——MySQL底层专门做了优化处理

 (4)用count函数统计表的数据量时一定要count一个非空字段(not null)

3、例子

-- 1、统计员工数量-----count
-- A、count(字段)----用count函数统计表的数据量时一定要count一个非空字段(not null)
select count(id) from tb_emp;
select count(job) from tb_emp;

-- B、count(常量)---count一个不为null的常量都行
select  count(1) from tb_emp;
select  count('a' ) from tb_emp;

-- C、count(*) *是通配符  
select count(*) from tb_emp;

注注:tb_emp表id为not null, job为null,且有两条数据job=null

    count(id)                                       count(job)

                 

用count函数统计表的数据量时一定要count一个非空字段(not null),因为聚合函数不对null进行计算,所以表中有两条数据job为null不参与运算。

-- 2、统计该企业最早入职的员工---min
select  min(tb_emp.entrydate) from tb_emp;

-- 3、统计该企业最迟入职的员工--max
select max(tb_emp.entrydate) from tb_emp;

-- 4、统计该企业员工id的平均值 --avg
select avg(tb_emp.id) from tb_emp;

(二)分组查询语法

1、语法

分组查询:select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having 分组后过滤条件 ];

2、where+条件和having+条件区别

(1)执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。

(2)判断条件不同:where不能对聚合函数进行判断(即where后不能跟聚合函数),而having可以

3、注意事项

(1)分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

(2)执行顺序:where>聚合函数>having

4、例子

(1)分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

根据性别分组,统计男性和女性员工的数量——count(*)

select * from tb_emp group by gender;            select id from tb_emp group by gender;

                    

无意义

select gender from tb_emp group by gender;
select gender,count(*) from tb_emp group by gender;

            

分组之后,以gender为条件分为1和2两组(即男和女),对这两组进行select  gender和count统计

(2)执行顺序:where>聚合函数>having

先查询入职时间在'2015-01-01'(包含) 以前的员工,并对结果根据职位分组,获取员工数量大于等于2的职位

select job,count(*) from tb_emp where entrydate<='2015-01-01' group by job having count(*)>=2;

注:首先执行where+条件,然后满足条件的数据执行分组语句和聚合函数,最后执行having+条件进行分组后条件的过滤。

五、排序查询( order by )

(一)、语法

排序查询:select 字段列表 from 表名 [ where 条件列表 ] [ group by 分组字段 ] order by 字段1 排序方式1,字段2 排序方式2;

(二)、排序方式

(1)ASC:升序(默认值)

(2)DESC:降序

(三)、注意事项

如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。以此类推

(四)、例子

-- 1、根据入职时间,对员工进行升序排序--asc
select *from tb_emp order by entrydate asc;
select *from tb_emp order by entrydate;

-- 2、根据 入职时间 对员工进行升序排序,入职时间相同,再按照 创建时间和更新时间 进行降序排序
select * from tb_emp order by entrydate,create_time desc ,update_time desc;

六、分页查询( limit )

(一)、语法

分页查询:select 字段列表 from 表名 limit 起始索引, 查询记录数;

(二)、注意事项

(1)起始索引从0开始,起始索引=(查询页码-1)*每页显示的记录数

(2)分页查询是数据库的方言(即数据库所特有的),不同数据库有不同的实现,MySQL中是LIMIT

(3)如果查询的是第一页数据,起始索引可以省略,直接简写成 limit 10( 10为每页显示的记录数)

(三)、例子

-- 1、查询 第一页 的员工数据,每页展示5条记录
select * from tb_emp limit 0,5;
select * from tb_emp limit 5;

-- 2、查询 第三页 员工数据,每页展示5条记录;
select * from tb_emp limit 10,5;

         

标签:表中,count,--,SQL,查询,emp,查询数据库,tb,select
From: https://blog.csdn.net/2401_83190311/article/details/141779975

相关文章

  • 填坑 Plugin 'mysql_native_password' is not loaded
    数据库从mysql5.7升级到mysql8.4,部分场景出现以下错误提示:Plugin'mysql_native_password'isnotloaded原因是:mysql_native_password插件(模式)在新版本中被弃用了,新模式为caching_sha2_password,需要启用一下旧模式。解决步骤:1.连接到数据库后,用命令SHOWPLUGINS查看插......
  • MySQL索引与事务(详细解析)
    目录1.索引作用 优势:2.索引的使用 2.1查看索引 2.2创建索引2.3删除索引 3.索引的数据结构4.事务 4.1事务的概念 4.2事务的使用 1.索引作用 优势: --索引类似一本书的目录,加快提高的查询的效率 --索引会额外的占用磁盘的空间,可能会拖慢插入......
  • MySQL 数据类型详解
    MySQL是一种广泛使用的关系型数据库管理系统,它支持多种数据类型以满足各种应用场景的需求。本文将详细介绍MySQL支持的数据类型、它们的使用场景以及实现原理,并通过图示帮助读者更直观地理解。目录简介数值类型整型浮点型定点型日期和时间类型字符串类型字符串二进制字......
  • Java项目: 基于SpringBoot+mysql蜗牛兼职网兼职平台管理系统(含源码+数据库+答辩PPT+
    一、项目简介本项目是一套基于SpringBoot+mysql蜗牛兼职网兼职平台管理系统包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。项目都经过严格调试,eclipse或者idea确保可以运行!该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用......
  • 20240907_004551 mysql 视图 创建视图
    很幸苦的获取数据SELECTstudent.id,student.nameASsname,class.nameAScname,class.detailFROMstudentINNERJOINclassONstudent.cid=class.id存在的问题下次要再拿这样的数据重写语句很麻烦希望上面的查询结果直接就作为虚拟表的本体创建视图语法createvi......
  • MysqlHelper
    #来源:https://blog.csdn.net/YZL40514131/article/details/127170427frompymysqlimport*classMysqlHelper:#todo数据库连接参数,可以定义多个,比如conn_params1,conn_params2,用于连接多个数据库,在类实例化时指定conn_params={'host':'localhost',......
  • 使用 Terraform 在 AWS 上创建 MySQL RDS 实例:自动化基础设施管理
    在如今的云计算时代,自动化基础设施管理成为了企业高效运维的关键。而Terraform作为一款强大的基础设施即代码(InfrastructureasCode,IaC)工具,可以帮助我们轻松实现云资源的自动化管理。本文将围绕如何使用Terraform在AWS上创建MySQLRDS实例展开,带你体验自动化管理带来的便......
  • 使用 MySQL 创建直方图:数据分析与可视化技巧,mysql创建视图表
    在数据分析和可视化过程中,直方图是一种常见的工具,用来显示数据的分布情况。使用MySQL创建直方图,可以帮助我们快速理解数据的整体趋势和分布特征。本文将介绍如何使用MySQL来创建直方图,并结合数据分析与可视化的技巧,让数据分析更加直观易懂。什么是直方图?直方图是一种用于展......
  • MySQL(四)日期函数 NULL函数 字符串函数
    日期函数函数描述NOW()返回当前的日期和时间CURDATE()返回当前的日期CURTIME()返回当前的时间DATE()提取日期或日期/时间表达式的日期部分EXTRACT()返回日期/时间的单独部分DATE_ADD()向日期添加指定的时间间隔DATE_SUB()从日期减去指定的时间......
  • 高基数 GroupBy 在 SLS SQL 中的查询加速
    作者:顾汉杰(执少)什么是高基数GroupBy简单来说,想要分析的数据,拥有超多的“唯一值计数”(DistinctCount),而我们需要对这些数据进行分组分析(如统计次数、排名、计算均值、分位值等)。高基数聚合计算在很多运营分析场景中都是刚需,它涉及对值不一样的海量数据进行分组聚合计算,以洞察用户行......