一、算术运算
-- 运算符
-- 算术运算
select 1+1;
select 1-1;
select 1*1;
select 5/2; #2.5
select 5 div 2; #2
-- 比较运算符
select 1=1; #1为true
select 1!=1; #0为false
select 1<>1; #0. 等价于select 1!=1;
--逻辑运算符
select 1=1 and 2=2; #1为true
select 1=1 or 2=1 ; #1为true
select !1<>1; #1
-- 位运算符(注意&符号是表示与,而不是逻辑与)
select 3&2; #2
select 3|2; #3按位或
select 3^2; #1按位异或
select 3
二.DML数据操纵语言
(一)添加:insert into tname[(字段名称)]
(中括号里的语句表示可省略)
-- 插入数据
-- 1.全部字段添加
insert into student values (1,'zs',1,'男');
-- 2.部分字段添加数据
insert into student (sname, cid) values ('ls',22);
-- 3.添加多条数据
insert into student (sname,cid,sex)
values ('ww',2,'man'),('zl',3,'man'),('fq',3,'man');
-- 4.复制student表创建stu where子句:
-- 复制表的结构和数据
create table stu select * from student ;
create table stu3 select * from student where 1;
-- 复制表结构
create table stu1 select * from student where 1=0;
create table stu2 select * from student where 0;
drop table stu2,stu3;
-- 5.插入数据
insert into stu1 select * from student ;
-- 设定主键自增后,添加数据时,指定主键值时,以指定值为准,除非重复。不指定时在当前最大值基础上自增。
insert into student values (10,'zs','男',2,24),(11,'ls','女',2,24),(12,'王五','男',2,24);
insert into student (sname,sex,cid,age) values ('zs','男',2,24),('ls','女',2,24),('王五','男',2,24);
(二)删除 delete from 和 truncate
语法:delete from 表名 where ……
-- delete 删除,全部删除后,序列自增的话接着之前的继续。
delete from student where sid = 5;
delete from student ;
delete from student where sid = 1 or sid = 3 or sid =5;
delete from student where sid in (1,3,5); #从集合中删除
-- truncate 清空表,清空后序列从1继续开始
truncate table stu;
(三)修改update
语法:update 表名 set 字段 = ~ where
update student set sex = '女' where sid = 4;
update stu set sex = '女' where cid = 3;
(四)查找
子句:
select 子句 from 表(结果)
where 条件(简单,组合条件)
group by 分组 having 条件
order by 排序
limit 限制结果(分页查询 mysql)
############################表的查询#############################
#查询emp表所有数据
select *from emp ;
# 查询所有员工信息
select ename from emp;
#chaxun 员工编号是7788的员工信息
select * from emp where empno = 7788;
#查询20号部门工资大于2000的员工信息
select * from emp where deptno = 20 and sal >2000;
#查询工资在1500-2000之间的员工信息。
-- 组合条件案例
select * from emp where sal >=1500 and sal <=2000;
-- 范围查询
select * from emp where sal between 1500 and 2000;
#查询工资大于2000,或工资小于1000的员工信息。
select * from emp where sal <1000 or sal >2000;
#查询员工编号7788,7521,7369的员工信息(集合查询)(not in)(in)
select * from emp where empno in (7788,7521,7369);
#查询所有的职位信息(去重)
select distinct job from emp ;
#查询所有没有奖金的员工信息(null 判断 :is (not)null)
select * from emp where comm = 0 or comm is null;
#起别名(解释字段,简化字段)[as]别名
select empno 编号, ename 名称 from emp;
select empno ,ename from emp 员工表; #多表查询尤其有用
#查询s打头的员工信息(模糊查询 like) (%:0到多个字符)(_ 一个字符)
select * from emp where ename like 's%'; #以s打头
select * from emp where ename like '%t'; #以t结尾
select * from emp where ename like '%s%';#包含s
select * from emp where ename like '_L%' #第二个字母是l
#查询前五条记录(分页)limit index ,length
select * from emp limit 4,2;
#查询工资最高的5个人 order by 字段[asc ] desc
select * from emp order by sal limit 0,5;
#排序
select * from emp order by sal desc , empno desc;
#######################################################
三、函数
(一)单行函数
(A)数学函数
###############################函数####################################
-- 数学函数
select ABS (-1); #1:取绝对值
select ceil (12.3); #13:向上取整。
select ceil (-12.9); #-12。
select floor (12.3); #12
select floor (-12.3); #-13
select rand(); #0.42488380281709487 : 0到1之间的随机数
select round (12.9); #13:四舍五入
select round (12.6,-1); #10 从小数点前1位开始四舍五入
select round (12.639,2); #12.64 从小数点后2位开始四舍五入
select PI(); #3.141593
select mod (5,3); #2:取模
########################################################################
(B)字符函数
#############################字符函数#############################
-- 字符函数
select upper (ename) from emp ; #将选中的属性转变为大写输出
select lower (ename) from emp; #将选中的属性转变为小写输出
select length (ename) from emp; #将选中的属性的长度输出
select concat('aa','bb'); #aabb:连接
select SUBSTR('abcd',1,3); #截取
select replace ('abcd','bc','ee'); #替换
-- 填充
select LPAD('aa',10,'*'); #左填充
select RPAD('aa',10,'*'); #右填充
-- 去前后空格
select TRIM(' a a '); #a a :去前后空格
####################################################################
(C)日期函数
################################日期时间函数#############################
-- 日期函数
select now(); #2018-06-06 15:39:55
select SYSDATE();
select current_date; #2018-06-06
select CURRENT_DATE(); #2018-06-06
select current_time(); #15:41:37
select CURRENT_TIMESTAMP(); #2018-06-06 15:42:01
-- 获取年,月等
select year('1989-09-09'); #1989
select MONTH(NOW()); #6
select day(NOW()); #6
select DAYOFYEAR(NOW()); #157
-- 日期计算
select ADDDATE('1989-09-09',INTERVAL -10 DAY); #1989-08-30
SELECT ADDDATE('1989-09-09',INTERVAL 10 DAY); #1989-09-19
SELECT LAST_DAY('2018-02-05'); #2018-02-28:本月最后一天
#########################################################################
综合练习
#查询emp表中工资最高的五位员工
select * from emp where deptno = 20 ORDER BY sal desc limit 0,3;
#姓名中包含s的员工
select * from emp where deptno = 30 and ename like '%s%';
#入职时间最短
select * from emp order by hiredate DESC limit 0,1;
#入职超过35年的员工
select * from emp where year(now()) - year(hiredate) >35;
#查询入职日期为当月月底前两天的员工信息
select * from emp where DAY(last_day(hiredate)) - DAY(hiredate) = 2;
select * from emp where hiredate = adddate(last_day(hiredate),interval -2 day);
(二)聚合函数
################################聚合函数######################################
-- 聚合函数
-- max() min() COUNT() sum() AVG()
select * from emp;
select max(sal) from emp; #5000
select min(sal) from emp; #800
select count(*) from emp; #14
select count(1) from emp; #14一样
select count(comm) from emp; #4:统计com字段的数量。不统计null
select sum(sal) from emp; #29025
select avg(sal) from emp; #2073.214286
-- 分组函数 group by 分组字段
#查询各部门的平均工资。
select deptno ,avg(sal) from emp group by deptno;
#查询平均工资大于2000的部门编号和平均工资
select deptno , avg(sal) from emp group by deptno where avg(sal)>2000 ;#错误!
#where语法要求在group by 之前。但要注意要先group by ,才能选择。
select deptno , avg(sal) from emp group by deptno having avg(sal)>2000;#这时不能再用where
#注意:where 子句中不能写聚合函数
#where 子句执行顺序在group by 之前,语法也必须在group by 之前
#having 可以实现对分组之后的结果集再次进行检索。
#查询每个部门中工资大于1000的员工的平均工资
-- 注意区分是先分组还是先检索:分组后再检索用having。先检索再分组用where
select deptno,avg(sal) from emp where sal>1000 group by deptno;
#########################################################################
(三)加密函数
###############################加密函数####################################
-- 加密函数 MD5() SHA(STR) PASSWORD(STR)
-- 可逆 Base64
-- 不可逆 MD5加密
select Length(MD5('root')); #只有32位
select length(SHA('root')); #40位
select PASSWORD('root'); #*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
-- 注册 插入 insert
-- 登陆 查询
############################################################################