c2c网站的特点及主要功能,win8风格网站开发实例,百度地图手机网站开发,建设小型网站价钱MySQL DQL 1、DQL语法与数据准备1.1 DQL语法1.2 数据准备 2、基础查询2.1 查询指定字段2.2 查询返回所有字段2.3 给查询结果起别名2.4 去除重复记录 3、条件查询3.1 条件查询语法3.2 条件查询案例分析 4、分组查询4.1 分组查询语法4.2 分组查询案例分析 5、排序查询5.1 排序查询… MySQL DQL 1、DQL语法与数据准备1.1 DQL语法1.2 数据准备 2、基础查询2.1 查询指定字段2.2 查询返回所有字段2.3 给查询结果起别名2.4 去除重复记录 3、条件查询3.1 条件查询语法3.2 条件查询案例分析 4、分组查询4.1 分组查询语法4.2 分组查询案例分析 5、排序查询5.1 排序查询语法5.2 排序查询案例分析 6、分页查询6.1 分页查询语法6.2 分页查询案例分析 1、DQL语法与数据准备
1.1 DQL语法
MySQL的数据查询语言Data Query LanguageDQL用于查询数据库中表的记录是MySQL中最常用的部分。
DQL语法的总体结构如下
select字段列表
from表名列表
where条件列表
group by分组字段列表
having分组后条件列表
order by排序字段列表
limit分页参数与DDL、DML相比DQL最为复杂。为满足不同的查询条件和查询数据的需求DQL可分为
基本查询条件查询where分组查询group by排序查询order by分页查询limit
1.2 数据准备
本文案例所需资料获取链接(来自黑马程序员)百度网盘链接fttx 下载百度网盘中提供的SQL脚本将DQL-数据准备.sql中的代码复制粘贴到IDEA中运行得到数据库表以及表中的内容。后续基于这些数据进行实例分析。
2、基础查询
2.1 查询指定字段
查询指定字段 name,entrydate 并返回。
-- 1. 查询指定字段 name,entrydate 并返回
select name, entrydate from tb_emp;查询结果
2.2 查询返回所有字段
查询返回所有字段可以列出所有的字段也可以使用通配符。
-- 2. 查询返回所有字段
-- 列出所有字段推荐
select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp;-- 使用通配符不推荐不直观性能低
select * from tb_emp;查询结果
2.3 给查询结果起别名
使用 as 关键字给查询结果取别名。 查询所有员工的 name,entrydate, 并起别名(姓名、入职日期)
-- 3. 查询所有员工的 name,entrydate, 并起别名(姓名、入职日期)
select name as 姓名, entrydate as 入职日期 from tb_emp;查询结果
2.4 去除重复记录
查询已有的员工关联了哪几种职位(不要重复)。 使用distinct可以去除重复记录还有一种方式是使用group by。
// distinct去除重复记录
select distinct job from tb_emp;
// group by分组去除重复记录
select job from tb_emp group by job;查询结果
3、条件查询
3.1 条件查询语法
条件查询语法
select 字段列表 from 表名 where 条件列表;条件列表中包含多种运算
比较运算符功能大于大于等于小于小于等于等于或!不等于between…and…在某个范围之内(含最小、最大值)in(…)在in之后的列表中的值多选一like 占位符模糊匹配(_匹配单个字符%匹配任意个字符)is null是null
逻辑运算符功能and 或 并且(多个条件同时成立)or 或 ||或者(多个条件任意一个成立)not 或 !非不是
3.2 条件查询案例分析
-- 1. 查询 姓名 为 杨逍 的员工
-- 通过 指定姓名为 杨逍 的员工
select * from tb_emp where name 杨逍;-- 2. 查询 id小于等于5 的员工信息
-- 设置查询条件 id 5
select * from tb_emp where id 5;-- 3. 查询 没有分配职位 的员工信息
-- 没有分配职位的员工 job 字段为 null
select * from tb_emp where job is null;-- 4. 查询 有职位 的员工信息
-- 有职位的员工 job 字段非空
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(包含) 之间的员工信息
-- 查询一个范围内的条件可以使用 between...and... 或者 配合使用
select * from tb_emp where entrydate between 2000-01-01 and 2010-01-01;
select * from tb_emp where entrydate 2000-01-01 and entrydate 2010-01-01;-- 7. 查询 入职时间 在 2000-01-01 (包含) 到 2010-01-01(包含) 之间 且 性别为女 的员工信息
-- 条件列表中有多个条件使用 and 或者 or 或者 或者 || 连接
select * from tb_emp where entrydate between 2000-01-01 and 2010-01-01 and gender 2;
select * from tb_emp where entrydate 2000-01-01 and entrydate 2010-01-01 and gender 2;-- 8. 查询 职位是 2 (讲师), 3 (学工主管), 4 (教研主管) 的员工信息
-- 查询条件是一个列表可以使用 in(...)
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 张%;4、分组查询
4.1 分组查询语法
分组查询语法
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];where和having的区别
执行机制不同where是分组之前进行过滤不满足where条件不参与分组having是分组后对结果进行过滤。判断条件不同where不能对聚合函数进行判断而having可以用聚合函数。
注意事项
分组之后查询的字段一般为聚合函数和分组字段查询其他字段无任何意义。执行顺序where 聚合函数 having。null值不参与任何聚合函数计算。
常用的聚合函数
函数功能count统计数量max最大值求指定字段的最大值min最小值求指定字段的最小值avg平均值求指定字段的平均值sum求和求指定字段的和
4.2 分组查询案例分析
-- 聚合函数
-- 1. 统计该企业员工数量
-- 使用count聚合函数统计数量有三种使用方式
select count(*) as 员工数量 from tb_emp; -- count(*) (推荐)
select count(name) as 员工数量 from tb_emp; -- count(字段)
select count(5) as 员工数量 from tb_emp; -- count(常量)-- 2. 统计该企业员工 ID 的平均值
-- 统计字段平均值使用avg函数
select avg(id) from tb_emp;-- 3. 统计该企业最早入职的员工
-- 统计字段最小值使用min函数这里where条件中返回了一个子表
select * from tb_emp where entrydate (select min(entrydate) from tb_emp);-- 4. 统计该企业最迟入职的员工
-- 统计字段最大值使用max函数
select * from tb_emp where entrydate (select max(entrydate) from tb_emp);-- 5. 统计该企业员工的 ID 之和
-- -- 统计字段和使用sum函数
select sum(id) from tb_emp;-- 分组
-- 1. 根据性别分组 , 统计男性和女性员工的数量
-- 使用 group by 对性别分组再返回性别以及对应的数量
select gender as 性别, count(*) 数量 from tb_emp group by gender;-- 3. 先查询入职时间在 2015-01-01 (包含) 以前的员工 , 并对结果根据职位分组 , 获取员工数量大于等于2的职位
-- 使用 group by 对职位分组通过 having 过滤掉 人数少于 2 的职位最后返回职位已经剩余人数
select job as 职位, count(*) as 数量 from tb_emp where entrydate 2015-01-01 group by job having count(job) 2;5、排序查询
5.1 排序查询语法
排序查询语法
select 字段列表 from 表名 [where 条件列表] [group by 分组字段] order by 字段1 排序方式1,字段2 排序方式2,...;排序方式有两种 · ASC升序默认值 · DESC降序 注意如果是多字段排序当第一个字段值相同时才会根据第二个字段进行排序。
5.2 排序查询案例分析
-- 1. 根据入职时间, 对员工进行升序排序
select * from tb_emp order by entrydate asc ;
select * from tb_emp order by entrydate ; -- 默认排序方式为升序asc可省-- 2. 根据入职时间, 对员工进行降序排序
select * from tb_emp order by entrydate desc ;-- 3. 根据 入职时间 对公司的员工进行 升序排序入职时间相同再按照 更新时间 进行降序排序
select * from tb_emp order by entrydate asc , update_time desc ;6、分页查询
6.1 分页查询语法
select 字段列表 from 表名 limit 起始索引,查询记录数;MySQL的索引是从 0 开始。 假设要查第 n 页每页展示 m 条数据通过公式可计算 起始索引 ( n - 1 ) * m; 查询记录数 m;
6.2 分页查询案例分析
分页查询较为简单。
-- 1. 从起始索引0开始查询员工数据, 每页展示5条记录
select * from tb_emp limit 0, 5;-- 2. 查询 第1页 员工数据, 每页展示5条记录
select * from tb_emp limit 0, 5;-- 3. 查询 第2页 员工数据, 每页展示5条记录
select * from tb_emp limit 5, 5;-- 4. 查询 第3页 员工数据, 每页展示5条记录
select * from tb_emp limit 10, 5;