MySQL 从入门到入魔 (02)
练习:
创建数据库 mydb4 字符集 utf8 并使用
在数据库中创建员工表 emp 字段:id,name,sal,deptId(部门 id) 字符集 utf8
创建部门表 dept 字段:id,name,loc(部门地址) 字符集 utf8
部门表插入以下数据: 1 神仙部 天庭 2 妖怪部 盘丝洞
员工表插入一下数据: 1 悟空 5000 1 , 2 八戒 2000 1 , 3 蜘蛛精 8000 2, 4 白骨精 9000 2
查询工资 6000 以下的员工姓名和工资
修改神仙部的名字为取经部
给员工添加奖金 comm 字段
修改部门 id 为 1 的部门奖金为 500
把取经部的地址改成五台山
删除两个表
主键约束 primary key
主键: 表示数据唯一性的字段称为主键
约束: 约束是创建表时给表字段添加的限制条件
主键约束: 限制主键的值唯一且非空
测试:
###主键+自增 auto_increment
自增规则:从历史最大值+1
测试:
导入*.sql 文件
把下载的 emp.sql 放到 d 盘根目录
source d:/emp.sql;
如果导入后 执行 select * from emp 发现有乱码 执行 set names gbk;
去重 distinct
查询员工表中有哪些不同的工作
is null 和 is not null
判断某个字段的值为 null 时不能使用=
查询没有上级领导的员工信息
查询有上级领导的员工姓名和上级领导编号
比较运算符 > < >= <= = !=和<>
查询员工工资小于等于 3000 的员工姓名和工资
查询工作不是程序员的员工姓名和工作(两种写法)
and 和 or
如果查询数据时使用了多个条件,多个条件同时满足使用 and, 多个条件满足一个就可以使用 or
and 类似 java 中的 && , or 类似 java 中的||
查询 1 号部门工资大于 1500 的员工信息
查询工作是人事或者工资大于 3000 的员工姓名,工作和工资.
in(x,y,z)
当查询某个字段的值为多个的时候使用 in 关键字
查询工资为 1500,3000,5000 的员工信息
between x and y
查询工资在 1000 到 2000 之间的员工信息(包括 1000 和 2000)
查询工资在 1000 到 2000 以外的员工信息
查询工资不等于 5000,3000,800 的员工信息
综合练习
查询有上级领导并且是 3 号部门的员工信息
查询 2 号部门工资在 1000 到 2000 之间的员工姓名 工资和部门编号
查询 1 号部门工资为 800 和 1600 的员工信息
查询 1 号和 2 号部门工资高于 2000 的员工信息
查询员工表中出现的部门编号有哪几个
模糊查询 like
_:代表 1 个未知字符
%:代表 0 或多个未知字符
举例:
以 x 开头 x%
以 x 结尾 %x
包含 x %x%
第二个字符是 x _x%
倒数第三个是 x %x__
以 x 开头 倒数第二个是 y x%y_
查询员工表中姓孙的员工姓名
查询名字以精结尾的员工信息
查询工作中包含销售的员工姓名和工作
排序 order by
格式: order by 字段 asc(默认升序)/desc 降序 写在 SQL 语句的后面
查询工资高于 2000 的员工信息,按照工资升序排序
查询每个员工的姓名,工资和部门编号,按照部门编号降序排序
多字段排序,在 order by 后面写多个字段 通过逗号分隔
查询每个员工的姓名,工资和部门编号,按照部门编号降序排序,如果部门编号一致则按照工资降序排序
查询 1 号和 2 号部门的员工信息按照部门编号升序排序,如果部门编号一致则按照工资降序排序
分页查询
格式: limit 跳过的条数,请求条数(也代表每页条数) , 写在 SQL 语句的最后
请求员工表中按照工资降序排序前 3 条数据(请求第一页的 3 条数据)
查询员工表中工资降序排序的第 4 5 6 条数据
查询员工表中第三页的 2 条数据(请求第 5 和第 6 条数据)
查询工资最低的员工信息
查询员工表中工资升序第四页的 2 条数据
综合练习题
查询员工表中名字里第二个字是八的员工姓名和工资
查询工作中包含售字的员工姓名和工作
查询工资高于 1000 块钱的员工姓名和工资,按照工资降序排序,查询第二页的 3 条数据
数值计算+ - * /
查询每个员工的姓名,工资和年终奖(3 个月的工资)
别名,可以对查询的字段起别名
查询每个员工姓名,工资和涨薪 5 块钱之后的工资
聚合函数
聚合函数是对查询的多条数据进行统计查询,包括:求平均值,最大值,最小值,求和,计数
平均值 avg
查询 1 号部门的平均工资
查询程序员的平均工资
最大值 max
查询 3 号部门的最高工资
最小值 min
查询销售的最低工资
求和 sum
查询 2 号部门的工资总和
计数 count
查询工资高于 2000 的员工人数
查询 2 号部门的人数
练习题
查询员工表中工资高于 2000 的员工姓名和工资,按照工资升序排序,查询第二页的 2 条数据
查询和销售相关的工作的工资总和
查询程序员人数
查询 1 号部门中有领导的员工中的最高工资
查询 2 号部门的最高工资和最低工资 起别名
查询 1 号部门里面名字中包含空字的员工姓名
分组查询
题目需求中每个 xx 就以 xx 作为分组的字段
查询员工表的平均工资
查询 1 号部门的平均工资
查询每个部门的平均工资
查询每个工作的最高工资
查询每个部门的人数
查询每种工作的工资总和
查询每个部门工资高于 1000 块钱的员工人数
查询 1 号和 2 号部门的最高工资
查询 1 号和 2 号部门中每种工作的工资总和
having
where 后面只能写普通字段条件,聚合函数不能写在 where 后面
having 后面专门写聚合函数的条件,而且是和分组查询结合使用
各个关键字的顺序: select .....from 表名 where 普通字段条件 group by 分组字段名 having 聚合函数条件 order by 排序字段名 limit ...;
查询每个部门的平均工资,只查询平均工资高于 2000 的信息
查询每种工作的人数,只查询人数为 1 的信息
查询每个部门的平均工资,只查询工资在 1000 到 3000 之间的,并且过滤掉平均工资低于 2000 的信息.
综合练习
查询没有上级领导的员工编号 empno,姓名,工资
select empno,ename,sal from emp where mgr is null;
查询有奖金的员工姓名和奖金
select ename,comm from emp where comm>0;
查询名字中包含精的员工姓名和工资
select ename,sal from emp where ename like '%精%';
查询名字中第二个字是八的员工信息
select * from emp where ename like '_八%';
查询 1 号部门工资大于 2000 的员工信息
select * from emp where deptno=1 and sal>2000;
查询 2 号部门或者工资低于 1500 的员工信息
select * from emp where deptno=2 or sal<1500;
查询工资为 3000,1500,5000 的员工信息按照工资升序排序
select * from emp where sal in(3000,1500,5000) order by sal;
查询 3 号部门的工资总和
select sum(sal) from emp where deptno=3;
查询每个部门工资大于 1000 的员工人数,按照人数升序排序
select deptno,count() from emp where sal>1000 group by deptno order by count();
查询每种工作中有领导的员工人数按照人数降序排序
select job,count() from emp where mgr is not null group by job order by count() desc;
查询所有员工信息,按照部门编号升序排序,如果部门编号一致则工资降序
select * from emp order by deptno,sal desc;
查询有领导的员工,每个部门的编号和最高工资
select deptno,max(sal) from emp where mgr is not null group by deptno;
查询有领导的员工,按照工资升序排序,第 3 页的 2 条数据
select * from emp where mgr is not null order by sal limit 4,2;
查询每个部门的工资总和,只查询有上级领导的员工并且要求工资总和大于 5400,最后按照工资总和降序排序,只查询结果中的第一条数据
deptno,sum(sal) from emp where mgr is not null group by deptno having sum(sal)>5400 order by sum(sal) desc limit 0,1;
版权声明: 本文为 InfoQ 作者【海拥(haiyong.site)】的原创文章。
原文链接:【http://xie.infoq.cn/article/1cbb58c64a776b94b53abf2a5】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论