mysql

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二进制文件存储类型
tinyintboolean类型存储方式0表示false ,1 表示true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值