create database if not exists bilibili; #创建数据库bilibili use bilibili; #选择bilibili数据库,即可进行下面的代码演示 drop database if exists bilibili; #代码演示结束后删除bilibili数据库 show databases; #查看是否删除完成

 

-- 创建一个emp表格

 

-- 为emp表格的每一个字段添加数据

 

 

查询需求

 

-- 一、 基础查询

 

-- 1. 查询指定字段 name,workno,age 并返回

 

-- 2. 查询所有字段并返回

 

-- 3. 查询所有字段并返回,当字段比较多时,可使用通配符,但是实际开发中不建议使用,不符合开发规范

 

-- 4. 查询所有员工的工作地址,起别名,这个别名会在列头的位置,取代原来的列头(列头也叫字段)

 

-- 5. 查询所有员工的工作地址,起别名,as 可以省略

 

-- 6. 查询公司员工的上班地址(不要重复),即多个同一上班地址只输出其中一个

 

 

-- 二、 条件查询

 

-- 1. 查询年龄等于 88 的员工

 

-- 2. 查询年龄小于 20 的员工信息

 

-- 3. 查询年龄小于等于 20 的员工信息

 

-- 4. 查询年龄不等于 88 的员工信息,第一种写法

 

-- 5. 查询年龄不等于 88 的员工信息,第二种写法

 

-- 6. 查询没有身份证号的员工信息

 

-- 7. 查询有身份证号的员工信息

 

-- 8. 查询年龄在15岁(包含) 到 20岁(包含)之间的员工信息,第一种写法

 

-- 9. 查询年龄在15岁(包含) 到 20岁(包含)之间的员工信息,第二种写法

 

-- 10. 查询年龄在15岁(包含) 到 20岁(包含)之间的员工信息,第三种写法

 

-- 11. 查询性别为 女 且年龄小于 25岁的员工信息

 

-- 12. 查询年龄等于18 或 20 或 40 的员工信息,第一种写法

 

-- 13. 查询年龄等于18 或 20 或 40 的员工信息,第二种写法

 

-- 14. 查询姓名为两个字的员工信息,使用模糊匹配

 

-- 15. 查询身份证号最后一位是X的员工信息,使用模糊匹配,第一种写法

 

-- 16. 查询身份证号最后一位是X的员工信息,使用模糊匹配,第二种写法

 

 

-- 三、 聚合函数,注意所有的null值是不参与计算的

 

-- 1. 统计该企业员工数量,第一种写法

 

-- 2. 统计该企业员工数量,第二种写法,注意如果字段内容有一个是null,那这个null是不会算入计数的,望留意

 

-- 3. 统计该企业员工的平均年龄

 

-- 4. 统计该企业员工的最大年龄

 

-- 5. 统计该企业员工的最小年龄

 

-- 6. 查询一西安地区的员工有哪些

 

-- 7. 统计西安地区员工的年龄之和

 

 

-- 四、 分组查询, 通常配合聚合函数来操作

 

-- 1. 根据性别分组, 统计男性员工 和 女性员工的数量

 

-- 2. 根据性别分组, 统计男性员工 和 女性员工的平均年龄

 

-- 3. 查询年龄小于45的员工, 并根据工作地址分组, 第一种写法

 

-- 4. 查询年龄小于45的员工, 并根据工作地址分组,第二种写法

 

-- 5. 查询年龄小于45的员工, 并根据工作地址分组, 获取员工数量大于等于3的工作地址,也就是在分组的基础上再进行过滤

 

-- 6. 查询年龄小于45的员工, 并根据工作地址分组, 获取员工数量大于等于3的工作地址,为方便阅读需要给字段起别名,as可以省略

 

 

-- 五、 排序查询

 

-- 1. 根据年龄对公司的员工进行升序排序,asc可以省略,因为默认就是asc

 

-- 2. 根据年龄对公司的员工进行降序排序

 

-- 3. 根据入职时间,对员工进行降序排序

 

-- 4. 根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序。需要使用多字段排序,不难的

 

 

-- 六、分页查询,不同的数据库有不同的关键字,在MySQL中是limit

 

-- 1. 查询第1页员工数据,每页展示10条数据,第一种写法(起始索引从0开始)

 

-- 2. 查询第1页员工数据,每页展示10条数据,第二种写法(当查询第1页时,参数0可以省略)

 

-- 3. 查询第2页员工数据,每页展示10条数据。起始索引 = (查询页码-1) * 每页显示记录数

 

 

-- 七、DQL案例练习

 

-- 1. 查询年龄为20,21,22,23岁的员工信息

 

-- 2. 查询性别为 男 ,并且年龄在20(含)-40岁(含)以内的姓名为3个字的员工。第一种写法

 

-- 3. 查询性别为 男 ,并且年龄在20(含)-40岁(含)以内的姓名为3个字的员工。第二种写法

 

-- 4. 查询性别为 男 ,并且年龄在20(含)-40岁(含)以内的姓名为3个字的员工。第三种写法

 

-- 5. 统计emp表中,年龄小于60岁的,男性员工和女性员工的人数。性别进行分组,查询所有员工的男性和女性数量,查询之前先按照年龄过滤

 

-- 6. 查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。asc可省略,多字段排序

 

-- 7. 查询性别为男,且年龄在20-40岁(含)以内的前五个员工信息(要用分页查询),对查询的结果按年龄升序排序,年龄相同按入职时间升序排序

 

-- 注意在命令行输入括号不影响运算,只是方便直观的看代码 -- 注意如果同时有排序和分页,要先排序后分页,即order by写在limit前面,不然报错 -- 注意使用order by排序时,如果是升序则可以省略asc不写 -- 注意使用limit分页时,例如第一页的前五个数据limit 0,5 因为是第一页所以0可以省略不写 -- 注意使用limit分页时,如果最后筛选出来的数据只有4条,即使分页每页要求展示5条,在实际中只会显示4条 -- 注意如果查询员工信息就用*,查询其他就用对应字段名

 

 

-- 八、DQL执行顺序

-- 第一步、from 表名 -- 第二步、where 条件 -- 第三步、group by 分组字段 -- 第四步、having 分组后条件 -- 第五步、select 字段 -- 第六步、order by 排序字段 -- 第七步、limit 分页参数

 

-- 1. 查询年龄大于15的员工的姓名、年龄,并根据年龄进行升序排序

 

-- 2. 在上面的基础上,添加一个别名,as可以省略。验证先from,再执行where。原理:先from生成表别名,才能在where后面用别名调用age

 

-- 3. 在上面的基础上,继续使用这个别名,as可以省略。验证先from,再执行select。原理:先from生成表别名,才能在select后面用别名调用age和name

 

-- 4. 在上面的基础上,给e.name起一个别名为ename,给e.age起一个别名为eage,where后面改为eage。报错,即可验证先where再执行select

 

-- 5. 在上面的基础上,把where后面改回age,把order by后面的age换成eage。不报错,即可验证先执行select,再执行order by

 

-- 6. 上面的几个代码演示可证明最初第1小点的SQL语句执行顺序为from -> where -> select -> order by