1. 分别创建mydb1和mydb2数据库 字符集第一个是utf8第二个是gbk;

2. 查询所有数据库检查是否创建成功

3. 分别查询两个数据库的字符集 检查是否成功

4. 先使用mydb1再使用mydb2

5. 删除两个数据库
create database mydb1 character set utf8;

create database mydb2 character set gbk;

show databases;

show create database mydb1;

show create database mydb2;

use mydb1;

use mydb2;

drop database mydb1;

drop database mydb2;
1. 创建数据库mydb2 并使用  如果mydb2存在 删除掉 重新创建 

2. 在mydb2数据库里面创建员工表emp 字段有name  字符集为utf8

3. 添加age字段在最后面

4. 添加id字段在最前面

5. 添加gender字段在name字段后面

6. 修改gender性别为sal工资

7. 删除age字段

8. 修改表名为t_emp

9. 删除t_emp

10. 删除数据库
create database mydb2;

use mydb2;

create table emp(name varchar(50))charset=utf8;

alter table emp add age int;

alter table emp add id varchar(50) first;

alter table emp add gender varchar(5) after name;

alter table emp change gender sal int;

alter table emp drop age;

rename table emp to t_emp;

drop table t_emp;

drop database mydb2;
1. 创建mydb4数据库 字符集utf8 并使用
2. 创建hero表 字段:id,name, type varchar(10)
3. 插入以下数据:   (1, '李白', '刺客') , (2, '诸葛亮', '法师'), (3, '刘备', '战士'),(4, '孙尚香', '射手'),(5, '关羽', '战士'), (6, '刘禅', '辅助');
4. 修改李白的类型为诗人
5. 给表添加money字段 
6. 修改id小于5 的money为6888 
7. 修改诗人为打野
8. 修改刘禅的名字为阿斗 价格为50
9. 删除id大于5的数据 
10. 修改所有英雄的价格为13888 
11. 修改表名为heros 
12. 删除money字段 
13. 删除所有数据  
14. 删除表  
15. 删除数据库
create database mydb4 character set utf8;

use mydb4;

create table hero(id int ,name varchar(10),type varchar(10));

insert into hero values(1, '李白', '刺客') , (2, '诸葛亮', '法师'), (3, '刘备', '战士'),(4, '孙尚香', '射手'),(5, '关羽', '战士'), (6, '刘禅', '辅助');

update hero set type='诗人' where name='李白';

alter table hero add money int;

update hero set money=6888 where id<5;

update hero set type='打野' where type='诗人';

update hero set name='阿斗',money=50 where name='刘禅';

delete from hero where id>5;

update hero set money=13888;

rename table hero to heros;

alter table heros drop money;

delete from heros;

drop table heros;

drop database mydb4;
创建数据库mydb2 字符集utf8 并使用

create database mydb2 character set utf8;

use mydb2;

在数据库中创建员工表emp 字段:id,name,sal,deptId(部门id) 字符集utf8

create table emp (id int,name varchar(50),sal int,deptId int)charset=utf8;

创建部门表dept 字段:id,name,loc(部门地址) 字符集utf8

create table dept(id int,name varchar(50),loc varchar(50))charset=utf8;

部门表插入以下数据: 1 神仙部 天庭 2 妖怪部 盘丝洞

insert into dept values(1,'神仙部','天庭'),(2,'妖怪部','盘丝洞');

员工表插入一下数据: 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);

查询工资6000以下的员工姓名和工资

select name,sal from emp where sal<6000;

修改神仙部的名字为取经部 update dept set name='取经部' where name='神仙部';

给员工添加奖金comm字段 alter table emp add comm int;

修改员工表中部门id为1的 奖金为500

update emp set comm=500 where deptId=1;

把取经部的地址改成五台山

update dept set loc='五台山' where id=1;

删除两个表 drop table emp ; drop table dept;
查询有上级领导并且是3号部门的员工信息

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

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

select ename,sal,deptno from emp

where deptno=2 and sal between 1000 and 2000;

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

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

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

select * from emp where deptno in(1,2) and sal>2000;
查询员工表中工资高于2000的员工姓名和工资,按照工资升序排序,查询第二页的2条数据(每页2条)

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

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

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

查询程序员人数 select count(*) from emp where job='程序员';

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

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

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

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

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

select ename from emp where deptno=1 and ename like '%空%';
查询每个部门工资高于1500块钱的员工人数

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

查询每个部门的工资总和 按照工资总和升序排序

select deptno,sum(sal) from emp group by deptno order by sum(sal);

select deptno,sum(sal) s from emp group by deptno order by s;

查询1号和3号部门的最高工资

select deptno,max(sal) from emp where deptno in(1,3) group by deptno;

查询人数最多部门编号和人数

select deptno,count(*) c from emp

group by deptno order by c desc limit 0,1;

