A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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');

4 个回复

正序浏览

优秀
回复 使用道具 举报
回复 使用道具 举报
牛牛牛!
回复 使用道具 举报
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马