美文网首页
【MySQL笔记】2 SELECT语句拓展

【MySQL笔记】2 SELECT语句拓展

作者: shawn233 | 来源:发表于2018-02-22 16:10 被阅读0次

    MySQL笔记基于教材,笔记中用到的数据库可以点击该链接下载

    用SELECT的ORDER BY子句排序

    子句 (clause) :SQL语句由子句构成,有些子句是必须的,有些子句是可选的。一个子句通常由一个关键字和所提供的数据组成。

    如果使用了ORDER BY子句,则结果按ORDER BY后指定的列排序。可以指定多个排序的列,优先级从左到右。注意ORDER BY应放在FROM

    mysql> SELECT prod_id, prod_price, prod_name
        -> FROM products
        -> ORDER BY prod_price, prod_name;
    +---------+------------+----------------+
    | prod_id | prod_price | prod_name      |
    +---------+------------+----------------+
    | FC      |       2.50 | Carrots        |
    | TNT1    |       2.50 | TNT (1 stick)  |
    | FU1     |       3.42 | Fuses          |
    | SLING   |       4.49 | Sling          |
    | ANV01   |       5.99 | .5 ton anvil   |
    | OL1     |       8.99 | Oil can        |
    | ANV02   |       9.99 | 1 ton anvil    |
    | FB      |      10.00 | Bird seed      |
    | TNT2    |      10.00 | TNT (5 sticks) |
    | DTNTR   |      13.00 | Detonator      |
    | ANV03   |      14.99 | 2 ton anvil    |
    | JP1000  |      35.00 | JetPack 1000   |
    | SAFE    |      50.00 | Safe           |
    | JP2000  |      55.00 | JetPack 2000   |
    +---------+------------+----------------+
    14 rows in set (0.01 sec)
    

    例子里的排序prod_price优先于prod_name,仅在prod_price相同时依据prod_name排序。

    还可以对排序的每个列指定升序 (ascending) 或降序 (descending)。用到ASCDESC关键字。不指定时默认升序

    ORDER BY prod_price ASC, prod_name DESC;
    

    ORDER BYLIMIT 1一起用可以实现找最大/小的值。

    用SELECT的WHERE子句指定搜索条件

    搜索条件 (search criteria):只搜索需要的数据。

    WHERE子句限定了某列的值与某已知值的关系(等于,不等于,大于,小于等)。关系由WHERE子句的操作符给出。

    操作符 说明
    = 等于
    <> 或 != 不等于
    < 小于
    <= 小于等于
    > 大于
    >= 大于等于
    BETWEEN a AND b 在值a和值b之间
    IS NULL 值为NULL

    值为NULL时,只要限定的条件不是IS NULL,一定不会返回。

    WHERE子句还可以使用AND、OR、IN、NOT等逻辑连接词组合条件。

    • AND的运算优先级高于OR
    • IN后的合法值清单用圆括号括起来
    • MySQL的NOT可以对IN、BETWEEN、EXISTS子句取反

    在WHERE中使用带LIKE关键字的通配符搜索

    通配符 (wildcard):用来匹配值的一部分的特殊字符。
    搜索模式 (search pattern):由字面值、通配符或两者组合构成的搜索条件。

    LIKE表示后跟的条件中使用了通配符,而非普通的相等匹配

    两种常用的通配符:%_

    通配符 作用
    % 匹配任意长度(包括0)的字符,但不能匹配NULL
    _ 恰好匹配一个字符
    • 通配符会拖慢搜索速度。如非必要,用别的操作代替通配符
    • 将通配符放在搜索模式的开头会大大延长搜索用时。因此不建议把通配符放在开头
    • 如果结尾处有一些空格,最好在搜索模式最后加上%进行匹配
    mysql> SELECT prod_id, prod_name
        -> FROM products
        -> WHERE prod_name LIKE '%anvil%';
    +---------+--------------+
    | prod_id | prod_name    |
    +---------+--------------+
    | ANV01   | .5 ton anvil |
    | ANV02   | 1 ton anvil  |
    | ANV03   | 2 ton anvil  |
    +---------+--------------+
    3 rows in set (0.01 sec)
    

    在WHERE中使用正则表达式搜索

    关键字REGEXP,表示后跟的内容作为正则表达式处理。注意REGEXPLIKE的一个重要区别是,LIKE一定会匹配整个列值,而REGEXP只会从整个列值中寻找匹配的字段。如果想要正则表达式匹配整个列值,则需要用到^$定位符。

    MySQL支持典型的正则表达式语法,在此不赘述。

    在SELECT中使用计算字段

    拼接 (concatenate):将值联结到一起构成单个值。MySQL中,函数Concat()用来拼接字段。

    计算字段 (field) 在地位上与列 (column) 等同,在结果中也像列一样显示。可以在计算字段后加上AS关键字对该计算字段命名,方便客户机上对计算结果的使用。

    mysql> SELECT Concat(RTrim(vend_name), '(', RTrim(vend_country), ')') AS vend_title
        -> FROM vendors
        -> ORDER BY vend_name;
    +------------------------+
    | vend_title             |
    +------------------------+
    | ACME(USA)              |
    | Anvils R Us(USA)       |
    | Furball Inc.(USA)      |
    | Jet Set(England)       |
    | Jouets Et Ours(France) |
    | LT Supplies(USA)       |
    +------------------------+
    6 rows in set (0.01 sec)
    

    除了Concat()拼接列值外,MySQL还支持对数值的四则运算(+-*/

    mysql> SELECT prod_id,
        -> quantity,
        -> item_price,
        -> quantity * item_price AS expanded_price
        -> FROM orderitems
        -> WHERE order_num = 20005;
    +---------+----------+------------+----------------+
    | prod_id | quantity | item_price | expanded_price |
    +---------+----------+------------+----------------+
    | ANV01   |       10 |       5.99 |          59.90 |
    | ANV02   |        3 |       9.99 |          29.97 |
    | TNT2    |        5 |      10.00 |          50.00 |
    | FB      |        1 |      10.00 |          10.00 |
    +---------+----------+------------+----------------+
    4 rows in set (0.01 sec)
    

    用Trim函数去除空格

    函数 作用
    RTrim() 去除右端的空格
    LTrim() 去除左端的空格
    Trim() 去除左右两端的空格

    用SELECT进行函数测试

    Now()函数返回当前日期与时间

    mysql> SELECT Now();
    +---------------------+
    | Now()               |
    +---------------------+
    | 2018-02-22 16:07:14 |
    +---------------------+
    1 row in set (0.01 sec)
    

    MySQL系列笔记


    相关文章

      网友评论

          本文标题:【MySQL笔记】2 SELECT语句拓展

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