MySQL基础(2)

MySQL基础(2)_第1张图片

综合练习题

练习的SQL文件在百度云,微信收藏查找

1. 创建数据库mydb2 字符集utf8并使用
create database mydb2 character set utf8;
use mydb2;
2. 在数据库中创建员工表emp 字段:id,name,sal,deptId(部门id) 字符集utf8
create table emp(id int,name varchar(20),sal int,deptId int)charset=utf8;
3. 创建部门表dept 字段:id,name,loc(部门地址) 字符集utf8
create table dept(id int,name varchar(20),loc varchar(20))charset=utf8;
4. 部门表插入以下数据: 1 神仙部 天庭       2 妖怪部  盘丝洞
insert into dept values(1,'神仙部','天庭'),(2,'妖怪部','盘丝洞');
5. 员工表插入一下数据:  1 悟空 5000 1    ,   2 八戒  2000  1   ,
					 3 蜘蛛精 8000  2  ,  4 白骨精 9000  2
insert into emp values(1,'悟空',5000,1),(2,'八戒',2000,1),(3,'蜘蛛精',8000,2),(4,'白骨精',9000,2);
6. 查询工资6000以下的员工姓名和工资  select name,sal from emp where sal<6000;
7. 修改神仙部的名字为取经部 update dept set name='取经部' where name='神仙部';
8. 给员工添加奖金comm字段 alter table emp add comm int;
9. 修改员工表中部门id为1的 奖金为500  update emp set comm=500 where deptId=1;
10. 把取经部的地址改成五台山  update dept set loc='五台山' where name='取经部';  
11. 删除两个表   12. 删除数据库  drop table emp;  drop table dept; drop database mydb2;

主键约束

  • 什么是约束: 约束是创建表字段时添加的限制条件

  • 什么是主键: 表示数据唯一性的字段称为主键

  • 主键约束: 限制主键的值 唯一且非空

  • 如何使用:

    ​ create table t1(id int primary key,name varchar(20));

    ​ insert into t1 values(1,‘aaa’); //正确

    ​ insert into t1 values(1,‘bbb’); //报错 Duplicate entry 重复数据

    ​ insert into t1 values(null,‘ccc’); //报错 Cannot be null 不能为空

自增 auto_increment

  • 自增规则:从历史最大值+1

  • 如何使用:

    create table t2(id int primary key auto_increment,name varchar(10));

    insert into t2 values(null,‘aaa’); 1

    insert into t2 values(null,‘bbb’); 2

    insert into t2 values(10,‘ccc’); 10

    insert into t2 values(null,‘ddd’); 11

    delete from t2 where id>=10;

    insert into t2 values(null,‘eee’); 12

导入*.sql 批处理文件

  • 下载emp.zip 解压得到emp.sql 把文件复制到d盘根目录 其它系统放到桌面

  • 在终端中执行以下指令 导入emp.sql里面的数据 到MySQL中

    source d:/emp.sql;

  • 测试: select * from emp; //如果有乱码 执行 set names gbk;

is null 和 is not null

  • 查询字段的值为null时 使用 is null 反之使用 is not null

    • 查询没有上级领导的员工信息

      select * from emp where mgr is null;

    • 查询有上级领导的员工信息

      select * from emp where mgr is not null;

去重 distinct

  • 查询员工表中出现的不同的工作

    select distinct job from emp;

  • 查询员工表中出现的部门编号 去掉重复

    select distinct deptno from emp;

比较运算符 > < >= <= = !=和<>

  1. 查询工资小于等于3000的员工姓名和工资

    select ename,sal from emp where sal<=3000;

  2. 查询工作不是程序员的员工姓名和工作 (两种写法)

    select ename,job from emp where job!=“程序员”;

    select ename,job from emp where job<>“程序员”;

and和or

  • and类似Java中的 && ,有多个条件同时满足时使用
  • or类型java中的|| , 有多个条件满足一个就行的时候使用
  1. 查询1号部门工资小于3000的员工信息

    select * from emp where deptno=1 and sal<3000;

  2. 查询3号部门或工作是程序员的员工信息

    select * from emp where deptno=3 or job=‘程序员’;

  3. 查询有上级领导中工资小于2000的员工姓名,工资和领导编号

    select ename,sal,mgr from emp where mgr is not null and sal<2000;

in关键字

  1. 查询工资值为3000,1500,5000的员工信息

    select * from emp where sal=3000 or sal=1500 or sal=5000;

    select * from emp where sal in(3000,1500,5000);

  2. 查询工作是程序员和CEO的员工姓名和工作

    select ename,job from emp where job in(“程序员”,“CEO”);

