番禺做网站服务,去掉域名后的wordpress,app与手机网站的区别,通辽网站开发目录
基本语法
一、基础查询
1、查询多个字段
2、字段设置别名
3、去除重复记录
4、示例代码
二、条件查询
1、语法
2、条件列表常用的运算符
3、示例代码
三、分组查询
#xff08;一#xff09;聚合函数
1、介绍
2、常见的聚合函数
3、语法
4、示例代码
一聚合函数
1、介绍
2、常见的聚合函数
3、语法
4、示例代码
二分组查询
1、语法
2、where 与 having 区别
3、注意事项
4、示例代码
四、排序查询
1、语法
2、排序方式
3、注意事项
4、示例代码
五、分页查询
1、语法
2、注意事项
3、示例代码
六、DQL语言的实战应用
一执行顺序
二各个字句的作用
三实际书写代码的思路 DQL 英文全称是Data Query Language即数据查询语言用来查询数据库中表的记录。 在一个正常的业务系统中查询操作的频次是要远高于增删改的。 当我们去访问企业官网、电商网站在这些网站中我们所看到的数据实际都是需要从数据库中查询并展示的。而且在查询的过程中可能还会涉及到条件、排序、分页等操作。
基本语法
DQL 查询语句语法结构如下
select字段列表
from表名列表
where条件列表
group by分组字段列表
having分组后条件列表
order by排序字段列表
limit分页参数 我们在讲解这部分内容的时候会将上面的完整语法进行拆分分为以下几个部分. ① 基本查询 (不带任何条件)② 条件查询 (WHERE)③ 聚合函数 (count、max、min、avg、sum)④ 分组查询 (group by)⑤ 排序查询 (order by)⑥ 分页查询 (limit)
一、基础查询
1、查询多个字段 在基本查询的DQL语句中不带任何的查询条件查询的语法如下 select 字段1, 字段2, 字段3 ... from 表名 ; select * from 表名 ; 注意* 号代表查询所有字段在实际开发中尽量少用不直观、影响效率。
2、字段设置别名 select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ] ... from 表名; select 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... from 表名; 注意关键字 as 可以省略方括号表示可以不添加。
3、去除重复记录 select distinct 字段列表 from 表名; select 的意思是选择在这里选择对应的字段的意思就是选到了什么字段什么字段就显示出来那一列就显示出来没有被选择到的就不显示出来。 from 的意思是来自后面接表名也就是说明数据来源于哪个表。
4、示例代码
1查询指定字段 name, workno, age 并返回
select name,workno,age from emp; 2查询返回所有字段
select id ,workno,name,gender,age,idcard,workaddress,entrydate from emp;
select * from emp;
3查询所有人员的工作地址、起别名
select workaddress as 工作地址 from emp;
-- as可以省略
select workaddress 工作地址 from emp;
4查询公司员工的上班地址有哪些(不要重复)
select distinct workaddress 工作地址 from emp; 二、条件查询
1、语法 select 字段列表 from 表名 where 条件列表 ; 2、条件列表常用的运算符
1常用的比较运算符如下 2常用的逻辑运算符如下 3、示例代码
1查询年龄在15岁(包含) 到 20岁(包含)之间的员工信息
select * from emp where age 15 age 20;
select * from emp where age 15 and age 20;
select * from emp where age between 15 and 20;
2查询性别为女且年龄小于25岁的员工信息
select * from emp where gender 女 and age 25;
3查询姓名为两个字的员工信息
select * from emp where name like __;
--like后面有两条_说明匹配两个任意字符 4查询身份证号最后一位是X的员工信息
select * from emp where idcard like %X;
--%可以表示任意字符%X只要保证最后一位是X就行了
select * from emp where idcard like _________________X; 三、分组查询
一聚合函数
1、介绍 聚合函数即将一列数据作为一个整体进行纵向计算 。select 的作用就是选择要展现的列其后面可以接字段与聚合函数。 select 后面接字段就是正常输出一列而接聚合函数就是对这一列进行相应的处理再展示出来其行数会做出相应的调整。 直接引用表中原始字段未经过聚合函数处理这列则被称为非聚合列。而经过聚合函数处理的列则称为聚合列。 聚合函数可以单独使用但是如当与非聚合列一起出现时必须通过 group by 明确分组规则否则会导致语法错误。
2、常见的聚合函数 3、语法 select 聚合函数(字段列表) from 表名 ; 注意NULL值是不参与所有聚合函数运算的
4、示例代码
1统计该企业员工数量
select count(*) from emp; -- 统计的是总记录数
select count(idcard) from emp; -- 统计的是idcard字段不为null的记录数 2统计该企业员工的最大年龄
select max(age) from emp;
3统计西安地区员工的年龄之和
select sum(age) from emp where workaddress 西安; 二分组查询
1、语法 select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件]; 2、where 与 having 区别
1执行时机不同where是分组之前进行过滤不满足where条件不参与分组而having是分组之后对结果进行过滤。
2判断条件不同where不能对聚合函数进行判断而having可以。
3、注意事项
1分组之后查询的字段一般为聚合函数和分组字段查询其他字段无任何意义。[重点] 例如我根据性别 gender 分组分组结为男与女所以此时就会得到得到男与女两组即男女两行但这两行并没有数据仅知道一行存放男性的数据、一行存放女性的数据。 此时使用聚合函数max(age)就会在这两行呈现对应数据即男性的最大年龄与女性的最大年龄再接gender字段则在两行中分别填放男、女 但如果接 workplace 字段性别男或性别女会对应多个工作地址系统根本不知道显示哪个。所以 select 的后面只能接作为分组依据的字段或聚合函数。
2执行顺序 where group by 聚合函数 having
3支持多字段分组具体语法为group by columnA,columnB
4、示例代码
1根据性别分组 , 统计男性员工和女性员工的数量
select gender, count(*) from emp group by gender ;
2查询年龄小于45的员工 , 并根据工作地址分组 , 获取员工数量大于等于3的工作地址
select workaddress, count(*) address_count from emp where age 45 group by workaddress having address_count 3; 3统计各个工作地址上班的男性及女性员工的数量
select workaddress, gender, count(*) 数量 from emp group by gender , workaddress ; 四、排序查询 排序在日常开发中是非常常见的一个操作有升序排序也有降序排序。
1、语法 select 字段列表 from 表名 order by 字段1 排序方式1 , 字段2 排序方式2 ; 2、排序方式 asc升序(默认值) desc降序 3、注意事项
1如果是升序可以不指定排序方式ASC因为默认升序;
2如果是多字段排序当第一个字段值相同时才会根据第二个字段进行排序 ;
4、示例代码
1根据年龄对公司的员工进行升序排序
select * from emp order by age asc;
select * from emp order by age;
2根据入职时间, 对员工进行降序排序
select * from emp order by entrydate desc;3根据年龄对公司的员工进行升序排序 , 年龄相同 , 再按照入职时间进行降序排序
select * from emp order by age asc , entrydate desc; 五、分页查询 分页操作在业务系统开发时也是非常常见的一个功能我们在网站中看到的各种各样的分页条后台都需要借助于数据库的分页操作。
1、语法 select 字段列表 from 表名 limit 起始索引, 查询记录数 ; 2、注意事项
1起始索引从0开始起始索引 查询页码 - 1* 每页显示记录数。
2分页查询是数据库的方言不同的数据库有不同的实现MySQL中是LIMIT。
3如果查询的是第一页数据起始索引可以省略直接简写为 limit 10。
3、示例代码
1查询第1页员工数据, 每页展示10条记录
select * from emp limit 0,10;
select * from emp limit 10; 2查询第2页员工数据, 每页展示10条记录即起始索引 (页码-1) * 页展示记录数
select * from emp limit 10,10; 六、DQL语言的实战应用
一执行顺序 在讲解DQL语句的具体语法之前我们已经讲解了DQL语句的完整语法及编写顺序现在我们要来说明的是DQL语句在执行时的执行顺序也就是先执行哪一部分后执行哪一部分。 二各个字句的作用
① from指定要查询的表。
② where筛选满足条件的行。
③ group by按照指定列对结果进行分组。
④ having分组后筛选满足条件的行。
⑤ select选择要返回的列。
⑥ order by对结果进行排序。 所以说一条语句执行的完整过程是 from 先决定查询哪个表where 筛选满足条件的行group by再对指定的列进行分组没有参与分组的列可以忽略了因为根本select不出来接着having 对分组后的结果进行二次筛选筛选满足条件的行 在前置操作完成后select 就可以选择需要输出的列 order by可以对输出的结果进行相应的排序如果需要分页则可以使用limit。
三实际书写代码的思路 题目编写一个SQL查询找出入职日期在2022年之后所在部门员工平均工资超过5200的部门统计这些部门的员工数量最后按照员工数量从多到少排序。以下是表的具体内容
-- 创建员工表
create table 员工 (员工编号 int primary key,员工姓名 varchar(50),部门 varchar(50),工资 decimal(10, 2),入职日期 date
);-- 插入示例数据
insert into 员工表 (员工编号, 员工姓名, 部门, 工资, 入职日期)
values (1, 爱丽丝, 人力资源部, 5000, 2022-01-01),(2, 鲍勃, 信息技术部, 6000, 2022-03-15),(3, 查理, 人力资源部, 5500, 2022-05-20),(4, 大卫, 信息技术部, 7000, 2022-07-10),(5, 伊芙, 财务部, 4500, 2022-09-05); 写代码的思路其实就是“代码的书写顺序”语句的书写顺序符合的是人的思路语句的执行顺序符合的是计算机的逻辑。【重点】 我们可以把书写代码的过程分为三部分分组之前、分组、分组之后。 分组之前第一步要知道需要输出哪几列从哪个表得到数据即 select 与 from。根据“统计这些部门的员工数量”可以知道我们需要输出的有两列部门、数量数量需要使用聚合函数 count。接着找出分组之前的筛选条件(where)是“入职日期在 2022 年之后”。 分组然后要确定分组条件(group by)。我们已经知道了输出的两列是部门与数量因为输出的列除了聚合函数以外就是分组条件所以分组条件是部门。 分组之后确定分组后的筛选条件(having)与排序规则(order by)。接着由“所在部门员工平均工资超过5200的部门”可知在分组之后我们还要根据平均工资 5200 进行相应的筛选最后根据员工数量的多少进行排序。 三步之后即可得到以下代码
select department,count(employee_id)
fromemployees
where hire_date 2022-01-01
group by department
having avg(salary) 5200
order by count(employee_id) desc; 以上即为数据查询语言 DQL 的所有内容我们首先对整体语句拆分作逐个击破然后对其整体的执行过程与书写思路作讲解从而能在日常代码书写中将语句写出。