zoukankan      html  css  js  c++  java
  • 02_MySQL DQL_条件查询

    #查询2:条件查询

    /*
    语法:
    select
    查询列表
    from
    表名
    where
    筛选条件;

    执行顺序:找到表,逐行筛选,选出行的相关列呈现

    分类:
    1)按条件表达式筛选
    条件运算符:> < = !=(<>也可以) >= <=

    2)按逻辑表达式筛选
    逻辑运算符:and or not(&& || !)
    作用:连接条件表达式

    && and 两个条件都为true
    || or 两个条件任一为true
    ! not 取反

    3) 模糊查询
    like
    between and
    in
    is null | is not null
    */

    USE myemployees;

    #一、按条件表达式筛选

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

    #案例2:查询部门编号不等于90的员工号和部门编号
    SELECT employee_id,department_id FROM employees WHERE department_id != 90;
    SELECT employee_id,department_id FROM employees WHERE department_id <>90;

    #二、按逻辑表达式筛选

    #案例1:查询工资在10000到20000之间的员工信息
    SELECT last_name,salary,IFNULL(commission_pct,0) AS commission
    FROM employees WHERE salary>=10000 AND salary<=20000;

    #案例2:查询部门编号不在90~110之间,或者工资高于15000的员工信息
    SELECT last_name,department_id,salary FROM employees
    WHERE department_id<90 OR department_id>110 OR salary>15000;

    #三、模糊查询
    /*
    like
    一般和通配符配合使用
    % 任意多个字符(0,1,无限多个)
    _ 任意单个字符(1个)
    between and
    in
    is null | is not null
    */

    #like模糊查询
    注意:MySQL5.5及以上的版本,也支持数值型的like查询

    #案例1:查询员工名中包含字符a的员工信息(MySQL没有字符串的概念,都是字符)
    # % 表示任意个数的任意字符
    SELECT * FROM employees WHERE last_name LIKE '%a%';

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

    #案例3:查询员工名中第二个字符为_的员工名
    #通配符转移为普通字符,\%, \_
    SELECT last_name FROM employees WHERE last_name LIKE '_\_%';

    #指定任意一个字符为转义字符
    #escape '$' 指定$为转义字符
    SELECT last_name FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';

    #案例:数值型的like查询 (数值->字符->然后判断)
    select * from employees where department_id like '1__';

    #2、between and模糊查询
    /*
    提高语句简洁读
    包含临界值
    临界值不能颠倒顺序(等价于 >=左边,<=右边)
    临界值要类型一致,或者能隐式转换
    */

    #案例1:查询员工编号在100到200之间的员工信息
    #between 100 and 200, 100和200包括在内
    SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 200;

    #3、in 模糊查询
    /*
    含义:判断某字段的值,是否属于in列表中的某一项
    in (v1,v2,v3,...)

    特点:
    1)比使用or,语句简洁度高
    2)in列表的值类型必须统一,或者可以隐式转换
    3)in列表的值,不支持通配符(like才能解析通配符)
    */

    #案例1:查询工种是 IT_PROG, AD_VP, AD_PRES 其中任意一个的员工名和工种id
    SELECT last_name,job_id FROM employees
    WHERE
    job_id='IT_PROT' OR job_id='AD_VP' OR job_id='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 判断是否为null
    is not null 判断是否为非null
    */

    #案例1:查询没有奖金的员工名和奖金率(替换为0)
    SELECT last_name, IFNULL(commission_pct,0) AS commission
    FROM employees
    WHERE commission_pct IS NULL;


    #案例2:查询有奖金的员工名和奖金率
    SELECT last_name, IFNULL(commission_pct,0) AS commission
    FROM employees
    WHERE commission_pct IS NOT NULL;

    #5、安全等于 <=>
    /*
    <=> null, 可以判断是否为null值
    <=> 普通值
    */
    SELECT last_name,commission_pct FROM employees WHERE commission_pct <=> NULL;

    SELECT last_name,salary FROM employees WHERE salary <=> 12000;

  • 相关阅读:
    python常用模块之random模块
    python常用模块之time&datetime模块
    on windows in superset sql lab error "module object has no attribute sigalrm"
    Superset安装出错 sqlalchemy.exc.InvalidRequestError: Can't determine which FROM clause to join from, ...
    Ubuntu16.04怎样安装Python3.6
    Ubuntu16.04切换python3和python2
    Python Set Literals
    odoo 分组视图下显示同一批次记录的总数
    Let's Encryt免费SSL证书申请[我司方案]
    nginx接入let's encrypt
  • 原文地址:https://www.cnblogs.com/shay-zhangjin/p/7897163.html
Copyright © 2011-2022 走看看