Mysql语句整理(查询)

DCL (CONTROL)(创建用户)

一个项目创建一个用户,一个项目对应一个数据库,
这个用户只能对当前的数据库有权限,其他的数据库操作不了;
语句
创建用户:
    CREATE USER 用户名@IP地址 IDENTIFIED BY ‘123456’
授权:
    GRANT 权限词 ON 数据库.表 TO 用户@IP地址
撤销权限:
    REVOKE  权限 ON 数据库.*FROM 用户@IP地址
删除用户:
    DROP USER 用户名@IP地址

DQL (QUERY)(查询数据)

用于查询数据,不会对数据有任何的改变;
关键字 : SELECT
基础查询
查询所有列 :
        SELECT * FROM 表名;
    查询定制列:
        SEKECT 列名1,列名2,列名3 FROM 表名;
        exp : SELECT age , birthday FROM stu;
条件查询
条件查询就是在查询时间给出的 where 子句;
常用的运算符或关键字 :   
    =    
    !=    
    <>(不等于)   
    <    
    >    
    <=    
    >= 
    BETWEEN…AND…
    IN (SET(集合));
满足那些条件
IS  NULL            
    IS   NOT   NULL
    AND
    OR
    NOT( 非 );
exp:
查询年龄是50岁并且名字是小明的所有信息
    SELECT * FROM stu WHERE name = ‘小明’ AND age = 50;
    查询名字是小明或者年龄是22岁的所有人信息
    SELECT * FROM stu WHERE name = ‘小明’ OR age = 22;
    查询分数是70,80,90人的名字;
    SELECT usename FROM stu WHERE score IN(10,80,90,)
    查询分数在80到90的人的所有信息
    SELECT * FROM stu WHERE score BETWEEN 80 AND 90;
模糊查询
关键字 : LIKE
通配符 :   
        _ :  任意一个字符
        % :  任意 0 ~ N 个字符

exp:

查询名字中有两个字符组成的学生信息
    SELECT * FROM stu WHERE name LIKE’___';
查询名字中有三个字符组成,最后一个是'g'的学生信息
    SELECT * FROM stu WHERE name LIKE '%g';
查询名字以'g'开头的所有学生的信息
    SELECT * FROM stu WHERE name LIKE 'g%';
查询名字中第三位是'o'的所有学生的信息
    SELECT * FROM stu WHERE name LIKE '__o%';

字段控制

去除重复记录
SELECT * FROM stu;
SELECT DISTINCT score FROM stu;
数字类型的列可以加减乘除运算
除了输出学生的所有信息,还要输出成绩的1.5倍
SELECT * ,score * 1.5 FROM stu;
字符串拼接
在价格前面拼接美元符
SELECT *, CONCAT('$',price) FROM stu;
判断是否为空
IFNULL
查询学生表格,如果名字为空,返回身份证号,否则返回名字
SELECT IFNULL(name,IDCard) FROM
别名
给列添加别名
关键字 : AS  (查询出的结果显示的名字)
SELECT name ,name + score AS 综合 FROM stU;
排序
关键字: ORDER BY
升序(默认)ASC
降序(DESC)

查询所有学生的信息并按照年龄进行升序排序,如果年龄一样,按成绩降序排序
SELECT * FROM stu ORDER BY score ,birthday DESC ;
聚合函数
用于纵向运算
        count( ) : 统计指定列不为 null 的记录行数
        max( ) : 计算指定列的最大值
        sum( ) : 数值求和,如果是字符串,结果是0;
        min( ) : 计算指定列的最小值
        avg( ) : 计算指定列平均值,如果不是数值类型,计算结果是0
exp:
查询表中记录数并起别名 cnt
        SELECT count(*) cnt FROM stu;
查询表中有成绩的学生的记录数
        SELECT count(score) sc FROM stu;
请查询出表中分数分数大于70分的学生的人数
        SELECT count(score) scm FROM stu WHERE score >= 70;
请查出表中分数和年龄相加大于80分的学生的人数;
        SELECT count(score) scm FROM stu WHERE IFNULL(score,0) + IFNULL(age,0) >= 80;
统计所有学生的成绩平均值
        SELECT count(*)综合,avg(score) 平均值 FROM stu;
查出最高分和最低分
        SELECT max(score) 最大值 FROM stu;
        SELECT min(score) 最小值 FROM stu;
查询出年龄和以及成绩和;
        SELECT sum(score) ss,sum(age) sa FROM stu;
查询年龄+成绩的和
        SELECT sum(IFNULL(age,0) + IFNULL(score,0)) sas FROM stu;
分组
关键字 : GROUP BY
查询每个年龄的成绩和
        SELECT age, sum(score)  FROM stu GROUP BY age;
查询每个年龄值的学生个数
        SELECT age, count(*) FROM stu GROUP BY age;
查询每个年龄值和每个年龄分数>56的人数
        SELECT age, count(*) FROM stu WHERE score > 56 GROUP BY age;
查询年龄值和每个年龄分数和>100的分数值
    SELECT age,sum(score) FROM stu GROUP BY age HAVING sum(score) > 80;

*WHERE : 分组之前的判断,后面不允许出现聚合函数
HAVING : 分组之后的判断, HAVING 可以出现聚合函数*

优先级顺序: SELECT –> FROM –> WHERE –> GROUP BY –> ORDER BY