• MySQL进阶二


    #进阶2
    /*
    语法:
    SELECT 查询列表
    FROM 表名
    WHERE 筛选条件;

    分类:
    一,按条件表达式筛选
    条件运算符:> < = != <> >= <=
    二,按逻辑表达式筛选
    逻辑运算符:
    && || !
    and or not
    &&和and:两个条件都为true,结果为true,反之为false
    ||和or:只要有一个条件为true,结果为true,反之为false
    !和not:如果连接的条件本身为false,结果为true,反之为false
    三,模糊查询
    like
    between and
    in
    is null
    */

    #一.按条件表达式

    #案例一:查询工资>12000的员工信息
    SELECT *
    FROM employees
    WHERE salary>12000;

    #案例二:查询部门编号不等于90号员工名和部门编号
    SELECT last_name,department_id
    FROM employees
    WHERE department_id<>90;

    #二,按逻辑表达式筛选
    #案例一:查询工资在10000到20000之间的员工名,工资以及奖金
    SELECT last_name,salary,commission_pct
    FROM employees
    WHERE salary>=10000 AND salary<=20000;

    #案例二:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
    SELECT *
    FROM employees
    WHERE NOT(department_id>=90 AND department_id<=110) OR salary>15000;


    #三,模糊查询
    /*
    like
    between and
    in
    is null
    is not null
    */

    #1.LIKE
    /*
    特点;
    @1:一般和通配符搭配使用
    通配符:
    %任意多个字符,包含0个字符
    _任意单个字符
    */
    #案例一:查询员工名中包含字符a的员工信息
    SELECT *
    FROM employees
    WHERE last_name LIKE '%a%';

    #案例二:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
    SELECT last_name,salary
    FROM employees
    WHERE last_name LIKE '__n_l%';

    #案例三:查询员工名中第二个字符为_的员工名。可以使用转义符,ESCAPE标识符,负责自定义一个转义符
    SELECT last_name
    FROM employees
    WHERE last_name LIKE '_$_%' ESCAPE '$';

    #2.BETWEEN AND
    /*
    @1:使用BETWEEN AND可以提高语句的简洁度
    @2:包含临界值 是先>=,后<=
    @3:两个临界值不要调换顺序
    */
    #案例一:查询员工编号在100到120之间的员工信息
    SELECT *
    FROM employees
    WHERE employee_id BETWEEN 100 AND 120;

    #3.IN
    /*
    含义:判断某字段的值是否属于IN列表中的某一项
    特点:
    @1:使用IN提高语句的简洁度
    @2:IN列表的值类型必须统一或兼容
    */
    #案例一:查询员工的工种编号IT_PROT,AD_VP,AD_PRES的一个员工名和工种编号
    SELECT last_name,job_id
    FROM employees
    WHERE job_id IN('IT_PROT','AD_VP','AD_PRES');

    #4.is null
    /*
    =或<>不能用于判断null值
    is null或is not null可以判断null值
    */
    #案例一:查询没有奖金的员工名和奖金率
    SELECT last_name,commission_pct
    FROM employees
    WHERE commission_pct IS NULL;

    #案例二:查询有奖金的员工名和奖金率
    SELECT last_name,commission_pct
    FROM employees
    WHERE commission_pct IS NOT NULL;

    #安全等于<=>
    #案例一:查询没有奖金的员工名和奖金率
    SELECT last_name,commission_pct
    FROM employees
    WHERE commission_pct <=>NULL;

    #案例二:查询工资为12000的员工信息
    SELECT last_name,salary
    FROM employees
    WHERE salary <=>12000;

    /*
    is not null:仅仅可以判断NULL值,可读性较高
    <=>:既可以判断NULL的值,又可以判断普通的数值,可读性叫低
    */

    #作业
    /*
    1. 查询工资大于 12000 的员工姓名和工资
    2. 查询员工号为 176 的员工的姓名和部门号和年薪
    3. 选择工资不在 5000 到 12000 的员工的姓名和工资
    4. 选择在 20 或 50 号部门工作的员工姓名和部门号
    5. 选择公司中没有管理者的员工姓名及 job_id
    6. 选择公司中有奖金的员工姓名,工资和奖金级别
    7. 选择员工姓名的第三个字母是 a 的员工姓名
    8. 选择姓名中有字母 a 和 e 的员工姓名
    9. 显示出表 employees 表中 first_name 以 'e'结尾的员工信息
    10. 显示出表 employees 部门编号在 80-100 之间 的姓名、职位
    11. 显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、职位
    */

    #1. 查询工资大于 12000 的员工姓名和工资
    SELECT CONCAT(first_name,last_name) AS 姓名,salary AS 工资
    FROM employees
    WHERE salary>12000;

    #2. 查询员工号为 176 的员工的姓名和部门号和年薪
    SELECT CONCAT(first_name,last_name) AS 姓名,department_id AS 部门号,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
    FROM employees
    WHERE employee_id=176;

    #3. 选择工资不在 5000 到 12000 的员工的姓名和工资
    SELECT CONCAT(first_name,last_name) AS 姓名,salary AS 工资
    FROM employees
    WHERE salary<5000 OR salary>12000;

    #4. 选择在 20 或 50 号部门工作的员工姓名和部门号
    SELECT CONCAT(first_name,last_name) AS 姓名,department_id
    FROM employees
    WHERE department_id IN(20,50);

    #5. 选择公司中没有管理者的员工姓名及 job_id
    SELECT CONCAT(first_name,last_name) AS 姓名,job_id
    FROM employees
    WHERE manager_id IS NULL;

    #6. 选择公司中有奖金的员工姓名,工资和奖金级别
    SELECT CONCAT(first_name,last_name) AS 姓名,salary AS 工资,commission_pct AS 奖金级别
    FROM employees
    WHERE commission_pct IS NOT NULL;

    #7. 选择员工姓名的第三个字母是 a 的员工姓名
    SELECT CONCAT(first_name,last_name) AS 姓名
    FROM employees
    WHERE CONCAT(first_name,last_name) LIKE '__a%' ;

    #8. 选择姓名中有字母 a 和 e 的员工姓名
    SELECT CONCAT(first_name,last_name) AS 姓名
    FROM employees
    WHERE CONCAT(first_name,last_name) LIKE '%a%' OR CONCAT(first_name,last_name) LIKE '%e%';

    #9. 显示出表 employees 表中 first_name 以 'e'结尾的员工信息
    SELECT *
    FROM employees
    WHERE first_name LIKE '%e';

    #10. 显示出表 employees 部门编号在 80-100 之间 的姓名、职位
    SELECT CONCAT(first_name,last_name) AS 姓名,job_id AS 职位
    FROM employees
    WHERE department_id BETWEEN 80 AND 100;

    #11. 显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、职位
    SELECT CONCAT(first_name,last_name) AS 姓名,job_id AS 职位
    FROM employees
    WHERE manager_id IN(100,101,110);

  • 相关阅读:
    [Camtasia报错]An error occurred in the Recorde System Audio setup Failed
    [Oracle报错]RMAN-12005: error during channel cleanup/ORA-19550: cannot ...
    [Teamviewer报错]现在无法捕捉屏幕画面。这可能是由于快速的...
    [SVN技能]SVN服务迁移(Windows-Linux)
    [RabbitMQ技能]安装部署单节点RabbitMQ
    运算符的那些事
    java之连接数据库之JDBC访问数据库的基本操作
    面向对象编程之OC
    集合
    面向对象
  • 原文地址:https://www.cnblogs.com/Athena-life/p/13575487.html
Copyright © 2020-2023  润新知