• SELECT 语句

      • 使用SELECT检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择
      • 检索单个列或多、所有列

        1. SELECT code FROM a;
        2. -- 上述语句利用SELECT语句从a表中检索一个名为code的列
        3. -- 所需的列名在SELECT关键字之后给出, FROM关键字指出从其中检索数据的表名
        4. -- SELECT关键字后给出多个列名,列名之间必须以逗号分隔可实现查询多个列名
        5. -- 检索所有列可用通配符 *
        6. SELECT * FROM a;
        7. -- 除非需要表中的所有数据,否则别使用通配符,检索不需要的列通常会降低检索和应用程序的性能
        8. -- 通配符优点是可以检索名字未知的列

        image.png

      • 检索不同的行

        • SELECT返回所有匹配的行,所以有些会有部分数据重复的情况
        • 可是使用 DISTINCT(去重) ```sql SELECT DISTINCT vend_id FROM priducts; — SELECT DISTINCT vend_id告诉MySQL只返回不同(唯一)的vend_id行 — 如果使用 DISTINCT 关键字,它必须直接放在列名的前面 — DISTINCT关键字应用于所有列而不仅是前置它的列。如果给出SELECT DISTINCT vend_id,prod_price,除非指定的两个列都不同,否则所有行都将被检索出来
    
       - 限制结果
          - SELECT语句返回所有匹配的行,它们可能是指定表中的每个行
          - LIMIT 
    ```sql
    SELECT prod_name FROM products LIMIT 5;
    -- LIMIT 5指示MySQL返回不多于5行
    -- 为得出下一个5行,可指定要检索的开始行和行数
    SELECT prod_name FROM products LIMIT 5,5;
    -- 带一个值的LIMIT总是从第一行开始,给出的数为返回的行数。带两个值的LIMIT可以指定从行号为第一个值的位置开始。
    -- 行0 检索出来的第一行为行0而不是行1。因此, LIMIT 1, 1将检索出第二行而不是第一行。
    -- 在行数不够时 LIMIT中指定要检索的行数为检索的最大行数。如果没有足够的行(例如,给出LIMIT 10, 5,但只有13行), MySQL将只返回它能返回的那么多行。
    
      - MySQL 5的LIMIT语法 LIMIT 3, 4的含义是从行4开始的3行还是从行3开始的4行?如前所述,它的意思是从行3开始的4行,这容易把人搞糊涂。由于这个原因, MySQL 5支持LIMIT的另一种替代语法。 LIMIT4 OFFSET 3意为从行3开始取4行,就像LIMIT 3, 4一样。
    
    • 使用完全限定的表名
      • 使用完全限定的名字来引用列(同时使用表名和列字)
        SELECT products.prod_name FROM products;
        -- 作用一样,但是使用了一个完全限定的列名
        SELECT products.prod_name FROM crashcourse.products
        -- 假定 products 在 crashcourse 数据库中,也可以这样使用