Mysql数据库增删改查复习课程.docx
《Mysql数据库增删改查复习课程.docx》由会员分享,可在线阅读,更多相关《Mysql数据库增删改查复习课程.docx(22页珍藏版)》请在冰豆网上搜索。
Mysql数据库增删改查复习课程
Mysql
Oracle(甲骨文)大型数据库
MySql中小型数据库
DB2
SqlServer
.....
Mysql的发展:
瑞典的MysqlAB公司
2008年Sun公司(JAVA)
2009年Oracle收购sun公司
IBM69亿美元sunEclipse(日蚀)
Oracle74亿美元sun
Mysql的简单使用:
1.登陆mysql数据库
win+r--->cmd
mysql-uroot-p1234
修改密码:
mysql>setpasswordforroot@localhost=password('1234');
此处可能存在异常情况原因:
a、未配置环境变量b、Mysql服务未开启(netstartmysql)
2.对库的操作
a.查看所有的库
showdatabases;
系统自带库:
information_schemamysqltest
b.创建库
createdatabaseday01;(不指定编码,跟随数据库系统编码)
createdatabasedb1
defaultcharactersetgbk;(指定编码)
查看创建库的语句:
showcreatedatabase库名.
修改库的编码:
alterdatabaseday01
defaultcharactersetutf8;
c.删除库
dropdatabase库名.
dropdatabaseday01;
注意:
系统自带的三个库不能删除.
d.使用库
usedb1;
3.对表的操作
表:
二维关系表有行有列的关系表.
记录:
表中的一行数据.
字段:
表中的一列.
常用的字段类型:
字符串类型:
varchar(长度)、char
数值类型:
int(整数)floatdouble(小数)
日期类型:
date
a.创建表
员工表:
员工号姓名性别年龄职位薪水入职日期
createtableemp(
empnovarchar(4),
namevarchar(30),
sexvarchar(5),
ageint(3),
jobvarchar(30),
salaryint(5),
hiredatedate
);
b.查看所有的表
showtables;
c.查看建表语句
showcreatetable表名.
d.查看表结构
desc表名.
e.往表中插入数据
e1.给表中所有的字段插入数据
insertintoemp
(empno,name,sex,age,job,salary,hiredate)
values
('1001','zhangsan','m',22,'developer',10000,'2015-12-21');
简写形式:
insertintoempvalues
('1002','lisi','m',23,'test',8000,'2015-10-10');
e2.给表中部分字段插入数据
insertintoemp(empno,name,sex,age)values
('1003','cuihua','w',18);
解决插入中文问题:
(eclipse中的设置)
ConnectionURL:
jdbc:
mysql:
//localhost:
3306/test
?
useUnicode=true&characterEncoding=gbk
插入中文:
insertintoempvalues(
'1005','莫小贝','女',12,'武林盟主',20000,'2015-12-12'
);
f.删除数据
deletefromemp;-->删除表中所有数据
deletefromempwhereempno=1004;
MyEclipse配置Mysql连接:
1.切换到数据库界面.
2.在DBBroswer中右键选择new
3.配置连接:
DriverTemplate:
MySQLConnector/J
Drivername:
随便起名字
ConnectionURL:
jdbc:
mysql:
//localhost:
3306/test
本机:
localhost
127.0.0.l
192.168.4.223
Username:
root
password:
1234
DriverJARs:
mysql-connector-java-5.17-bin.jar
Mysql常见的错误
1.Can'tcreatedatabase'xxx';databaseexists
不能创建xxx库,因为已经存在
2.Can'tdropdatabase'xxx';databasedoesn'texist
不能删除xxx库,因为已经不存在
--创建库
createdatabasesearchdefaultcharactersetgbk;
--使用库
usesearch;
--创建表
--员工信息表
createtableemp(
empnoint(4),--员工编号
enamevarchar(30),--员工姓名
jobvarchar(30),--职位
salaryint,--工资
bonusint,--奖金
ageint(3),--年龄
sexvarchar
(1),--性别
hiredatedate,--入职日期
managerint(4),--领导编号
deptnoint--部门编号
);
--部门表:
createtabledept(
deptnoint,--部门编号
dnamevarchar(50),--部门名称
locvarchar(80)--部门位置
);
--往emp表中插入数据null空:
没有不存在
insertintoemp(empno,ename,job,salary,bonus,age,sex,hiredate,manager,deptno)
values(1001,'张三丰','老板',20000,100,30,'m','2009-02-02',null,10);
insertintoempvalues(1002,'张无忌','程序猿',12000,200,20,'m','2010-03-02',1001,10);
insertintoempvalues(1003,'小龙女','程序猿',10000,300,18,'f','2012-12-02',1001,10);
insertintoempvalues(1004,'杨过','程序猿',10000,200,22,'m','2012-12-22',1003,10);
insertintoempvalues(1005,'黄蓉','攻城师',15000,100,25,'f','2012-12-28',1001,20);
insertintoempvalues(1006,'郭靖','攻城师',13000,100,28,'m','2013-12-02',1005,20);
insertintoempvalues(1007,'李莫愁','秘书',8000,50,22,'f','2013-03-02',1001,30);
insertintoempvalues(1008,'韦小宝','实施',8500,null,29,'m','2013-04-02',1001,30);
insertintoempvalues(1009,'陆无双','实施',6000,100,26,'m','2014-12-12',1001,30);
insertintoempvalues(1010,'黄飞鸿','打手',5000,100,20,'m','2015-03-02',1001,null);
--给dept表插入数据
insertintodeptvalues(10,'研发部','北京');
insertintodeptvalues(20,'运维部','上海');
insertintodeptvalues(30,'实施部','深圳');
--查询
usesearch;
--1.查询emp表中的所有数据
select*fromemp;
--*通配符通配了emp表中的所有列。
selectempno,ename,job,salary,bonus,age,
hiredate,sex,manager,deptnofromemp;
--select(选择,筛选..)from(从...地方)
--执行顺序:
from-->select
--2.查询emp表中员工名字以及员工的薪水
selectename,salaryfromemp;
--查询部分字段:
select字段名1,字段名2....from表;
--3.查询薪水大于10000的员工.
--查什么员工--->ename--->empno--->salary
--查询条件是什么salary>10000
selectempno,ename,salary
fromempwheresalary>10000;
--selectfromwhere
--执行顺序:
from-->where-->select
--4.查询薪水大于等于10000并且小于等于18000的员工
--查什么empnoenamesalary
--查询的条件是什么10000=--salary>=10000and&&salary<=18000
selectempno,ename,salaryfromemp
wheresalary>=10000andsalary<=18000;
--betweenand:
在...之间.
selectempno,ename,salaryfromemp
wheresalarybetween10000and18000;
select*fromemp;
--5.查询薪水是10000或者12000的员工.
selectempno,ename,salaryfromemp
wheresalary=10000orsalary=12000;
--in(10000,12000);
selectempno,ename,salaryfromemp
wheresalaryin(10000,12000);
--6.查询职位是程序猿或者是攻城师并且薪水在10000到
--20000之间,并且性别是男的员工
--查什么empnoenamejobsalarysex
--查询的条件是什么
--a.职位是程序猿或者是攻城师jobin('程序猿','攻城师')
--b.薪水在10000到20000之间salarybetween10000and20000
--c.性别是男sex='m'
--aandbandc
selectempno,ename,job,salary,sexfromemp
wherejobin('程序猿','攻城师')and
salarybetween10000and20000and
sex='m';
--错误演示
selectempno,ename,job,salary,sexfromemp
wherejob='程序猿'orjob='攻城师'and
salarybetween10000and20000and
sex='m';
selectempno,ename,job,salary,sexfromemp
wherejob='攻城师'orjob='程序猿'and
salarybetween10000and20000and
sex='m';
--7.查询奖金为null的员工
selectename,bonusfromempwherebonus=null;
select*fromemp;
--null:
空没有不存在
--和null做比较不能使用=><..要使用is
selectename,bonusfromemp
wherebonusisnull;
--8.查询奖金不是null的员工
selectename,bonusfromemp
wherebonusisnotnull;
--9.查询所有员工的年薪12*(salary+bonus)
selectename,12*(salary+bonus)fromemp;
--与null做运算,结果都为null
--空值处理函数:
ifnull()
--ifnull(bonus,0):
--如果bonus为null,则处理成0
--如果bonus不为null,则不处理.按照bonus实际的值运算.
selectename,12*(salary+ifnull(bonus,0))
fromemp;
--函数:
单行函数组函数(聚合函数)
--单行函数:
单行函数会对表中的每一条记录进行操作
--并且每一条记录都会产生一个结果.
--now():
查询当前时间
selectnow()fromemp;
--10.查询2012年入职的员工2012-01-012012-12-31
selectename,hiredatefromemp
wherehiredatebetween'2012-01-01'
and'2012-12-31';
--year(date):
提取日期中的年份
--year(2012-12-12)--->2012
selectename,hiredatefromemp
whereyear(hiredate)=2012;
--11.查询员工的工作年限
selectename,year(now())-year(hiredate)fromemp;
--12.查询实现如下结果:
我是xxx,我的职位是xxx
--concat('我是',ename,',我的职位是',job);连接函数.将给定的字段连接成字符串。
select'我是'fromemp;
selectconcat('我是',ename,',我的职位是',job)descriptionfromemp;
--别名:
就是给查询的结果中的列取另外一个名字
--selectenameasnamefromemp;--name
--selectenamenamefromemp;--as可以省略的
--13.通过查询实现:
10部门的薪水涨20%
--20部门的薪水涨10%
--30部门的薪水保持不变
--其他部门的薪水涨500
--多路分支casewhenthenelseend
--case开始分支
--when判断分支条件then执行分支结果
--when..then....
--else上述情况都不满足,执行else
--end结束分支
selectempno,deptno,salary,
case
whendeptno=10thensalary*1.2
whendeptno=20thensalary*1.1
whendeptno=30thensalary
elsesalary+500
endnew_salary
fromemp;
--排序
--orderby排序字段desc(降序)asc(升序默认的排序)
--14.查询所有的员工,按照薪水降序排序
select*fromemporderbysalarydesc;
--15.查询所有的员工,按照薪水升序排序
select*fromemporderbysalaryasc;
--16.查询所有的员工,按照年薪降序排序
selectename,12*(salary+ifnull(bonus,0))year_sal
fromemporderbyyear_saldesc;
--selectfromwhereorderby
--执行顺序:
from-->where-->select-->orderby
--17.查询员工名字中带有'张'的员工
--like%:
任意个任意字符
--_:
一个任意字符
selectenamefromemp
whereenamelike'%张%';
--18.查询员工名字中第二个字为'无'的员工
selectenamefromemp
whereenamelike'_无%';
--19.查询职位中带有'猿'字并且薪水在10000到20000之间
--并且性别是男的员工按照入职日期降序排序.
--查什么enamejobsalarysexhiredate
--查询条件是什么
--1.职位中带有'猿'字joblike'%猿%'
--2.薪水在10000到20000之间salarybetween10000and20000
--3.性别是男sex='m'
--1and2and3
selectename,job,salary,sex,hiredate
fromempwherejoblike'%猿%'and
salarybetween10000and20000and
sex='m'orderbyhiredatedesc;
--20.统计表中总共有多少条记录
select*fromemp;
--count():
统计函数
selectcount(empno)fromemp;--10
selectcount(ename)fromemp;--10
selectcount(*)fromemp;--10
selectcount(bonus)fromemp;--9
--null值不会被统计。
--组函数(聚合函数):
--组函数是对表中的一列数据进行计算并返回单一的结果.
--21.查询所有员工的薪水和.
--sum()
selectsum(salary)fromemp;
--22.查询所有员工的奖金和.
selectsum(bonus)fromemp;
selectsum(ifnull(bonus,0))fromemp;
--23.查询所有员工的平均薪水
--avg()
selectavg(salary)fromemp;
--24.查询所有员工的平均奖金.
selectavg(bonus)fromemp;
selectsum(bonus)/count(bonus)fromemp;
selectavg(ifnull(bonus,0))fromemp;
selectsum(bonus)/count(ifnull(bonus,0))fromemp;
--25.查询员工薪水的最大值
--max()
selectmax(salary)fromemp;
--26.查询员工薪水的最小值
--min()
selectmin(salary)fromemp;
--27.员工奖金的最大值
selectmax(bonus)fromemp;
--28.员工奖金的最小值
selectmin(bonus)fromemp
wherebonusisnotnull;
--29.查询10部门的平均薪水
selectavg(salary)fromempwheredeptno=10;
--30.职位是程序猿的薪水和.
selectsum(salary)fromempwherejob='程序猿';
--31.查询每个职位的薪水总和.
selectjob,sum(salary)fromemp
groupbyjob;
--分组(groupby分组字段)
--分组后,select后面只能跟组标识,组函数,
--组标识或者组函数的表达式.
--不能直接跟单行字段或者单行函数.
--32.查询每个部门的平均薪水
selectdeptno,avg(salary)fromemp
groupbydeptno;
--33.查询部门人数大于等于3人的部门.
selectdeptno,count(empno)fromemp
groupbydeptnohavingcount(empno)>=3;
--分组后,条件的过滤不能使用where,要使用having
--分组前用where分组后用having
--34.查询职位不是程序猿的员工中!
=
--部门平均薪水大于或者等于10000的部门
--按照平均薪水降序排序
selectdeptno,avg(salary)fromemp
wherejob!
='程序猿'
groupbydeptnohavingavg(salary)>=10000
order