○ 创建数据库newdb1, 字符集utf8并使用
create database newdb1 charset=utf8; use newdb1;
○ 在数据库中创建员工表emp 字段:id,name,sal(工资),deptId(部门id) 字符集utf8
create table emp(id int,name varchar(50),sal int,deptId int);
○ 创建部门表dept 字段:id,name,loc(部门地址) 字符集utf8
create table dept(id int,name varchar(20),loc varchar(20));
○ 部门表插入以下数据: 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 name='取经部';
○ 修改奖金字段为性别gender字段 类型为varchar(5)
alter table emp change comm gender varchar(5);
○ 修改孙悟空和猪八戒性别为男
update emp set gender='男' where deptId=1;
○ 删除没有性别的员工
delete from emp where gender is null;
○ 删除性别字段
alter table emp drop gender;
○ 删除表 和 删除数据库
drop table emp; drop table dept; drop database newdb1;
● 整数: int(m) 和 bigint(m) , bigint等效Java中的long , m代表显示长度 用来补零
create database day2db charset=utf8;
use day2db;
create table t1(age int(5) zerofill);
insert into t1 values(18);
select* from t1;
● 浮点数: double(m,d) m代表总长度 d代表小数长度 , 23.645 m=5 d=3
create table t2(price double(5,3));
insert into t2 values(23.345); i
nsert into t2 values(23.3456789);
insert into t2 values(234.34); //报错 超出范围
● 字符串
○ char(m): 固定长度, m=5 存 "刘德华" 占5个字符长度, 执行效率略高, 最大值255
○ varchar(m):可变长度, m=5 存 "刘德华" 占3个字符长度,节省空间, 最大值65535但是建议保存255以内的数据,超过255的建议使用text
○ text(m):可变长度, 最大值65535
● 日期
○ date: 保存年月日 ○ time: 保存时分秒
○ datetime: 保存年月日时分秒, 默认值为null, 最大值9999-12-31
○ timestamp:(时间戳:距离1970年1月1日的毫秒数)保存年月日时分秒,默认值为当前系统时间, 最大值2038-1-19
create table t3(t1 date,t2 time,t3 datetime,t4 timestamp);
insert into t3 values("2022-5-20",null,null,null);
insert into t3 values(null,"10:38:40","2008-10-20 10:20:30",null);
● 主键: 表示数据唯一性的字段称为主键
● 约束: 创建表时给表字段添加的限制条件
● 主键约束:限制主键的值 唯一且非空
create table t4(id int primary key,name varchar(20));
insert into t4 values(1, 'aaa');
insert into t4 values(1, 'bbb'); //报错不能重复:Duplicate entry '1' for key 'PRIMARY'
insert into t4 values(null,'ccc'); //报错不能为null: Column 'id' cannot be null
主键约束+自增 primary key auto_increment
● 自增规则: 从历史最大值基础上+1
create table t5(id int primary key auto_increment,name varchar(20));
insert into t5 values(null,'aaa');
insert into t5 values(null,'bbb');
insert into t5 values(10,'ccc');
insert into t5 values(null,'ddd');
delete from t5 where id>=10;
insert into t5 values(null,'eee');
● 将老师工程中文件里面的emp.zip复制到某个盘的根目录然后解压到当前文件夹
● 在命令行中执行 source 路径;
source e:/emp.sql;
● 执行show tables; 检查是否包含 emp和dept两个表
● 执行select * from emp; 检查是否有数据 , 如果有乱码 执行set names utf8; 后再查询
1.查询工资小于等于3000的员工姓名和工资
select name,sal from emp where sal<=3000;
2.查询程序员的名字
select name from emp where job='程序员';
3.查询2号部门的员工姓名,工资和工作
select name,sal,job from emp where dept_id=2;
4.查询不是人事的员工姓名和工作(两种写法)
select name,job from emp where job!='人事';
select name,job from emp where job<>'人事';
● 查询多个条件同时满足时使用 and
● 满足一个条件时使用or
1.查询1号部门工资高于2000的员工信息
select * from emp where dept_id=1 and sal>2000;
2.查询三号部门或工资等于5000的员工信息
select * from emp where dept_id=3 or sal=5000;
3.查询有上级领导的员工姓名
select name from emp where manager is not null;
4.查询出CEO和项目经理的名字
select name from emp where job='CEO' or job='项目经理';
5.查询有奖金的销售名字和奖金
select name,comm from emp where job='销售' and comm>0;
1.查询工资在2000-3000之间的员工信息
select * from emp where sal between 2000 and 3000;
2.查询工资小于2000并且大于3000的员工信息
select * from emp where sal not between 2000 and 3000;
● 查询某个字段的值为多个值的时候使用in
1.查询工资等于3000,1500和5000的员工信息
select * from emp where sal in(3000,1500,5000);
2.查询人事和销售的信息
select * from emp where job in('人事','销售');
3.查询工作不是人事也不是销售的信息
select * from emp where job not in('人事','销售');
1.查询1号部门中出现了哪几种不同的工作
select distinct job from emp where dept_id=1;
2.查询员工表中出现了哪几种不同的部门id
select distinct dept_id from emp;
● _ : 代表1个未知字符
● %: 代表0或多个未知字符
● 举例:
○ 以x开头:x%
○ 以x结尾:%x
○ 以x开头y结尾 x%y
○ 包含x %x%
○ 第二个字符是x _x%
○ 第三个是x倒数第二个是y __x%y_
1.查询姓孙的员工姓名
select name from emp where name like "孙%";
2.查询名字中包含僧的员工信息
select* from emp where name like "%僧%";
3.查询名字以精结尾的员工姓名
select name from emp where name like "%精";
4.查询工作中包含销售并且工资大于1500的员工信息
select * from emp where job like "%销售%" and sal>1500;
5.查询工作中第二个字是售的员工姓名和工作
select name,job from emp where job like "_售%";
6.查询1号和2号部门中工作以市开头的员工信息
select * from emp where dept_id in(1,2) and job like "市%";
● 格式: order by 字段名 asc升序(默认)/desc降序
1.查询每个员工的姓名和工资,并按照工资升序排序
select name,sal from emp order by sal;
select name,sal from emp order by sal asc;
select name,sal from emp order by sal desc; //降序
2.查询工资高于2000的员工姓名和工资, 按照工资降序排序
select name,sal from emp where sal>2000 order by sal desc;
3.查询每个员工的姓名,工资和部门id并且按照部门id升序排序,如果部门id一致则按照工资降序排序
select name,sal,dept_id from emp order by dept_id,sal desc;
● 格式: limit 跳过的条数,请求的条数(每页的条数)
● 跳过的条数=(请求的页数-1)*每页的条数
● 举例:
○ 第1页的5条数据 limit 0,5
○ 第2页的5条数据 limit 5,5
○ 第3页的5条数据 limit 10,5
○ 第4页的10条数据 limit 30,10
○ 第8页的7条数据 limit 49,7
○ 第3页的9条数据 limit 18,9
1.查询id,姓名,工资和工作,按照工资升序排序 请求第1页的5条数据
select id,name,sal,job from emp order by sal limit 0,5;
2.查询所有员工的姓名和工资,按照工资升序排序,请求第2页的5条数据
select name,sal from emp order by sal limit 5,5;
3.查询工资最高的员工信息
select * from emp order by sal desc limit 0,1;
4.按照入职日期排序 查询第2页的3条数据
select * from emp order by hiredate limit 3,3;
5.按照工资升序排序查询第3页的2条数据
select * from emp order by sal limit 4,2;
select name as '姓名' from emp;
select name '姓名' from emp;
select name 姓名 from emp;
平均值avg(字段名)
查询1号部门的平均工资
select avg(sal) from emp where dept_id=1;
最大值max(字段名)
查询2号部门的最高工资
select max(sal) from emp where dept_id=2;
最小值min(字段名)
查询2号部门的最低工资
select min(sal) from emp where dept_id=2;
求和sum(字段名)
查询3号部门的工资总和
select sum(sal) from emp where dept_id=3;
计数count(*)
查询1号部门的人数
select count(*) from emp where dept_id=1;
1.查询每个部门的人数
select dept_id,count(*) from emp group by dept_id;
2.查询每种工作的人数
select job,count(*) from emp group by job;
3.查询每个部门工资高于 2000 的人数
select dept_id,count(*) from emp where sal>2000 group by dept_id;
4.查询 1 号部门和 2 号部门的人数
select dept_id,count(*) from emp where dept_id in(1,2) group by dept_id;
5.查询平均工资最高的部门 id 和平均工资
select dept_id,avg(sal) from emp group by dept_id order by avg(sal) desc limit 0,1;
select dept_id,avg(sal) a from emp group by dept_id order by a desc limit 0,1;