数据库回顾(DCL DQL聚合函数 )

DCL
一个项目创建一个用户 一个项目对应的数据库只有1个
这个用户只能对这个数据库有权限,其他数据库你就操作不了
1、创建用户
    CREATE USER 用户名@IP地址 IDENTIFIED BY '密码'
        用户只能在指定的IP地址上登录
    CREATE USER 用户名@'%' IDENTIFIED BY '密码';
        用户可以在任意IP地址上登录
2、给用户授权
    GRANT 权限1,...权限n ON 数据库.* TO 用户名@IP地址
        权限、用户、数据库
        给用户分派在指定的数据库上的指定的权限
        例如:GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON db1.* touser1@localhost;
            给user1用户分派在db1数据库上的create、alter、drop、insert、update、delete、select权限
        GRANT ALL ON 数据库.* TO 用户名@地址;
            给用户分派指定数据库上的所有权限
3、撤销授权
    REVOKE 权限1,...,权限n ON 数据库.* FROM 用户名@IP地址;
        撤销指定用户在指定数据上的指定权限
        例如 REVOKE CREATE,ALTER,DROP ON db1.* FROM user1@localhost;
            撤销user1用户在db1数据库上的create、alter、drop权限
4、查看权限
    SHOW GRANT FOR 用户名@IP 地址
        查看指定用户的权限
5、删除用户
    DROP USER 用户名@IP地址  

DQL 数据查询语言
    查询不会修改数据库表记录
一、基本查询
1、字段(列)控制
    查询所有列
        SELECT * FROM 表名;
        SELECT * FROM emp;
            其中“*”表示查询所有列
    查询指定列
        SELECT 列1[,...列N] FROM 表名       
        SELECT empno,ename,sal,comm FROM 表名     
    完全重复的记录只一次
        当查询结果中的多行记录一模一样时,只显示一行,一般查询所有列时很少会有这种情况,但只查询一列(或几列)时,可能就大了
        SELECT DISTINCT * | 列1,列2...列N  FROM表名
        SELECT DISTINCT sal FROM emp;
            查询员工表的工资,如果存在相同的工资只显示一次
    列运算
        数量类型的列可以做加、减、乘、除运算
            SELECT sal*1.5 FROM emp;        
            SELECT sal+comm FROM emp;   
            无法转化成数字的当成0来对待  
        字符串类型可以做连续运算
            SELECT CONCAT('$',sal) FROM emp;
        转换NULL值
            有时需要把NULL转换成其他值,例如com+1000时,如果com列存在NULL值,那么NULL+1000还是NULL,而我们这时希望把NULL当成0来运算,
            SELECT IFNULL(comm,0)+1000 FROM emp;
                IFNULL(comm,0)如果comm中存在null值,那么当成0来运算
        给列起别名
            当使用列运算后,查询出的结果集中的列名称很不好看,这是我们需要给列名起个别名,这样在结果集中列名就显示别名了
            SELECT IFNULL(comm,0)+sal AS 奖金 FROM emp;
                其中AS可以省略    
SELECT CONCAT('我叫',ename,',我的工作是',job) FROM emp;
    CONCAT连接字段
2、条件控制
    条件查询
        域UPDATE和DELETE语句一样,SELECT语句也可以用WHERE子句来控制记录
        SELECT empno,ename,sal,comm FROM emp WHERE sal>10000 AND comm IS NOT NULL;
        SELECT empno,ename,sal FROM emp where sal BETWEEN 20000 AND 30000;
        SELECT empno,ename,job FROM emp WHERE job In('经理','董事长');
    模糊查询
        想查询姓张,并且姓名一共两个字的员工时,可以使用模糊查询
            SELECT * FROM emp WHERE ename LIKE '张 ';
                模糊查询需要使用运算符:LIKE 其中匹配一个任意字符,只匹配一个而不是多个
                上面语句查询的姓张,名字由两个字组成的员工;
            SELECT * FROM emp WHERE ename LIKE '___';姓名由3个字组成的员工
        如果我们想要查询姓张,名字几个字的员工就要使用"%"了
            SELECT * FROM emp WHERE enmae LIKE '张%';
                其中%匹配0-N个任意字符,所以上面语句查询的是姓张的所有员工;
            SLECT * FROM emp WHERE ename LIKE '%呃%';
                不能认为上面语句是在查询姓名中间带有呃字的员工,因为%匹配0-N个字符,所以姓名以呃开头和结尾的员工也都会查询到
            SELECT * FROM emp WHERE ename LIKE '%';
                这个条件等同于不存在,但如果姓名为NULL的查询不出来
二、排序
1、升序
    SELECT * FROM  emp ORDER BY sal ASC;
        按sal排序,升序
        其中ASC是可以省略的
2、降序
    SELECT * FROM emp ORDER BY comm DESC;
        按comm排序,降序
        其中DESC不能省略
3、使用多列作为排序条件 可以任意多个
    SELECT * FROM WHERE emp ORDER BY sal ASC,comm DESC;
    使用sal升序排,如果sal相同那么按照comm降序排
三、聚合函数
    聚合函数用来做某列的纵向    
1、COUNT
    SELECT COUNT(*) FROM emp;
        计算emp中所有列总数
        *可以是1,...n 语法没错误 结果不影响
    SELECT COUNT(comm) FROM emp;
        会自动忽略NULL 不计入
2、MAX
    SELECT MAX(sal) FROM emp;
        查询最高工资
3、MIN
    SELECT MIN(sal) FROM emp;
        查询最低工资
4、SUM               
    SELECT MIN(sal) FROM emp;
        查询工资和
5、AVG
    SELECT AVG(sal) FROM emp;
        查询平均工资  
四、分组查询
    分组查询是把记录使用某一列进行分组,然后查询组信息
    例如:查看所有部门的记录数
    SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;
        使用deptno分组,查询部门编号和每个部门的记录数
    SELECT job,MAX(sal) FROM emp GROUP BY job;
        使用job分组,查询每种工作的最高工资 
    select job,count(*) from emp group by job;  
        使用job分组,查询每种工种的人数
五、limit子句
    LIMIT用来限定查询结果的起始行,以及总行数
    例如:查询起始行为第五行,一共查询3行记录 少于3行有几行显示几行
    SELECT * FROM emp LIMIT 4,3;
        其中4表示从第五行开始,其中3表示一共查询3行,即第5、6、7行记录      
语句顺序 select->from->where->group by->having->order by
select deptno,count(*) from emp where sal>5000 group by deptno having count(*) >=2;
一页的记录数:10行
查询第3页
select * from emp limit 20,10;
(当前页-1)*每页记录数
(3-1)*10

猜你喜欢

转载自blog.csdn.net/Entermomem/article/details/84029695
今日推荐