mysql—查询,常用函数,分组语法

一.插入删除
    1.alter table student add age int;//增加一列年龄
      alter table student modify sname varchar(30);//给学生的姓名增加长度
    2.truncate table student;//跟delete一样的效果,但是用这个删除之后没有办法恢复 ,而delete删除之后是有机会恢复的
    3.insert 的独有的语法
      insert into 表(多个列。。。) values(多个值),(多个值),(多个值),
      用insert插入另一张表的数据(列的个数和类型要一致)
        insert into1(列1,列2.。。)select1,列2.。。from24.update emp set sal=sal+1005.delete from 表; 全部删除
      delete fromwhere 条件; 删除符合条件的记录
      外键约束 还有一种行为,主表删除记录,从表与之相关的记录也会跟着删除
        语法是: 
            在外键语句后边加 on delete cascade
        例子:
            foreign key(cid) references class(cid) on delete cascade

二.查询(select)  格式:select 列名... from 表名 where 条件;
    1.逻辑运算:and or not
        select * from emp where sal>1000 and sal<2000;
        select * from emp where deptno=20 or deptno=30;
    2.null值
        select * from emp where comm is null;
        select * from emp where comm is not null;
    3.like(模糊查询)
        select * from emp where ename like  'S%';
        select * from emp where ename like  '%S';
        select * from emp where ename like  '%S%';
        select * from emp where ename like  '____';
        通配符 % 表示匹配0~多个任意的字符
        通配符 _ 表示匹配一个任意字符
    4.between .... and ....
        1) 必须按有小到大顺序
        2) between 包含等于条件
        select * from emp where sal between 1000 and 3000;
    5.in
        select * from emp where job in('SALESMAN','MANAGER');与or的效果一样
    6.limit(mysql特有的)
        select * from emp limit 3;
        select * from emp limit 3,3;
    7.order by
        select * from emp order by sal asc;
        select * from emp order by sal desc;
        其中如果不写asc或desc,默认升序
        desc降序排列
    如果多列排序,如果第一列取值相同,再按照第二列进行排序,例如:
先按工资排序,工资相同的,再按姓名排序:
select * from emp order by sal asc, ename asc; /*如果升序,两个asc都可以省略*/
三.常用函数
    (1) 时间加减
        date_add(原始时间, 时间间隔)
        时间间隔的语法:  interval 数字 时间单位
        数字可以是正数或负数
      select date_add(now(), interval 1 day );
    (2) 提取时间的某个部分
        extract(时间部分 from 原始时间)
        select extract(year from now());
        select extract(year_month from now());
        返回的结果是一个数字类型
    例:要获取1981年入职的员工
        select * from emp where extract(year from hiredate)=1981;
    (3)类型转换
        select cast('11' as signed)+1;
        select cast('12.55555' as decimal(5,2));
    (4)拼接字符串
        concat(值1, 值2, ... 值n)
        select concat('a', 'b', 'c');
        select concat('a', 18, 'c'); /*可以把其它类型当做字符串拼接*/
    (5) 求长度的函数
        char_length 按字符为单位统计长度
        length      按字节为单位统计长度
        utf8mb4编码下,汉字一个字符占三个字节,英文一个字符占一个字节
    (6) 标准sql:
        case
            when 条件1 then 值1
            when 条件2 then 值2
            ...
            else 值n
            end
            整个case...end 最后返回一个值
        举例:
        select sal, 
        case 
            when sal>2000 then '高工资'
            when sal between 1000 and 2000 then '中等'
            else '低工资'
            end from emp;
    (7) 组函数
        最大值 max(列)
        最小值 min(列)
        和     sum(列)
        个数   count(列)  会排除null值
        count(*)   针对这次查询,看看一共有多少行
        平均值 avg(列)
    (8) 去除重复
        distinct
            select distinct job from emp; /*去除重复后的职位有哪些*/
            select count(distinct job) from emp; /*有几种职位*/
    (9) 查询帮助
        ? contents   总目录
四.分组语法
    1.group by 后的列取值相同的会被分为一组
    2.语法结构如下
        select ... fromgroup by1,列2... having 分组条件
    3.举例
        select deptno,count(*),max(sal) from emp group by deptno;
        把部门编号取值相同的分为一组, 配合组函数一起使用
    4.分组后 selectorder by 的限制
        a.select,order by 中的列必须和group by中的列一样
        b.其它没有包含在 group by语句中的列,必须和组函数一起用
    5.执行的顺序
        where 进行一遍条件过滤 , 再执行 group by 分组,  再执行 having中的条件, 再执行select, 再执行order by, 执行limit
    6.语法顺序
        select ... from ... where ... group by ... having ... order by ... limit;
    7.列别名的语法 
        select 列名 别名 ... 
        select 列名 as 别名 ...
    8.表别名的语法
        select ... from 表 别名
        select e.* from emp e;

猜你喜欢

转载自blog.csdn.net/woshijinfeixi/article/details/81837679