因篇幅原因,本篇承接此篇->第八篇:SQL语法-DQL-数据查询语言-CSDN博客
本篇是对于SQL语法DQL语句的练习,因水平和精力有限(就不像前两篇的DDL,DML那样自出练习了)直接照搬了【黑马程序员】在哔哩哔哩的mysql数据库系列课程的练习->21. 基础-SQL-DQL-案例练习_哔哩哔哩_bilibili
一,题目描述
按照需求完成如下DQL语句编写
- 查询年龄为20,21,22,23岁的女性员工信息
- 查询性别为 男 ,并且年龄在 20-40 岁(含)以内的姓名为三个字的员工
- 统计员工表中,年龄小于60岁的,男性员工和女性员工的人数
- 查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序
- 查询性别为男,且年龄在20-40 岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序
二,表格提供
创建emp表后执行下面的DML语句,将数据添加到emp表中,以便练习题目
insert into emp (id,workno,name,gender,age,idcard,workaddress,entrydate)
values (1,1,'柳岩','女',20,'123456789012345678','北京','2000-01-01'), (2,2,'张无忌','男',18,'123456789012345670','北京','2005-09-01'),(3,3,'韦一笑','男',38,'123456789712345670','上海','2005-08-01'),(4,4,'赵敏','女',18,'123456757123845670','北京','2009-12-01'),(5,5,'小昭','女',16,'123456769012345678','上海','2007-07-01'),(6,6,'杨道','男',28,'12345678931234567X','北京','2006-01-01'),(7,7,'范骚','男',40,'123456789212345670','北京','2005-05-01'),(8,8,'黛绮丝','女',38,'123456157123645670','天津','2015-05-01'),(9,9,'范凉凉','女',45,'123156789012345678','北京','2010-04-01'),(10,10,'陈友凉','男',53,'123456789012345670','上海','2011-01-01'),(11,11,'张士诚','男',55,'123567897123465670','江苏','2015-05-01'),(12,12,'常遇春','男',32,'123446757152345670','北京','2004-02-01'),(13,13,'张三丰','男',88,'123656789012345678','江苏','2020-11-01'),(14,14,'灭绝','女',65,'123456719012345670','西安','2019-05-01'),(15,15,'胡青牛','男',70,'12345674971234567X','西安','2018-04-01'),(16,16,'周芷若','女',18,null,'北京','2012-06-01');
题解
(一)建表
在自定义的【test】数据库中创建emp表后添加表中相应字段,注意数据类型和长度的合理分配!
(二)添加数据
将本篇【二,表格提供】的DML语句复制到图形化管理工具中执行,添加数据
(三)查询年龄为20,21,22,23岁的女性员工信息
直接在基础查询语句的基础上限定查询条件为【WHERE gender='女' and age IN (20, 21, 22, 23)】即可,注意两个条件的逻辑关系是并且,用and关键字或&&符号连接
SELECT * FROM emp WHERE gender='女' and age IN (20, 21, 22, 23);
(四)查询性别为 男 ,并且年龄在 20-40 岁(含)以内的姓名为三个字的员工
在(三)的基础上对性别和年龄稍作修改,然后多加一个条件【NAME LIKE "___"】使用模糊匹配的下划线(三条下划线)来筛选名字只有三个字的记录,也要用并且的关系连接
SELECT * FROM emp WHERE gender='男' and age BETWEEN 20 AND 40 AND NAME LIKE "___";
(五) 统计员工表中,年龄小于60岁的,男性员工和女性员工的人数
(注,答案不唯一,符合要求即可)
使用【where】关键字限制年龄小于60,使用【group by】关键字按性别分组,对于查询的结果,显示gender字段(性别)和count(*)字段(count聚合函数统计人数)
SELECT gender,COUNT(*) FROM emp WHERE age < 60 GROUP BY gender;
(六) 查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序
使用【where】关键字限制年龄小于等于35,使用【order by】关键字先按年龄升序(asc关键字)再按入职时间 降序(desc关键字),对于查询的结果,显示name和age字段
SELECT NAME, age FROM emp WHERE age<=35 ORDER BY age ASC, entrydate DESC;
(七)查询性别为男,且年龄在20-40 岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序
where条件和(四)一样,order by排序规则和(六)相同,在此基础上需要使用【limit】关键字对查询的结果分页,【limit 0, 5】即查询第一页的内容,每页显示5条记录,其中因为是第一页故索引0可以省略不写,写成【limit 5】即可
另外要注意的是关键字的编写顺序,【order by】关键字应该在【where】之后,【limit】之前