zoukankan      html  css  js  c++  java
  • SQL语句

    SQL语句
        任何一条sql语句以";"结尾
        sql语句不区分大小写
        标准sql语句中要求字符串使用单引号括起来
        完整的DQL语句:
            select        5
                ...
            from         1
                ...
            where        2
                ...
            group by    3
                ...
            having        4
                ...
            order by    6
                ...
        
    1.简单查询语句(DQL)
        1)select 字段名1,字段2,字段3,......from 表名;
        mysql> select EMPNO,ENAME from emp;
        
        2)查询员工的年薪(字段可以参与数学运算)
        mysql>  select ename,sal*12 from emp;
        
        
        3)给查询结果的列重命名
        select ename,sal*12 as yearsal from emp;
        或select ename,sal*12 as '年薪’ from emp;
    
    2.条件查询
        分类:
            =、<>或!=、<、<=、>、>=、between……and……、is null、and、or、in、not、like
        select 字段1,字段2,...... from 表名 where 条件;
        执行顺序:先from,然后where,最后select
        
        如:1)查询工资等于5000的员工姓名
        mysql> select ename from emp where sal=5000;
        
            2)查询SMITH的工资
        mysql> select sal from emp where ename='smith';    //字符串需要用单引号括起来
    
            3)找出工资高于3000的员工
        mysql> select ename from emp where sal>3000;
        
            4)找出工资在1000和3000之间的员工
        mysql> select ename from emp where sal between 1000 and 3000;
                    between……and……是闭区间(必须左小右大)
        或mysql> select ename from emp where sal>=1000 and sal<=3000;
            5)找出哪些人没有津贴
        mysql> select ename from emp where comm is null;
            注:
                在数据库中NULL不是一个值,代表什么也没有,为空
                必须使用is null 或者is not null
            6)找出哪些人津贴不为null
        mysql> select ename from emp where comm is not null;
            7)找出哪些人没有津贴
        mysql> select ename from emp where comm is null or comm=0;
            8)找出薪资大于1000的并且部门编号是20或30部门的员工
        mysql> select ename,sal,deptno from emp where sal>1000 and (deptno=20 or deptno=30);
            注:
                and的优先级大于or
                当运算符的优先级不确定的时候加小括号
            9)找出工作岗位是manager和salesman的员工
        mysql> select ename,job from emp where job='manager' or job='salesman';
        mysql> select ename,job from emp where job in('manager','salesman');
            注:
                in等同于or
                in后面括号里的参数是具体的值,不是区间
            10)找出名字中含有o的
        mysql> select ename from emp where ename like '%o%';
            注:    
                %代表任意多个字符,_代表任意一个字符
            11)找出名字中第二个字母是A的
        mysql> select ename from emp where ename like '_a%';
            12)找出名字中有下划线的
        mysql> select name from t_user where name like '%\_%';
            注:    
                表示转义字符
            13)找出名字中最后一个字母是t的
        mysql> select name from t_user where name like '%t';
    3.排序查询
            1)按照工资升序,找出员工名和薪资
        mysql> select ename,sal from emp order by sal;
        或mysql> select ename,sal from emp order by sal asc;
            注:    
                默认升序,asc表示升序,desc表示降序
            2)按照工资降序排序,当工资相同的时候再按名字的升序排序
        mysql> select ename,sal from emp order by sal desc,ename asc;
            注:
                越靠前的字段越能起到主导作用,只有当前面字段无法完成排序时,才启用后面字段
            3)找出工作岗位是salesman的员工,并且要求按照薪资的降序排列
        mysql> select ename,sal,job from emp where job='salesman' order by sal desc;
    4.分组函数
        count    计数
        sum        求和
        avg        平均值
        max        最大值
        min        最小值
        注:
            所有的分组函数都是对“某一组”数据进行操作的
            分组函数自动忽略null
            SQL语句中,分组函数不可以直接使用在where中
            1)找出工资总和
        mysql> select sum(sal) from emp;
            2)找出最高工资
        mysql> select max(sal) from emp;
            3)找出总人数
        mysql> select count(ename) from emp;
        或mysql> select count(*) from emp;
            4)找出工资高于平均工资的员工
        mysql> select ename,(sal+ifnull(comm,0))*12 as yealsal from emp;    
        //mysql> select ename,(sal+ifnull(comm,0))*12 as yealsal from emp;
        出现以上错误信息:无效的使用了分组函数
            原因:SQL语句中,分组函数不可以直接使用在where中
                解释:
                    因为group by是在where执行之后才会执行
            解决:
        第一步:mysql> select avg(sal) from emp;
        第二步:mysql> select ename,sal from emp where sal>2073.214286;
        或        mysql> select ename,sal from emp where sal>(select avg(sal) from emp);
            5)count(*)和count(具体的某个字段)的区别
                count(*):不是统计某个字段中数据的个数,而是统计总记录条数(和某个字段无关)
                count(comm):表示统计comm字段中不为null的数据总数量
                
    5.单行处理函数
        注:
            只要有null参与的运算,结果一定是null,所有数据库都是这样规定的
            1)计算每个员工的年薪
        mysql> select ename,(sal+ifnull(comm,0))*12 as yealsal from emp;
        注:    
            ifnull(可能为null的数据,被当作什么处理):属于单行处理函数
    6.group by 和 having
        group by:按照某个字段或者某个字段进行分组
        having:对分组过后的数据进行再次过滤
        
        注:    
            当一条语句包含group by,select后面只能跟参加分组的字段以及分组函数
        如:1)找出每个工作岗位的最高薪资
        mysql> select max(sal) from emp group by job;
        注:
            分组函数一般都会和group by联合使用,这也是为什么它被称为分组函数的原因
            并且任何一个分组函数都是在group by语句执行结束之后才会执行
            当一条SQL语句没有group by时,整张表的数据会自成一组
            2)找出每个工作岗位的平均薪资
        mysql> select job,avg(sal) from emp group by job;
            3)找出每个部门不同工作岗位的最高薪资
        mysql> select deptno,job,max(sal) from emp group by deptno,job;
            4)找出每个部门的最高薪资,要求显示薪资大于2900的数据
        第一步:mysql> select deptno,max(sal) from emp group by deptno;
        第二步:mysql> select deptno,max(sal) from emp group by deptno having max(sal)>2900;    //效率低
        或        mysql> select deptno,max(sal) from emp where sal>2900 group by deptno;    //效率高
            5)找出每个部门的平均薪资,要求显示薪资大于2000
        mysql> select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;
        
  • 相关阅读:
    【2012百度之星资格赛】G:聊天就是Repeat
    使用testNG进行并发性能测试
    关于处理高并发,防止库存超卖的问题
    关于java内存溢出的异常处理
    关于微服务架构
    关于MySQL绿色版的安装
    G点营销看来也不是@z营销的专利啊
    matlab+中文字体设计,有搞头没有? 有搞头
    字王字型系列命名草案
    国外字体设计师也是蛮重视数学的
  • 原文地址:https://www.cnblogs.com/-slz-2/p/15416848.html
Copyright © 2011-2022 走看看