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;
    

 

posted @ 2021-10-17 14:01  石乐智先生  阅读(99)  评论(0编辑  收藏  举报