检索操作语句

    检索

    SELECT

    通配符 ,返回表中所有列。

    尽可能不要使用
    检索,明确列出所需列,检索不需要的列通常会降低检索和应用程序的性能。


    检索不同的列值,使用 DISTINCT

    应用于单列
    SELECT DISTINCT vend_id FROM products;


    应用于多列,DISTINCT 关键字应用与所有列而不是前置它的列。

    如果给出 SELECT DISTINCT vend_id, prod_price,除非指定的两个列(ven_id, prod_price)的行都不同,否则返回所有行。


    LIMIT


    LIMIT 5 , 返回不多于 5 行。

    LIMIT 5,5 返回从行 5 开始的 5 行。第一个数为开始位置,第二个数为要检索的行数。


    带一个值的 LIMIT 总是从第一行开始,给出的数为返回的行数。
    带两个值的 LIMIT 可以指定从行号为第一个值的位置开始。

    mysql> select from product limit 2;
    +——+——————-+————-+————-+—————+
    | id | prod_pprice | vend_id | created | modified |
    +——+——————-+————-+————-+—————+
    | 1 | 1 | 1 | 1 | 1 |
    | 2 | 2 | 1 | 2 | 2 |
    +——+——————-+————-+————-+—————+


    mysql> select
    from product limit 1,2;
    +——+——————-+————-+————-+—————+
    | id | prod_pprice | vend_id | created | modified |
    +——+——————-+————-+————-+—————+
    | 2 | 2 | 1 | 2 | 2 |
    | 3 | 2 | 3 | 3 | 3 |
    +——+——————-+————-+————-+—————+


    注意:limit 中 查询第一行,要使用的是 limit 0, 1,等价于 limit 1。

    MySQL 5 支持 LIMIT 的另一种语法: select from product limit 4 offset 3, 等价于 select from product limit 3, 4。




    排序检索数据


    子句(clause)

    SQL 语句由子句构成,有些子句是必须的,而有的是可选的。
    一个子句通常由一个关键字和所提供的数据组成。
    子句的例子有 SELECT 语句的 FROM 子句。


    ORDER BY 子句

    ORDER BY 子句取一个或多个列的名字,据此对输出进行排序


    SELECT prod_name FROM products ORDER BY prod_name; 对 prod_name 列以字母顺序排序数据


    按多个列排序

    如果要显示雇员清单,可能希望按姓和明排序(首先按姓排序,然后在每个姓中再按名排序)。


    为了按多个列排序,只要指定列名,列名之间用逗号分开即可。


    检索 3 个列,并按其中两个列对结果进行排序——首先按价格,然后再按名称排序

    select id, prod_price, prod_name from product order by prod_price, prod_name;


    在按多个列排序时,排序完全按所规定的顺序进行。换句话说,上述例子中,仅在多个行具有相同的 prod_price 值时,才对产品按 prod_name 进行排序。

    如果 prod_price 列中所有的值都是唯一的,则不会按 prod_name 排序。


    升序/降序,默认 ORDER BY 是升序,ORDER BY DESC 是降序。

    select * from product order by prod_pprice desc, name;


    如果想在多个列上进行降序排序,必须对每个列指定 DESC 关键字。

    与 DESC 相反的关键字是 ASC(ASCENDING),升序排序是默认的。


    ORDER BY 子句的位置,在给出 ORDER BY 子句时,应该保证它位于 FROM 子句之后。使用 LIMIT,它必须位于 ORDER BY 之后。