between x and y 在两者之间 包含 x和y

  1. 查询工资在1000-2000之间的员工信息

    select * from emp where sal>=1000 and sal<=2000;

    select * from emp where sal between 1000 and 2000;

  2. 查询工资在1000-2000以外的员工信息

    select * from emp where sal not between 1000 and 2000;

综合练习

  1. 查询有上级领导并且是3号部门的员工信息

    select * from emp where mgr is not null and deptno=3;

  2. 查询2号部门工资在1000到2000之间的员工姓名 工资和部门编号

    select ename,sal,deptno from emp where deptno=2 and sal between 1000 and 2000;

  3. 查询1号部门工资为800和1600的员工信息

    select * from emp where deptno=1 and sal in(800,1600);

  4. 查询1号和2号部门工资高于2000的员工信息

    select * from emp where deptno in(1,2) and sal>2000;

模糊查询 like

  • _: 代表1个未知字符
  • %:代表0或多个未知字符
  • 举例:
    • 以x开头 x%
    • 以x结尾 %x
    • 以x开头y结尾 x%y
    • 包含x %x%
    • 第二个字符是x _x%
    • 第二个是x倒数第三个是y x%y_
  1. 查询姓孙的员工姓名

    select ename from emp where ename like “孙%”;

  2. 查询工作中第二个字是售 的员工信息

    select * from emp where job like “_售%”;

  3. 查询名字中以精结尾的员工姓名

    select ename from emp where ename like “%精”;

  4. 查询名字包含僧字的员工姓名和工资

    select ename,sal from emp where ename like “%僧%”;

排序 order by

  • 格式: order by 字段名 asc升序(默认)/desc降序
  1. 查询每个员工的姓名和工资,按照工资升序排序

    select ename,sal from emp order by sal;

  2. 查询每个员工的姓名和工资,按照工资降序序排序

    select ename,sal from emp order by sal desc;

  3. 查询3号部门的员工信息 按照工资降序排序

    select * from emp where deptno=3 order by sal desc;

  4. 查询每个员工的姓名,工资和部门编号按照部门编号升序排序(多字段排序)

    select ename,sal,deptno from emp order by deptno,sal desc;

分页查询 limit

  • 格式: limit 跳过的条数,请求的条数(每页的条数)

  • 举例: limit (页数-1)*条数,条数

    • 请求1页的10条数据 limit 0,10
    • 请求第三页的5条数数据 limit 10,5
    • 请求第5页的8条数据 limit 32,8
    • 请求15页的10条数据 limit 140,10
  1. 查询员工表中第一页的5条数据

    select * from emp limit 0,5;

  2. 查询员工表中第2页的3条数据

    select * from emp limit 3,3;

  3. 查询员工表中第3页的2条数据

    select * from emp limit 4,2;

  4. 查询工资高于1000的员工信息 按照工资降序排序查询前三条

    select * from emp where sal>1000 order by sal desc limit 0,3;

数值计算 + - * / %

  • 对查询的某个字段的值 进行计算
  1. 查询每个员工的姓名,工资和年终奖(年终奖=5个月工资)

    select ename,sal,sal*5 from emp;

  2. 修改1号部门的员工工资 每人涨薪5块钱

    update emp set sal=sal+5 where deptno=1;

综合练习

1. 查询有领导并且工资在1000到3000之间的员工信息
select * from emp where mgr is not null and sal between 1000 and 3000;
2. 查询1号部门有几种不同的工作
select distinct job from emp where deptno=1;
3. 查询名字中包含精或者工作中包含序的员工姓名和工作
select ename,job from emp where ename like "%精%" or job like "%序%";
4. 查询3号部门工资最高的员工姓名和工资
select ename,sal from emp where deptno=3 order by sal desc limit 0,1;
5. 查询上级领导编号是8工资最高的3个人的信息
select * from emp where mgr=8 order by sal desc limit 0,3;
6. 查询1号部门和2号部门的员工信息工资升序,查询第3页的2条数据
select * from emp where deptno in(1,2) order by sal limit 4,2;

聚合函数

  • 聚合函数就是对查询的多条数据进行统计查询
  • 统计方式: 1. 平均值 2. 最大值 3. 最小值 4. 求和 5. 计数
  1. 平均值avg(字段名)

    • 查询所有员工的平均工资

      select avg(sal) from emp;

    • 查询2号部门的平均工资

      select avg(sal) from emp where deptno=2;

  2. 最大值max(字段名)

    • 查询1号部门的最高工资

      select max(sal) from emp where deptno=1;

    • 查询工资高于2000块钱的员工中资历最小的员工是什么时候入职的

      select max(hiredate) from emp where sal>2000;

  3. 最小值min(字段名)

    • 查询2号部门的最低工资

      select min(sal) from emp where deptno=2;

  4. 求和sum(字段名)

    • 查询1号部门的工资总和

      select sum(sal) from emp where deptno=1;

  5. 计数count(字段名)

    • 查询1号部门工资大于2000的员工数量

      select count(*) from emp where deptno=1 and sal>2000;