查询每种职业的工资总和不包含程序员

select job,sum(sal) from emp where job!='程序员' group by job;
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的人数
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"_八%";
select *from emp where deptno=1 and sal>2000;
select *from emp where deptno=2 or sal<1500;
select *from emp where sal in(3000,1500,5000) order by sal;
select deptno,sum(sal) from emp where deptno=3;
select deptno,count(*) c from emp where sal>1000 group by deptno order by c;
select deptno,count(*) c from emp where mgr is not null group by job order by c;
select *from emp group by deptno order by deptno,sal desc;
select *from emp order by deptno,sal desc;
select deptno,max(sal) from emp where mgr is not null group by deptno;
select *from emp where mgr is not null order by sal limit 4,2;
select ename,sal from emp where sal>2000 order by sal limit 2,2;
select sum(sal) from emp where job like "%销售%";
select count(*) from emp where job="程序员";
select max(sal) from emp where deptno=1 and mgr is not null;
select max(sal) 最高,min(sal) 最低 from emp where deptno=2;
select ename from emp where deptno=1 and ename like "%空%";
select deptno,count(*) from emp where sal<2000 group by deptno;
select *from emp;
1. 先使用newdb3数据库 use newdb3;

2. 查询工资高于2000块钱的从事销售相关工作的员工信息

   select * from emp where sal>2000 and job like '%销售%';

3. 查询没有上级领导 并且工资高于3000的员工信息

   select * from emp where mgr is null and sal>3000;

4. 查询程序员的最高工资

   select max(sal) from emp where job='程序员';

5. 查询每个部门的工资总和

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

6. 查询1号部门和2号部门两个部门加一起的工资总和

   select sum(sal) from emp where deptno in(1,2) ;

7. 查询人数最多的工作名称及人数

   select job,count(*) c from emp group by job order by c desc limit 0,1;

8. 查询每种工作的平均工资取前三种

   select job,avg(sal) a from emp group by job order by a desc limit 0,3;

9. 查询平均工资最高的部门编号

   select deptno from emp group by deptno order by avg(sal) desc limit 0,1;
having

1. 查询每个部门的平均工资要求只查询平均工资大于2000的信息

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

2. 查询只有一个人的工作名称

   select job,count(*) c from emp group by job having c=1;

3. 查询每个部门的工资总和,只查询有领导的员工,并且要求工资总和高于5400;

   select deptno,sum(sal) s from emp where mgr is not null group by deptno having s>5400;

4. 查询每个部门的平均工资,只查询工资在1000到3000之间的,并且过滤掉平均工资低于2000的部门 

   select deptno,avg(sal) a from emp where sal between 1000 and 3000 group by deptno having a>=2000;

5. 查询每种工作的人数要求人数大于1个,并且只查询1号部门和2号部门的员工, 按照人数降序排序

   select job,count(*) c from emp where deptno in(1,2) group by job having c>1 order by c desc;
子查询(嵌套查询)

1. 查询工资高于1号部门平均工资的员工信息

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

select * from emp where sal>(select avg(sal) from emp where deptno=1);

2. 查询工资最高的员工信息

   select max(sal) from emp;

   select * from emp where sal=(select max(sal) from emp);

3. 查询工资高于2号部门最低工资的员工信息

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

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

4. 查询和孙悟空相同工作的其它员工信息

   select job from emp where ename='孙悟空';

   select * from emp where job=(select job from emp where ename='孙悟空') and ename!='孙悟空';

5. 查询拿最低工资员工的同事们的信息(同事指相同部门)

   select min(sal) from emp; //得到最低工资

   select deptno from emp where sal=(select min(sal) from emp);//最低工资的部门编号

   select * from emp where deptno=(select deptno from emp where sal=(select min(sal) from emp)) and sal!=(select min(sal) from emp);

6. 查询白骨精的部门信息(需要用到部门表)

   select deptno from emp where ename='白骨精';

   select * from dept where deptno=(select deptno from emp where ename='白骨精');
关联查询之等值连接

- 格式: select * from A,B where A.x=B.x(关联关系) and A.age>30;

1. 查询1号部门每一个员工的姓名和对应的部门名

   select e.ename,d.dname

   from emp e,dept d

   where e.deptno=d.deptno and e.deptno=1;

2. 查询工资高于2000的员工姓名/工资和工作地点(部门地点)

   select ename,sal,loc

   from emp e,dept d

   where e.deptno=d.deptno and e.sal>2000;
关联查询之内连接

1. 查询1号部门每一个员工的姓名和对应的部门名

   select ename,dname

   from emp e join dept d

   on e.deptno = d.deptno

   where e.deptno=1;

关联查询之外连接

1. 查询所有员工的名字和对应的部门名

   select e.ename,d.dname

   from emp e left join dept d

   on e.deptno=d.deptno;