Mysql第二章 数据操纵语言&函数

一、算术运算

-- 运算符
    -- 算术运算
    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 
-- 登陆 查询 
############################################################################

猜你喜欢

转载自blog.csdn.net/gegeyanxin/article/details/80599914
今日推荐