美文网首页
MySQL的基本查询和条件查询

MySQL的基本查询和条件查询

作者: 程序员汪汪 | 来源:发表于2021-03-12 03:33 被阅读0次

    使用的数据,请前往公众号【程序员汪汪】回复dump,即可获取sql文件。后面的文章会一直使用这些数据。

    获取sql文件后,可以使用图形界面工具(如:Navicat),创建一个空的数据库后,执行sql文件中的sql语句。

    也可以创建好一个空的数据库后,在系统命令行(不是mysql的shell环境)中使用下面的命令将数据导入数据库:

    # 例如:
    # root换成自己的mysql用户名,123456换成自己的mysql密码
    # demo是我新建的空的数据库, D:\dump.sql 换成自己下载的dump.sql文件所在路径即可。
    mysql -u root -p 123456 demo < D:\dump.sql
    

    SELECT语句

    SELECT *|{[DISTINCT] column|expression [alias],...} FROM 表名
    
    • SELECT 标识选择哪些列
    • FROM 标识从哪个表中选

    语法:

    SELECT 查询列表 FROM 表名;
    

    特点:

    1. 查询列表可以是:表中的字段、常量值、表达式、函数
    2. 查询的结果是一个虚拟的表格

    查询全部列

    SELECT * FROM 表名;
    

    查询特定的列

    SELECT id, name FROM student;
    

    查询表达式

    SELECT 100%98;
    

    查询函数

    SELECT NOW();
    

    查询时给列取别名

    在别名中包含空格或特殊的字符时,使用英文双引号包裹别名

    使用别名的好处:

    1. 便于理解
    2. 如果要查询的字段有重名的情况,使用别名可以区分开来

    使用as

    SELECT 列名1 AS "列名1别名", 列名2 as "列名2别名" FROM 表名;
    

    案例:

    SELECT 100%98 as "结果";
    SELECT last_name AS "姓", first_name AS "名" FROM employees;
    

    使用空格

    SELECT 列名1 "列名1别名", 列名2 "列名2别名" FROM 表名; 
    

    案例:

    #查询salary,显示结果为 out_put
    SELECT salary "out_put" FROM employees;
    

    查询去重

    SELECT DISTINCT 字段名 FROM 表名;
    

    案例:

    #查询员工表中涉及到的所有部门编号
    SELECT DISTINCT department_id FROM employees;
    

    加号(+)的作用

    Java中的 + 号:

    1. 运算符,两个操作数都为数值型
    2. 连接符,只要有一个操作数为字符串,就会被当做连接符使用

    MySQL中的 + 号:仅仅只有一个功能,用作运算,即运算符

    # 直接运算
    SELECT 数值 + 数值;
    
    # 先试图将字符转换成数值,如果转换成功,则继续运算,否则转换成0,在做运算
    SELECT 字符 + 数值;
    
    # 结果都为null
    SELECT NULL + 值;
    

    CONCAT函数

    功能:拼接字符,相当于java中的 "1" + "23" = "123";

    SELECT CONCAT(字符1, 字符2, 字符3,...);
    

    IFNULL函数

    功能:判断某字段或者表达式是否为null,如果为null返回指定的值,否则返回原本的值

    # 如果commission_pct列为null则返回0
    SELECT IFNULL(commission_pct, 0) FROM employees;
    

    ISNULL函数

    功能:判断某字段或表达式是否为null,如果是则返回1,否则返回0

    条件查询

    过滤:使用 WHERE 子句,将不满足条件的行(记录)过滤掉

    语法:

    SELECT 查询列表 FROM 表名 WHERE 筛选条件;
    
    运算符 符号 描述
    比较(条件)运算符 >、<、>=、<=、=、<>(!=) 大于、小于、大于等于、小于等于、等于、不等于
    BETWEEN...AND... 显示在某一区间的值(包含头尾)
    IN(可能的值的集合) 显示在in列表中的值,例如:IN(100, 200, 300)
    LIKE 通配符 模糊查询,Like语句中有两个通配符:%用来匹配多个字符;例如first_name like 'a%'; 用来匹配一个字符。例如first_name like 'a';
    IS NULL 判断是否为空;IS NULL判断为空; IS NOT NULL判断不为空
    逻辑运算符 AND(&&) 多个条件同时成立
    逻辑运算符 OR(||) 多个条件任一成立
    逻辑运算符 NOT(!) 不成立或者说去反,例:WHERE NOT(salary > 100)

    注意:为了方便建表,将between...and.. 、in、like、is null归为运算符,可能不是很准确

    按条件表达式筛选

    1. 查询工资>12000的员工信息
    SELECT
        * 
    FROM
        employees 
    WHERE
        salary > 12000;
    
    1. 查询部门编号不等于90的员工名和部门编号
    SELECT
        last_name,
        department_id 
    FROM
        employees 
    WHERE
        department_id <> 90;
    

    按逻辑表达式筛选

    1. 查询工资在10000到20000之间的员工名、工资以及奖金率(commission_pct)
    SELECT
        last_name,
        salary,
        commission_pct 
    FROM
        employees 
    WHERE
        salary >= 10000 AND salary <= 20000;
    

    或者

    SELECT
        last_name,
        salary,
        commission_pct 
    FROM
        employees 
    WHERE
        salary BETWEEN 10000 AND 20000;
    
    1. 查询部门编号不是在90到110之间,或者工资高于15000的员工信息
    SELECT 
        * 
    FROM 
        employees 
    WHERE 
        NOT ( department_id >= 90 AND department_id <= 110 ) 
        OR salary > 15000;
    

    或者

    SELECT 
        * 
    FROM 
        employees 
    WHERE 
        NOT ( department_id BETWEEN 90 AND 110) 
        OR salary > 15000;
    

    模糊查询

    关键字:LIKE

    特点:

    1. 一般和通配符搭配使用

      通配符:

      %:任意多个字符,包含0个字符

      _ :任意单个字符

    案例:

    1. 查询员工名中包含字符a的员工信息
    SELECT
        *
    FROM
        employees
    WHERE
        last_name LIKE '%a%';
    
    1. 查询员工名中第三个字符为m,第五个字符为n的员工名和工资
    SELECT
        last_name,
        salary
    FROM
        employees
    WHERE
        last_name LIKE '__m_n%';
    
    1. 查询员工名中第二个字符为_的员工名

      如果查询的字符为_,这时就需要转义,可以使用\,可以使用ESCAPE,定义一个转义标识

      ESCAPE:定义转义标识

    SELECT
        last_name
    FROM
        employees
    WHERE
        last_name LIKE '_$_%' ESCAPE '$';
    

    IN

    含义:判断某字段的值是否属于IN列表中的某一项

    特点:

    1. 使用IN提高语句简洁度
    2. 列表的值类型必须一致或兼容
    3. 列表中不支持通配符

    查询员工的工种编号是IT_PROG、AD_VP、AD_PRES中的一个的员工名和工种编号

    SELECT
        last_name,
        job_id
    FROM
        employees
    WHERE 
        job_id IN('IT_PROG', 'AD_VP', 'AD_PRES');
    

    或者

    SELECT
        last_name,
        job_id
    FROM
        employees
    WHERE
        job_id = 'IT_PROG' OR job_id = 'AD_VP' OR job_id = 'AD_PRES';
    

    IS NULL

    =或<>不能用于判断null值;IS NULL 或 IS NOT NULL可以判断null值

    1. 查询没有奖金的员工名和奖金率
    SELECT
        last_name,
        commission_pct
    FROM
        employees
    WHERE
        commission_pct IS NULL;
    
    1. 查询有奖金的员工名和奖金率
    SELECT
        last_name,
        commission_pct
    FROM
        employees
    WHERE
        commission_pct IS NOT NULL;
    

    安全等于<=>

    1. 查询没有奖金的员工名和奖金率
    SELECT
        last_name,
        commission_pct
    FROM
        employees
    WHERE
        commission_pct <=> NULL;
    
    1. 查询工资为12000的员工信息
    SELECT
        *
    FROM
        employees
    WHERE
        salary <=> 12000;
    

    注意:

    IS NULL:仅仅可以判断NULL值,可读性比较高,建议使用

    <=>:既可以判断NULL值,又可以判断普通的数据,可读性比较低,不推荐使用

    相关文章

      网友评论

          本文标题:MySQL的基本查询和条件查询

          本文链接:https://www.haomeiwen.com/subject/cieaqltx.html