• 【MySQL】查询语句


    选择语句 / 子句

    • USE:选择使用的database
    • SELECT:选择查询的列
    • FROM:选择查询的表
    • WHERE:条件查询
    • ORDER BY :排序
    -- 关键词:USE, SELECT, FROM,WHERE, ORDER BY
    USE sql_store; -- 选择一个database
    
    SELECT *  -- 选择所有的列
    FROM customers -- 从customers这个表中
    WHERE customer_id = 1 -- 查询条件:查到id为1的数据
    ORDER BY first_name -- 根据firstname排序
    -- 注意:SELECT, FROM, WHERE, ORDER BY的顺序是固定的,如果改变语句的顺序,会发生语法错误
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    -- 关键词:AS
    SELECT
           first_name,
           last_name,
           points,
           (points + 10) * 100 AS discount_factor -- AS 可以为列取名字
    FROM customers
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    -- 小小作业
    SELECT
        name,
        unit_price,
        unit_price * 1.1 AS 'new price' -- 列名要想用空格的话,需要用单引号引起来,否则不能用空格
    FROM products
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    比较运算符

    • 等于:是= 而不是==
    • 不等:!= 或者 <> ,这两个都表示不等
    SELECT *
    FROM customers
    WHERE state = 'VA' //表示筛选在VA的数据
    
    WHERE state <> 'VA' //表示筛选不在VA的数据
    -- 注意:字符串需要用单引号引起
    
    WHERE birth_date > '1990-01-01'
    -- 筛选日期时,也要将日期用单引号引起。
    -- MySQL标准或默认日期表述形式:4位年份-2位月份-2位日期
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    -- 小小练习
    SELECT *
    FROM orders
    WHERE order_date >= '2019-01-01 '
    
    • 1
    • 2
    • 3
    • 4

    AND,OR,NOT运算符

    • 优先级:AND > OR
    SELECT *
    FROM customers
    WHERE birth_date > '1990-01-01' OR
          (points > 1000 AND state = 'VA')
    
    • 1
    • 2
    • 3
    • 4
    -- 小小练习
    SELECT *
    FROM order_items
    WHERE order_id = 6 AND unit_price * quantity > 30
    
    • 1
    • 2
    • 3
    • 4

    IN运算符

    SELECT *
    FROM customers
    -- 查询多个条件时用OR比较麻烦
    WHERE state = 'VA' OR state = 'GA' OR state = 'FL'
    -- 此时可以用IN运算符
    WHERE state IN ('VA', 'FL', 'GA')
    -- 可用NOT IN查询不在IN范围内的
    WHERE state NOT IN ('VA', 'FL', 'GA')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    -- 小小练习
    SELECT *
    FROM products
    WHERE quantity_in_stock IN (49, 38, 72)
    
    • 1
    • 2
    • 3
    • 4

    BETWEEN运算符

    • BETWEEN……AND……
    SELECT *
    FROM customers
    -- 积分在1000到3000范围内的数据
    WHERE points >= 1000 AND points <= 3000
    
    -- 用BETWEEN更加简介
    WHERE points BETWEEN 1000 AND 3000
    
    -- 小小练习
    SELECT *
    FROM customers
    WHERE birth_date BETWEEN '1990-01-01' AND '2000-01-01'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    LIKE运算符

    • % 代表任意字符数
    • _ 代表一个单字符
    SELECT *
    FROM customers
    -- 查询以b或B开头的lastname的数据,表示在b之后可以有任意字符数
    WHERE last_name LIKE 'b%'
    
    -- 表示在b之前和之后都可有任意字符数
    WHERE last_name LIKE '%b%'
    
    -- 表示y之前有5个字符
    WHERE last_name LIKE '_____y'
    
    -- 表示b和y之间有4个字符
    WHERE last_name LIKE 'b____y'
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    -- 小小联系
    -- 1
    SELECT *
    FROM customers
    WHERE address LIKE '%trail%' OR
          address LIKE '%avenue%';
    
    -- 2
    SELECT *
    FROM customers
    WHERE phone LIKE '%9';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    REGEXP运算符

    • 正则表达式
      • ^ 代表字符串开头
      • ¥ 代表字符串结尾
      • | 代表逻辑或,可以给多个搜索模式
      • [abcd] 匹配任意在括号里列举的单字符
      • [a-f] 匹配从a到f的字符
    SELECT *
    FROM customers
    WHERE last_name REGEXP 'field|mac|rose'
    -- 逻辑或,搜索姓名中有field、mac或rose的数据
    
    • 1
    • 2
    • 3
    • 4
    SELECT *
    FROM customers
    WHERE last_name REGEXP '^rose'
    -- 代表rose开头,搜索以rose开头的数据
    
    • 1
    • 2
    • 3
    • 4
    SELECT *
    FROM customers
    WHERE last_name REGEXP 'field$'
    -- 代表field结尾,搜索以field结尾的数据
    
    • 1
    • 2
    • 3
    • 4
    SELECT *
    FROM customers
    WHERE last_name REGEXP '[gim]e'
    -- 任何姓氏中有ge、ie或me的数据
    
    WHERE last_name REGEXP '[a-h]e'
    -- 任何姓氏中有ae,be,ce…… he的数据
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    -- 小小练习
    -- 踩坑:注意引号内的内容不能随便加空格,加空格的话就会被认为需要匹配一个空格
    SELECT *
    FROM customers
    WHERE last_name REGEXP 'EY$|ON$'
    
    SELECT *
    FROM customers
    WHERE first_name REGEXP 'ELKA|AMBUR'
    
    
    SELECT *
    FROM customers
    WHERE last_name REGEXP '^MY|SE'
    
    SELECT *
    FROM customers
    WHERE last_name REGEXP 'B[RU]'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    IS NULL运算符

    • IS NULL
    • IS NOT NULL
    -- 小小练习
    SELECT *
    FROM orders
    WHERE shipped_date IS NULL
    
    • 1
    • 2
    • 3
    • 4

    ORDER BY子句

    • DESC 代表倒序排列
    SELECT *
    FROM customers
    ORDER BY first_name DESC
    -- DESC代表倒序排列
    
    ORDER BY state DESC, first_name
    -- 代表先用state降序排列,相同state的按名字升序排列。可以把DESC写在任意条件后
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    -- 只筛选名和姓两列
    -- 但可以按生日排序
    -- 其他数据库中这样查询会报错,mySQL不会报错
    SELECT first_name, last_name
    FROM customers
    ORDER BY birth_date
    
    ORDER BY 1, 2
    -- 按列顺序排列,代表按照firstname,lastname排列。最好尽量避免这种排序方法
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    -- 小小练习
    SELECT *, quantity * unit_price AS total_price
    FROM order_items
    WHERE order_id = 2
    ORDER BY total_price DESC
    
    • 1
    • 2
    • 3
    • 4
    • 5

    LIMIT 子句

    • 限定查询返回的记录
    SELECT *
    FROM customers
    LIMIT 3
    -- 返回前3个数据
    
    LIMIT 6, 3 
    -- 跳过前6个数据,返回7-9这3个数据
    -- page 1: 1 - 3
    -- page 2: 4 - 6
    -- page 3: 7 - 9
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    -- 小小练习,返回前三忠实的顾客(积分排名前3)
    SELECT *
    FROM customers
    ORDER BY points DESC
    LIMIT 3
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    纳米/荧光/磷脂/荧光探针/聚合物/化合物/磁性纳米粒子修饰AIE微球相关研究
    Tomcat内存马学习5:Agent型
    【计算机网络】MTU和MSS
    学校介绍静态HTML网页设计作品 DIV布局学校官网模板代码 DW大学网站制作成品下载 HTML5期末大作业
    [idea]关于idea开发乱码的配置
    嵌入式笔试面试刷题(day12)
    初学者需掌握的12条基本 Linux 命令
    淘宝/天猫添加收货地址 API
    什么是持续部署
    【Apollo】自动驾驶技术的介绍
  • 原文地址:https://blog.csdn.net/xuwuuu/article/details/134254601