mysql-sql-select

来源:互联网 发布:mysql主键有什么用 编辑:程序博客网 时间:2024/06/08 08:31

and与or的优化级

  • and优先级高于or。
    : 比如查询薪水大于1800,并且部门编号为20或30的员工
    select * from emp where sal>1800 and deptno=20 or deptno = 30;
    上输出的结果不是我们预期的结果,首先SQL语句过滤了 sal > 1800 and deptno = 20,然后再将deptno = 30的员工合并过来,所以是不正确的。
    正确:select * from emp where sal>1800 and (deptno=20 or deptno=30);

not和in

  • :查询出薪水不是是1600和薪水不是3000的员工 :
    1: elect ename,sal from emp where sal <> 1600 and sal <> 3000;
    2: select ename,sal from emp where sal !=1600 and sal !=3000;
    3: select ename,sal from emp where not (sal = 1600 or sal = 3000;
    4: select ename,sal from emp where sal not in (1600,3000);

like模糊查询

  1. 查询姓名以 M 开头的所有员工
    —select ename from emp where ename like ‘M%’;
  2. 查诟姓名以N结尾的所有员工
    —select ename from emp where ename like ‘%N’;
  3. 查诟姓名中包含O的所有员工
    —select ename from emp where ename like ‘%O%’;
  4. 查诟姓名中第二个字符为A的所有员工
    —select ename from emp where ename like ‘_A%’;
  5. 查诟姓名中第三个字符为R的所有员工姓名
    —select ename from emp where ename like ‘__R%’;
    注:第N个字符,需加N-1个“_”.

order by asc、desc

含义:排序采用 order by 子句,order by 后面跟上排序字段,排序字段可以放多个,多个采 用逗号间隔,order by默认采用升序(asc),如果存在 where 子句,那么 order by 必须放到 where 询句后面.

  • 按照 job 和薪水倒序排序
    —select ename,job,SAL from emp order by job desc,sal desc;
    注:如果采用多个字段排序,如果根据第一个字段排序重复了,会根据第二个字段排序;

处理函数

这里写图片描述

  • 查询员工姓名,将员工姓名全部转换成小写
    —-select lower(ename) as ename from emp;

  • 查询显示所员工姓名的第二个字母
    ——select substr(ename,2,1) from emp;
    注:substr(被截取字段名称,起始下标,截取长度) ,起始下标:从1开始

  • 取得员工姓名长度
    ——–select ename,length(ename) as nameLength from emp;

  • ifnull(字段名,替换值)函数:空值处理函数
    用法:ifnull(字段名称,将要替换) 结论:在数据库中,有Null参不数学运算的结果一定为Null;为了防止计算结果出现Null, 建议先使用ifnull函数预先处理。
    查诟员工姓名及补劣,如果补劣为Null设置为0。

select ename,ifnull(comm,0) from emp;

  • . case…when…then…else…end
  • 用法:匹配工作岗位,当为MANAGER时,薪水上调10%,当为SALESMAN时,薪水上调50%,其它岗位薪水不变.

  • SELECT
    ename,
    job,
    SAL,
    (
    CASE job
    WHEN 'MANAGER' THEN
    sal * 1.1
    WHEN 'SALESMAN' THEN
    sal * 1.5
    ELSE
    sal
    END
    ) AS newsal
    FROM
    emp

  • trim(‘字符串’)函数:去除首尾空格

  • 作用:trim函数去除首尾空格,不会去除中间空格

  • round(数字,保留小数位数)函数:四舍五入

  • 保留整数位或无保留小数位:select round(125.18);或者者select round(125.18,0); =======125
  • 保留1位小数:select round(125.18,1); ======125.2
  • 个数位四舍五入:select round(125.18,-1); =======130

  • max(字段名)函数 min(字段名)函数 (自动忽略null的值)
    —— 可用于日期类型大小比较 ,比如查询最早入职的员工或者最晚入职的员工

  • count函数
    ——用法:count(字段名称) 或 count(*)
    ——注意: 1.count(*)表示取得当前查询表所有记录
                2.count(字段名称),不会统计为 null 的记录

  • distinct 去除重复记录
    ——-作用:将查询结果中某一字段的的重复记录去除掉
    ——-用法:distinct 字段名或distinct 字段名1, 字段名2 …
    ——-distinct 字段名A:去除与字段名A相同的记录
    ——-distinct 字段名A,字段名B:去除与字段名A和字段名B同时相同的记录
    ——-注意:distinct只能出现在所有字段最前面,后面如果有多个字段及为多字段联合去重 。

  • 分组查诟:group by

1. 计算出不同部门不同岗位的最高薪水 select MAX(sal) as maxSal,job,DEPTNO from emp GROUP BY job,DEPTNO order BY  maxSal asc2.找出每个工作岗位的最高薪水,除MANAGER之外select MAX(sal) as maxSal,job from emp WHERE job != 'PRESIDENT' GROUP BY job order BY  maxSal asc3.找出每个工作岗位的平均薪水,要求显示平均薪水大于2000select job,avg(sal) from emp group by job having avg(sal) > 2000

where 不 having 区别:

- where 和 having 都是为了完成数据的过滤,它们后面都是添加条件。
- where 是在 group by之前完成过滤。
- having 是在 group by 之后完成 。
- 能够在where在过滤的数据不要放到having中进行过滤,否则影响SQL询句的执行效率 。


0 0
原创粉丝点击