别名

​ select ename as “姓名” from emp;

select ename "姓名" from emp;

​ select ename 姓名 from emp;

  1. 查询1号部门的平均工资,最高工资,最低工资,工资总和,人数 起别名

    select avg(sal) 平均工资, max(sal) 最高工资,min(sal) 最低工资,sum(sal) 工资总和,count(*) 人数 from emp where deptno=1;

综合练习题

  1. 查询员工表中工资高于2000的员工姓名和工资,按照工资升序排序,查询第二页的2条数据(每页2条)

    select ename,sal from emp where sal>2000 order by sal limit 2,2;

  2. 查询和销售相关工作的工资总和

    select sum(sal) from emp where job like “%销售%”;

  3. 查询程序员的人数 select count(*) from emp where job=“程序员”;

  4. 查询1号部门中有领导的员工中的最高工资

    select max(sal) from emp where deptno=1 and mgr is not null;

  5. 查询2号部门的最高工资和最低工资并起别名

    select max(sal) 最高工资,min(sal) 最低工资 from emp where deptno=2;

  6. 查询1号部门的里面名字中包含空的员工姓名

    select ename from emp where deptno=1 and ename like “%空%”;

分组查询 group by

  • 分组查询可以将某个字段相同值的数据划分成一组 然后进行统计查询
  1. 查询每个部门的平均工资

    select deptno,avg(sal) from emp group by deptno;

  2. 查询每个部门的最高工资

    select deptno,max(sal) from emp group by deptno;

  3. 查询每种工作的工资总和

    select job,sum(sal) from emp group by job;

  4. 查询每个部门工资高于2000的员工人数

    select deptno,count(*) from emp where sal>2000 group by deptno;

各个关键字的顺序

​ select * from 表名 where 条件 group by 分组字段名 order by 排序字段 limit 跳过条数,请求条数

  1. 查询每个部门工资高于1000的员工人数,按照人数降序排序取前两条数据

    select deptno,count(*) from emp where sal>1000 group by deptno order by count(*) desc limit 0,2;
    

综合练习题

1. 查询没有上级领导的员工编号empno,姓名,工资
2. 查询有奖金的员工姓名和奖金
3. 查询名字中包含精的员工姓名和工资
4. 查询名字中第二个字是八的员工信息
5. 查询1号部门工资大于2000的员工信息
6. 查询2号部门或者工资低于1500的员工信息
7. 查询工资为3000,1500,5000的员工信息按照工资升序排序
8. 查询3号部门的工资总和
9. 查询每个部门工资大于1000的员工人数,按照人数升序排序
10. 查询每种工作中有领导的员工人数按照人数降序排序
11. 查询所有员工信息,按照部门编号升序排序,如果部门编号一致则工资降序
12. 查询有领导的员工,每个部门的编号和最高工资
13. 查询有领导的员工,按照工资升序排序,第3页的2条数据
14. 查询员工表中工资高于2000的员工姓名和工资,按照工资升序排序,查询第二页的2条数据
15. 查询和销售相关的工作的工资总和
16. 查询程序员人数 
17. 查询1号部门中有领导的员工中的最高工资
18. 查询2号部门的最高工资和最低工资 起别名
19. 查询1号部门里面名字中包含空字的员工姓名
20. 查询每个部门工资低于2000的人数
1.select empno,ename,sal from emp where MGR is null;

2.select ename,comm from emp where comm>0;

3.select ename,sal from emp where ename like "%精%";

4.select * from emp where ename like "_八%";

5.select * from emp where deptno=1 and sal>2000;

6.select * from emp where deptno=2 or sal<1500;

7.select * from emp where sal in(3000,1500,5000) order by sal;

8.select sum(sal) from emp where deptno=3;

9.select deptno,count(*) from emp where sal>1000 group by deptno order by count(*);

10.select job,count(*) from emp where mgr is not null group by job order by count(*) desc;

11.select * from emp order by deptno,sal desc;

12.select deptno,max(sal) from emp where mgr is not null group by deptno;

13. select * from emp where mgr is not null order by sal limit 4,2;
14. select ename,sal from emp where sal>2000 order by sal limit 2,2;
15.  select sum(sal) from emp where job like "%销售%";
16. select count(*) from emp where job like "%程序员%";
17.  select max(sal) from emp where deptno=1 and mgr is not null;
18. select max(sal) 最高工资,min(sal) 最低工资 from emp where deptno=2;

19.select ename from emp where deptno=1 and ename like "%空%";

20.select deptno,count(*) from emp where sal<2000 group by deptno;


你可能感兴趣的:(Java,MySQL,java)