• Day-2:检索数据


    1、SELECT语句:使用SELECT检索数据,必须至少给出两条信息-想选择什么,以及从什么地方选择。

      注:关键字(keyword):作为SQL组成部分的保留字,关键字不能用作表或者列的名字。

    输入:
    ------------------
    SELECT
    prod_name FROM Products;

    输出:

    prod_name

    ----------------------

    Fish bean bag toy

    Bird bean bag toy

    Rabbit bean bag toy

    8 inch teddy bear

    12 inch teddy bear

    18 inch teddy bear

    Raggedy Ann

    King doll

    Queen doll

         注:样表数据使用的是SQL必知必会的数据

    2、SQL语法

      SQL语句以(;)结尾,不是必须但最好这样做。

      SQL语句不区分大小写,但一般对SQL关键字大写,对列名和表名小写(有些特殊的DBMS系统会区分),这样写容易区分和调试。

      SQL语句空格会被忽略,以下三种写法等价,但将SQL语句分成多行更容易阅读和调试。

    写法1:
    SELECT prod_name
    FROM Products;
    
    写法2:
    SELECT prod_name FROM Products;
    
    写法3:
    SELECT
    prod_name 
    FROM 
    Products;

    3、同时检索多个列

      从同一个表中同时检索多个列,使用SELECT 加多个关键字,每个关键字用逗号分开。

    输入:
    ------------------------
    select prod_name, prod_id, prod_price
    from products;
    
    输出:
    -------------------------------------------------- pro_name prod_id prod_price Fish bean bag toy BNBG01
    3.49 Bird bean bag toy BNBG02 3.49 Rabbit bean bag toy BNBG03 3.49 8 inch teddy bear BR01 5.99 12 inch teddy bear BR02 8.99 18 inch teddy bear BR03 11.99 Raggedy Ann RGAN01 4.99 King doll RYL01 9.49 Queen doll RYL02 9.49

    3、检索所有列 

      SELECT * :星号(*)是通配符(一般最好别用,降低检索和应用户程序的性能) 

    输入
    ------------------
    select *
    from products;
    
    输出
    ---------------------
    prod_id   vend_id  prod_name              prod_price   prod_desc
    BNBG01    DLL01    Fish bean bag toy      3.49         Fish bean bag toy, complete with bean bag worms with which to feed it
    BNBG02    DLL01    Bird bean bag toy      3.49         Bird bean bag toy, eggs are not included
    BNBG03    DLL01    Rabbit bean bag toy    3.49         Rabbit bean bag toy, comes with bean bag carrots
    BR01      BRS01    8 inch teddy bear      5.99         8 inch teddy bear, comes with cap and jacket
    BR02      BRS01    12 inch teddy bear     8.99         12 inch teddy bear, comes with cap and jacket
    BR03      BRS01    18 inch teddy bear     11.99        18 inch teddy bear, comes with cap and jacket
    RGAN01    DLL01    Raggedy Ann            4.99         18 inch Raggedy Ann doll
    RYL01     FNG01    King doll              9.49         12 inch king doll with royal garments and crown
    RYL02     FNG01    Queen doll             9.49         12 inch queen doll with royal garments and crown
                    

    4、检索不同的值

    检索products表中的所有产品供应商的ID

    select vend_id
    from products;
    
    输出
    ---------------
    DLL01
    DLL01
    DLL01
    BRS01
    BRS01
    BRS01
    DLL01
    FNG01
    FNG01

    分析:输出有9行,但只有三个不同的值,使用DISTINCT关键字检索不同的值,且必须直接放在列名前面。DISTINCT作用于后跟的所有列,不仅仅是第一列。

    select distinct vend_id
    from products;
    
    输出:
    -----------------
    DLL01
    BRS01
    FNG01
    DISTINCT作用于后跟的所有列,不仅仅是第一列。
    --------------
    select
    distinct vend_id, prod_price from products; 输出:----------------- DLL01 3.49 BRS01 5.99 BRS01 8.99 BRS01 11.99 DLL01 4.99 FNG01 9.49

     5、限制结果

      SQL没有这个功能,但MYSQL有LIMIT和OFFSET语法

      LIMIT 数字:最多返回多少行。

      LIMIT 数字 OFFSET 数字:从第几行开始最多返回多少行,简写:limit 2,3 表示limit 3 offset 2,OFFSET是从0开始,1是指第2行。

    select prod_name
    from products
    limit 5;
    
    
    输出
    ----------------
    Fish bean bag toy
    Bird bean bag toy
    Rabbit bean bag toy
    8 inch teddy bear
    12 inch teddy bear
    select prod_name
    from products
    limit 5 offset 5;
    
    输出
    -----------------
    18 inch teddy bear
    Raggedy Ann
    King doll
    Queen doll

    6、三种注释

      方式一:--行内注释

      方式二:#行内注释

      方式三:/**/块注释 

    7、排序检索数据

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

    #输入
    select prod_name
    from products;
    
    /*输出:
    prod_name
    --------------------
    Fish bean bag toy
    Bird bean bag toy
    Rabbit bean bag toy
    8 inch teddy bear
    12 inch teddy bear
    18 inch teddy bear
    Raggedy Ann
    King doll
    Queen doll
    */
    #输入
    select prod_name
    from products
    order by prod_name;
    
    /*
    输出:
    prod_name
    -------------------
    12 inch teddy bear
    18 inch teddy bear
    8 inch teddy bear
    Bird bean bag toy
    Fish bean bag toy
    King doll
    Queen doll
    Rabbit bean bag toy
    Raggedy Ann
    */

    order by 子句可以对输出进行排序,指定order by子句,应该保证它是select语句中最后一条子句,否则会出现错误信息。

    7.1、按多个列排序

    要按多个列排序。简单指定列名,列名之间用逗号分开(同选择多列一样)。先对prod_price排序,如果有相同的prod_price,再对prod_name排序。

    select prod_id, prod_price, prod_name
    from products
    order by prod_price, prod_name;
    
    /*
    prod_id, prod_price, prod_name
    BNBG02    3.49    Bird bean bag toy
    BNBG01    3.49    Fish bean bag toy
    BNBG03    3.49    Rabbit bean bag toy
    RGAN01    4.99    Raggedy Ann
    BR01    5.99    8 inch teddy bear
    BR02    8.99    12 inch teddy bear
    RYL01    9.49    King doll
    RYL02    9.49    Queen doll
    BR03    11.99    18 inch teddy bear
    
    */

    7.2按列位置排序(相对位置),order by 2:表示按select清单中第二个列prod_price排序,order by 2,3表示先按prod_price,再按prod_name排序。

    select prod_id, prod_price, prod_name
    from products
    order by 2,3
    
    /*
    prod_id, prod_price, prod_name
    BNBG02    3.49    Bird bean bag toy
    BNBG01    3.49    Fish bean bag toy
    BNBG03    3.49    Rabbit bean bag toy
    RGAN01    4.99    Raggedy Ann
    BR01    5.99    8 inch teddy bear
    BR02    8.99    12 inch teddy bear
    RYL01    9.49    King doll
    RYL02    9.49    Queen doll
    BR03    11.99    18 inch teddy bear
    
    */

    7.3指定排序方向

    可做升序(默认ASC关键字)或者降序排序,指定DESC(降序)关键字。

    DESC关键字只应用到直接位于其前面的列名,order by prod_price DESC, prod_name,prod_price有作用,prod_name无作用。

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

    select prod_id, prod_price, prod_name
    from products
    order by prod_price desc;
    
    /*输出降序
    prod_id,  prod_price,    prod_name
    BR03       11.99         18 inch teddy bear
    RYL01      9.49          King doll
    RYL02      9.49          Queen doll
    BR02       8.99          12 inch teddy bear
    BR01       5.99          8 inch teddy bear
    RGAN01     4.99          Raggedy Ann
    BNBG01     3.49          Fish bean bag toy
    BNBG02     3.49          Bird bean bag toy
    BNBG03     3.49          Rabbit bean bag toy
    */
    select prod_id, prod_price, prod_name
    from products
    order by prod_price desc, prod_name;
    
    /*
    prod_id, prod_price, prod_name
    BR03    11.99    18 inch teddy bear
    RYL01    9.49    King doll
    RYL02    9.49    Queen doll
    BR02    8.99    12 inch teddy bear
    BR01    5.99    8 inch teddy bear
    RGAN01    4.99    Raggedy Ann
    BNBG02    3.49    Bird bean bag toy
    BNBG01    3.49    Fish bean bag toy
    BNBG03    3.49    Rabbit bean bag toy
    */
    select prod_id, prod_price, prod_name
    from products
    order by prod_price desc, prod_name desc;
    
    /*
    prod_id, prod_price, prod_name
    BR03    11.99    18 inch teddy bear
    RYL02    9.49    Queen doll
    RYL01    9.49    King doll
    BR02    8.99    12 inch teddy bear
    BR01    5.99    8 inch teddy bear
    RGAN01    4.99    Raggedy Ann
    BNBG03    3.49    Rabbit bean bag toy
    BNBG01    3.49    Fish bean bag toy
    BNBG02    3.49    Bird bean bag toy
    */
  • 相关阅读:
    [HDU 4828] Grids
    约瑟夫问题合集
    [POJ 1365] Prime Land
    [POJ 3270] Cow Sorting
    [POJ 1674] Sorting by Swapping
    SGU 188.Factory guard
    POJ 2942.Knights of the Round Table (双连通)
    POJ 1236.Network of Schools (强连通)
    POJ 2186.Popular Cows (强连通)
    POJ 1734.Sightseeing trip (Floyd 最小环)
  • 原文地址:https://www.cnblogs.com/jp-mao/p/6554793.html
Copyright © 2020-2023  润新知