mysql运算符
-- 运算符
-- 算术运算 select子句:显示在结果集中的内容
select 1+1;
select 1-1;
select 1*1;
select 1/1; #除法有小数点
select 5 div 2; #取证
select 3/0; #null
-- 比较运算符
select 1 = 1; #1 true是1
select 1 != 1; #0 false是0
select 1 <> 1; #0
-- 逻辑运算符
select 1=1 and 2=2;
select 1=1 or 2=2;
select !1<>1;
-- 位运算符
select 3 & 2; #2 按位与,都为1取1,否则取0
select 3 | 2; #1 按位或,有1取1,无1取0
select 3 ^ 2; #1 按位异或,一致取0,不一致取1
DML
(1)插入数据
insert into tname [(名称字段)]
注:中括号里的语句表示可以省略
-- 插入数据
-- 1.全部字段添加数据
insert into student values(1,'zs',1,'男');
-- 2.部分字段添加数据
insert student(sname,cid) values ('ls',2);
-- 3.添加三条测试数据,批量插入
insert student(sname,cid,sex)
values ('ls',2,'nan'), ('zl',2,'nan'),('fq',2,'nan');
-- 4.复制student表 到 新创建的表stu
-- 复制表结构和数据
create table stu select * from student;
-- 复制表结构和数据
create table stu select * from student where 1=1;
-- 5.插入数据(从其他表获取结果集插入)
insert into stu select * from student;
(2)修改数据
update tname set 字段名称=值[where条件]
-- update使用
update student set sex = '女' where sid = 1;
(3)删除数据
delete from tname [where条件]
-- delete删除
delete from student where sid = 7;
delete from student;
insert into student(cname,cid) values('ls',2);
-- 清空表
truncate table student;
-- 同时删除多条数据
delete from student where sid = 1 or sid = 3 or sid =5;
-- 从集合中删除
delete from student where sid in (1,3,5);
delete和truncate区别:
1. 都不修改结构只清除数据(相比于drop)
2. delete执行删除不会释放资源,而truncate会释放资源(会重置自增)
3. delete是逐行删除,truncate 效率 高于 delete
(4)查询
select 子句 from 表(结果集)
where 条件(简单,组合条件)
Group by 分组 having 条件
order by 排序
limit 限制结果(分页查询 mysql)
-- 查询
#查询emp表所有数据
select * from emp;
#查询所有员工姓名
select ename from emp;
#简单条件
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 > 2000 or sal < 1000;
#查询员工编号为7788,7521,7369
#select * from emp where empno = 7788 or empno = 7521 or empno = 7369;
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 not null;
#起别名(解释字段 简化字段) 字段|表 [as]别名
select empno 编号,ename 名称 from emp;
#查询姓名s开头的员工信息(模糊查询 like % :0到多个字符)
select * from emp where ename like 's%';
select * from emp where ename like '%t';
select * from emp where ename like '%s%';
select * from emp where ename like '_L%';
#查询前五条记录(分页) limit index,length
select * from emp limit 4,6;
#查询工资最高的五个人 ORDER BY 字段[asc | desc]
select * from emp order by sal desc limit 0,5;
#排序 (可以设置二级条件)
select * from emp order by sal desc ,empno desc;
函数(常用的)
1.单行函数
(1)数学函数
-- 数学函数
#绝对值
select ABS(-1);
#向上取值
select CEIL(12.3); # 13
select CEIL(-12.3); #-12
#向下取整
select FLOOR(-13.4); #-14
#取随机数
select RAND();
#四舍五入
select ROUND(12.3); #12
select ROUND(12.3,0); #12 0:从小数点后四舍五入
select ROUND(12.3,1); # 12.3 1,从小数点后一位四舍五入
select ROUND(12.3,-1); #10 -1:从小数点前一位四舍五入
#PI
select pi ();
#取模
select mod(5,3); #2
(2)字符函数
-- 字符函数
#转换为大写
select UPPER('this is mysql');
select upper (ename) from emp;
#转换为小写
select LOWER('HEY');
#获取字符长度
select LENGTH(ename) from emp;
#连接
select CONCAT('qq','xxx','ccc');
#截取
select SUBSTR('abcd',1,3);
#替换
select REPLACE ('abcd','bc','ee');
#填充
select LPAD('aa',10,'*'); #左填充
select RPAD('aa',10,'*'); #右填充
#去除空格
select trim(' a a ');
select length(trim(' a a '));
(3)日期函数
-- 日期函数
#获取当前时间
select NOW();
select SYSDATE();
select CURRENT_DATE();
select CURRENT_TIME();
select CURRENT_TIMESTAMP();
#获取某个年,月等
select year('1989-09-09');
select month(NOW());
select DAY(now());
select DAYOFYEAR(now());
select week(now());
#日期的计算
select ADDDATE('1989-09-09',interval - 10 day);
select ADDDATE('1989-09-09',interval + 10 day);
select ADDDATE('1989-09-09',interval + 2 year);
select LAST_DAY('2014-2-05');
#查询20号部门工资最高的三个员工
select * from emp where deptno = 20 ORDER BY sal LIMIT 0,3 ;
#查询30号部门名字包含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)) - 2 = day(hiredate);
select * from emp where hiredate=ADDDATE(LAST_DAY(hiredate), interval -2 day);
2.聚合函数(重点)
-- 聚合函数
#max() min() count() sum() avg()
select * from emp;
select max(sal) from emp;
select min(sal) from emp;
select count(*) from emp; #统计记录数
select count(1) from emp; #统计记录数
select count(comm) from emp; #统计字段数目,不会统计该字段为null的记录
select sum(sal) from emp;
select avg(sal) from emp;
3.分组函数(重点)
-- 分组函数 group
#注意:where 子句中不能写聚合函数
#where 子句执行顺序在group by 之前,语法也必须在group by 之前
#having 可以实现对分组之后的结果集再次进行检索。
#查询平均工资大于2000的部门编号和平均工资
select deptno,avg(sal) avg from emp group by deptno having avg> 2000;
#查询每个部门中工资大于1000的员工的平均工资
select deptno,avg(sal) from emp where sal > 1000 GROUP BY deptno;
4.加密函数
-- 加密函数 MD5(),SHA(str),PASSWORD(str)
-- 可逆 base64
-- 不可逆 md5
select MD5('root');
select sha('root');
select password('root');
|
|