MySQL语言分类:
DDL: 数据定义语言,用来创建数据库,创建表,删除数据库,删除表,修改数据库,修改表的操作。
create(创建) drop(删除) alter(修改) show(查看) add(添加字段)
--DDL语言操作数据库
-- 创建一个数据库 名字叫做mydbs
create database mydbs;
-- 删除数据库mydbs
drop database mydbs;
-- 创建一个数据库 名字叫做mydbs 设置字符集为utf8
create database mydbs character set utf8;
create database mydbss char set utf8;
-- 查看刚刚创建的数据库的格式
show create database mydbss;
-- 创建表 表名叫tb_user 有名字,密码,年龄,性别,爱好,住址
create table tb_user(
userName varchar(255),
userPwd varchar(255),
userAge int,
userSex varchar(255),
userLike varchar(255),
userAddress varchar(255)
);
-- 添加一个字段,联系方式
alter table tb_user add(userPhone varchar(11));
-- 删除表中的一个字段 ,联系方式
alter table tb_user drop userPhone;
-- 删除表
drop table tb_user;
DML: 数据操作语言: 主要是对表中的数据进行 增删改 操作的命令。
insert (增加) delete(删除) update(修改)
-- 在雇员表中插入一条数据(记录)
插入一条记录:
insert into table_name (filed1,...,filedn) value (value1,...valuen);
insert into table_name (filed1,...,filedn) values (value1,...valuen);
插入多条记录:
insert into table_name (filed1,...,filedn) values
(value1,...valuen),(value1,...valuen),(value1,...valuen);
例:
insert into emp (empNo,empName,empSex,empJob,empMgr,empSal,deptNo) values
(10003,'你凯哥','男' ,'程序员',10002,8000.00,20)
(10001,'你倩哥','男' ,'CEO' ,null ,50000.00,10);
-- 修改 update
update table_name set field1=value1,...,fieldn=valuen where 条件
例:
update emp set empSal=15000 where empName='你哥';
-- 删除 delete
delete from table_name where 条件
注意: 如果这个条件没有写,写成了delete from table_name,会将表中的所有记录都删除了。
例:
delete from emp where empName='你哥';
DQL:数据查询语言:主要是对表中的数据进行 查 操作的命令。
select(查询)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
单表查询
&&&&&&
简单查询
-- 1.查询出emp表中所有的数据
select * from emp;
-- 2.查询出emp表中指定字段
select empNo,empName,empSex,empJob,empMgr,empSal,deptNo from emp;
-- 3.查询部分字段的信息
select empName,empSex from emp;
-- 4.别名 :每个字段或者每个表都可以在查询时起一个别名,方便操作
-- 别名写法 字段 as 别名,表名 as 别名 其中 as可以省略不写
select empName 名字,empSex from emp;
select e.empName,e.empSex from emp e;
-- 5.去重 查询出来的信息是由重复内容的,可以去除重复 DISTINCT。
select distinct e.empSex from emp e;
限定查询:
-- 查询出雇员工资大于10000的所有雇员信息
select * from emp e where e.empSal>10000;
-- 查询出雇员工资大于等于10000的所有雇员信息并且小于等于20000
select * from emp e where e.empSal>=10000 and e.empSal<=20000;
-- 写法2使用between and
select * from emp e where e.empSal between 10000 and 20000;
-- 查询工资不等一万的员工信息
select * from emp e where e.empSal != 10000;
select * from emp e where e.empSal <> 10000;
-- 查询出部门是10或30 或40的多有雇员信息
select * from emp e where e.deptno=10 or e.deptno=30 or e.deptno=40;
-- 写法2用in来完成
select * from emp e where e.deptno in(10,30,40);
-- 查询名字中带有‘小’的所有雇员信息
select * from emp e where e.empName like '%小%';
-- 查询名字是三个字的所有雇员信息
select * from emp e where e.empName like '___';
/*分页查询 limit
当前页数 pageNumber=3
每页显示记录数:pageSize=5
limit (pageNumber-1)*pageSize,pageSize
*/
-- 查询出前五条记录
select * from emp limit 0,5;
-- 6-10条
select * from emp limit 5,5;
-- 11-15条
select * from emp limit 10,5;
-- 16-20条
select * from emp limit 15,5;
-- 查询后排序
-- 查询所有雇员信息按照雇员的薪资进行排序
select * from emp e order by e.empSal asc(升序,不写默认升序);
select * from emp e order by e.empSal desc(降序);
聚合函数:
count() max(最大值) min(最小值) avg(平均值) sum(和)
-- 统计函数单独使用:
-- 查看emp表中有多少条记录
select count(0) from emp;
-- 查看emp表中empSal字段的
-- max(最大值) min(最小值) avg(平均值) sum(和)
select max(empSal) from emp;
select min(empSal) from emp;
select avg(empSal) from emp;
select sum(empSal) from emp;
分组统计:
-- 1.按照部门进行分组,并且查看每个部门的人数
select e.deptno,count(0) from emp e GROUP BY e.deptno;
-- 2.多字段分组 按照部门和性别进行分组。
select e.deptno,e.empSex,count(0) from emp e GROUP BY e.deptno,e.empSex;
-- 3.按照部门进行分组,查询出部门的平均薪资最高的部门。
select max(temp.avg) from (select e.deptno,avg(e.empSal) avg from emp e GROUP BY e.deptno) temp;
-- 4.按照部门进行分组,查询出部门的平均薪资大于10000的部门信息。
select e.deptno,avg(e.empSal) from emp e GROUP BY e.deptno where avg(e.empSal)>10000;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
多表联查
&&&&&&
-- 多表联查
/*
语法格式:
select 字段 from tab1,tab2,...,tabn
*/
# 查询所有雇员的详细信息,包括部门信息。
select * from emp,dept;
-- 进行过滤 雇员表与部门表之间是有部门编号进行联系的,通过部门编号找到指定的部门信息
select * from emp e,dept d where e.deptno=d.deptno;
select
e.empNo,e.empName,e.empSex,e.empSal,
d.deptno,d.deptname,d.deptloc
from emp e,dept d where e.deptno=d.deptno;
-- 查询雇员的编号,姓名,性别,工资,职位,雇员的领导姓名
/*
分析:
用到的表:emp e1 雇员表 emp e2 雇员领导表
联系: e1.empMgr=e2.empNo
*/
select
e1.empNo,e1.empName,e1.empSex,e1.empSal,e1.empJob,
e2.empName mgrName
from emp e1,emp e2 where e1.empMgr=e2.empNo;
-- 查询雇员的编号,姓名,性别,工资,职位,雇员的领导姓名和所在部门名称,部门地址
/*
分析:
用到的表:emp e1 雇员表 emp e2 雇员领导表 dept d 部门表
联系: e1.empMgr=e2.empNo and e1.deptno=d.deptno
*/
select
e1.empNo,e1.empName,e1.empSex,e1.empSal,e1.empJob,
e2.empName mgrName,d.deptname,d.deptloc
from emp e1,emp e2,dept d where e1.empMgr=e2.empNo and e1.deptno=d.deptno;
-- 查询出雇员的姓名,年薪,领导姓名,领导年薪以及领导所在部门名称,并按照雇员的年薪降序排序。
/*
分析:
用到的表:emp e1 雇员表 emp e2 雇员领导表 dept d 部门表
联系: e1.empMgr=e2.empNo and e2.deptno=d.deptno
*/
select e1.empName,e1.empSal*12 yearEmpSal,
e2.empName mgrName,e2.empSal*12 yearMgrSal,
d.deptname mgrDept
from emp e1,emp e2,dept d where
e1.empMgr=e2.empNo and e2.deptno=d.deptno
order by yearEmpSal desc;
# 查询所有雇员的详细信息,包括部门信息。 内连接
select * from emp e inner join dept d on e.deptno=d.deptno;
# 外连接 左连接
select * from emp e left join dept d on e.deptno=d.deptno;
# 右连接
select * from dept d right join emp e on e.deptno=d.deptno;
-- 查询雇员的编号,姓名,性别,工资,职位,雇员的领导姓名
/*
分析:
用到的表:emp e1 雇员表 emp e2 雇员领导表
联系: e1.empMgr=e2.empNo
*/
select
e1.empNo,e1.empName,e1.empSex,e1.empSal,e1.empJob,
e2.empName mgrName
from emp e1 left join emp e2 on e1.empMgr=e2.empNo;
-- 查询出雇员的姓名,年薪,领导姓名,领导年薪以及领导所在部门名称,并按照雇员的年薪降序排序。
/*
分析:
用到的表:emp e1 雇员表 emp e2 雇员领导表 dept d 部门表
联系: e1.empMgr=e2.empNo and e2.deptno=d.deptno
*/
select e1.empName,e1.empSal*12 yearEmpSal,
e2.empName mgrName,e2.empSal*12 yearMgrSal,
d.deptname mgrDept
from emp e1,emp e2,dept d where
e1.empMgr=e2.empNo and e2.deptno=d.deptno
order by yearEmpSal desc;
select e1.empName,e1.empSal*12 yearEmpSal,
e2.empName mgrName,e2.empSal*12 yearMgrSal,
d.deptname mgrDept
from emp e1 left join emp e2 on e1.empMgr=e2.empNo
left join dept d on e2.deptno=d.deptno
order by yearEmpSal desc;
-- 案例 查询出工资比 ‘小猴’工资还要低的所有雇员信息
-- 查询出小猴的工资
select empsal from emp where empName='小猴';
-- 通过小猴的工资来查询比他少的所有雇员信息
select * from emp where empsal<(
select empsal from emp where empName='小猴'
);
-- 子语句返回多行多列:
-- 查询出雇员薪资大于本部门平均信息的所有雇员信息。
-- 1.分组,查询出每个部门的平均薪资。
select e.deptno,avg(e.empSal) avgSal from emp e group by e.deptno;
-- 2.查询出雇员信息比本部门的平均薪资要搞的雇员信息。
/*
表: emp e2 ,第一次查询结果表 temp
联系 e2.deptno=temp.deptno
条件 e2.empsal>temp.avgSal
*/
select e2.*,temp.avgSal from emp e2 left join
(select e.deptno,avg(e.empSal) avgSal from emp e group by e.deptno) temp
on e2.deptno=temp.deptno
where e2.empsal>temp.avgSal;
-- 子查询结果返回多行单列的使用
-- 查询工资等于 '凤姐',小敏,张磊 相同的所有雇员信息
-- 1 查询出 '凤姐',小敏,张磊 的工资
select e.empSal from emp e where e.empName in('凤姐','小敏','张磊');
-- 2 查询出工资与第一步结果一样的所有雇员信息
select * from emp e2 where e2.empSal in(select e.empSal from emp e where e.empName in('凤姐','小敏','张磊'));
-- any 的使用
-- >any() 比any中的子查询结果最小的值还要大
-- <any() 比any中的子查询结果最大的值还要小
-- =any() 等价于in()
-- 查询工资大于 '凤姐',小敏,张磊 工资最少的一个人的所有雇员信息
select * from emp e2 where e2.empSal>any(select e.empSal from emp e where e.empName in('凤姐','小敏','张磊'));
-- 查询工资小于 '凤姐',小敏,张磊 工资最多的一个人的所有雇员信息
select * from emp e2 where e2.empSal<any(select e.empSal from emp e where e.empName in('凤姐','小敏','张磊'));
select * from emp e2 where e2.empSal=any(select e.empSal from emp e where e.empName in('凤姐','小敏','张磊'));
-- all 所有的大或小
-- >all()比all中的子查询结果最大的值还要大
-- <all()比all中的子查询结果最小的值还要小
select * from emp e2 where e2.empSal>all(select e.empSal from emp e where e.empName in('凤姐','小敏','张磊'));
select * from emp e2 where e2.empSal<all(select e.empSal from emp e where e.empName in('凤姐','小敏','张磊'));
DCL: 数据控制语言,主要是对用户权限操作的语言(忽略)
TPL: 事务操作语言:对事务的回滚与提交操作:
rollback(回滚) commit(提交)
MySql的数据类型
属性名 | 属性描述 |
---|---|
varchar(长度) | 字符串类型,最长不能超过255个字符 |
int(integer) | 整数类型 |
bigint | 大整数类型对应Java中的long |
date | 日期类型 yyyy-MM-dd |
datetime | 时间戳类型:yyyy-MM-dd HH:mm:ss |
double | 小数类型 |
text | 文本类型,可以存储文本信息 |
blob | 二进制文件存储类型 |
tinyint | boolean类型存储方式0表示false ,1 表示true |