美文网首页JAVA后台开发_从入门到精通
3.2 从表检索信息,修改信息,排序

3.2 从表检索信息,修改信息,排序

作者: 笑Skr人啊 | 来源:发表于2017-04-07 15:21 被阅读0次

    SELECT语句用来从数据表中检索信息。语句的一般格式是:

    SELECT what_to_select
    FROM which_table
    WHERE conditions_to_satisfy;
    

    what_to_select指出你想要看到的内容,可以是列的一个表,或*表示“所有的列”。which_table指出你想要从其检索数据的表。WHERE子句是可选项,如果选择该项,conditions_to_satisfy指定行必须满足的检索条件。

    • 选择所有数据
      SELECT最简单的形式是从一个表中检索所有记录:
    mysql> select * from pet;
    +----------+-------+---------+------+------------+-------+
    | name     | owner | species | sex  | birth      | death |
    +----------+-------+---------+------+------------+-------+
    | Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL  |
    | Puffball | Diane | hamster | f    | 1999-03-30 | NULL  |
    +----------+-------+---------+------+------------+-------+
    2 rows in set (0.00 sec)
    
    • 修改数据

    至少有两种修正方法:

    •   编辑文件“pet.txt”改正错误,然后使用DELETE和LOAD DATA清空并重新装载表:
      
    ·                mysql> DELETE FROM pet;
    ·                mysql> LOAD DATA LOCAL INFILE 'pet.txt' INTO TABLE pet;.
    

    然而, 如果这样操做,必须重新输入Puffball记录。

    •    用一个UPDATE语句仅修正错误记录:
      
    ·                mysql> UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser';
    

    UPDATE只更改有问题的记录,不需要重新装载数据库表。

    • 你可以在任何列上指定条件,不只仅仅是name。例如,如果你想要知道哪个动物在1998以后出生的,测试birth列:
    mysql> SELECT * FROM pet WHERE birth > '1998-1-1';
    +----------+-------+---------+------+------------+-------+
    | name     | owner | species | sex  | birth      | death |
    +----------+-------+---------+------+------------+-------+
    | Chirpy   | Gwen  | bird    | f    | 1998-09-11 | NULL  |
    | Puffball | Diane | hamster | f    | 1999-03-30 | NULL  |
    +----------+-------+---------+------+------------+-------+
    
    
    • 可以组合条件,例如,找出雌性的狗:
    mysql> SELECT * FROM pet WHERE species = 'dog' AND sex = 'f';
    +-------+--------+---------+------+------------+-------+
    | name  | owner  | species | sex  | birth      | death |
    +-------+--------+---------+------+------------+-------+
    | Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
    +-------+--------+---------+------+------------+-------+
    

    上面的查询使用AND逻辑操作符,也有一个OR操作符:

    mysql> SELECT * FROM pet WHERE species = 'snake' OR species = 'bird';
    +----------+-------+---------+------+------------+-------+
    | name     | owner | species | sex  | birth      | death |
    +----------+-------+---------+------+------------+-------+
    | Chirpy   | Gwen  | bird    | f    | 1998-09-11 | NULL  |
    | Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL  |
    | Slim     | Benny | snake   | m    | 1996-04-29 | NULL  |
    +----------+-------+---------+------+------------+-------+
    
    

    AND和OR可以混用,但AND比OR具有更高的优先级。如果你使用两个操作符,使用圆括号指明如何对条件进行分组是一个好主意:

    mysql> SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm')
        -> OR (species = 'dog' AND sex = 'f');
    +-------+--------+---------+------+------------+-------+
    | name  | owner  | species | sex  | birth      | death |
    +-------+--------+---------+------+------------+-------+
    | Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
    | Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
    +-------+--------+---------+------+------------+-------+
    
    • 选择特殊列

    如果你不想看到表中的所有行,就命名你感兴趣的列,用逗号分开。例如,如果你想要知道你的动物什么时候出生的,选择name和birth列:

    mysql> SELECT name, birth FROM pet;
    +----------+------------+
    | name     | birth      |
    +----------+------------+
    | Fluffy   | 1993-02-04 |
    | Claws    | 1994-03-17 |
    | Buffy    | 1989-05-13 |
    | Fang     | 1990-08-27 |
    | Bowser   | 1989-08-31 |
    | Chirpy   | 1998-09-11 |
    | Whistler | 1997-12-09 |
    | Slim     | 1996-04-29 |
    | Puffball | 1999-03-30 |
    +----------+------------+
    
    
    • 找出谁拥有宠物,使用这个查询:
    mysql> SELECT owner FROM pet;
    +--------+
    | owner  |
    +--------+
    | Harold |
    | Gwen   |
    | Harold |
    | Benny  |
    | Diane  |
    | Gwen   |
    | Gwen   |
    | Benny  |
    | Diane  |
    +--------+
    
    • 请注意该查询只是简单地检索每个记录的owner列,并且他们中的一些出现多次。为了使输出减到最少,增加关键字DISTINCT检索出每个唯一的输出记录:
    mysql> SELECT DISTINCT owner FROM pet;
    +--------+
    | owner  |
    +--------+
    | Benny  |
    | Diane  |
    | Gwen   |
    | Harold |
    +--------+
    
    
    • 可以使用一个WHERE子句结合行选择与列选择。例如,要想查询狗和猫的出生日期,使用这个查询:
    mysql> SELECT name, species, birth FROM pet
        -> WHERE species = 'dog' OR species = 'cat';
    +--------+---------+------------+
    | name   | species | birth      |
    +--------+---------+------------+
    | Fluffy | cat     | 1993-02-04 |
    | Claws  | cat     | 1994-03-17 |
    | Buffy  | dog     | 1989-05-13 |
    | Fang   | dog     | 1990-08-27 |
    | Bowser | dog     | 1989-08-31 |
    +--------+---------+------------+
    
    • 排序

    你可能已经注意到前面的例子中结果行没有以特定的顺序显示。然而,当行按某种方式排序时,检查查询输出通常更容易。为了排序结果,使用ORDER BY 子句。这里是动物生日,按日期排序:

    mysql>
    SELECT name, birth FROM pet ORDER BY birth;
    
    +----------+------------+
    
    | name     | birth      |
    
    +----------+------------+
    
    | Buffy    | 1989-05-13 |
    
    | Bowser   | 1989-08-31 |
    
    | Fang     | 1990-08-27 |
    
    | Fluffy   | 1993-02-04 |
    
    | Claws    | 1994-03-17 |
    
    | Slim     | 1996-04-29 |
    
    | Whistler | 1997-12-09 |
    
    | Chirpy   | 1998-09-11 |
    
    | Puffball | 1999-03-30 |
    
    +----------+------------+
    

    在字符类型列上,与所有其他比较操作类似,分类功能正常情况下是以区分大小写的方式执行的。这意味着,对于等同但大小写不同的列,并未定义其顺序。对于某一列,可以使用BINARY强制执行区分大小写的分类功能,如:

    ORDER BY BINARY col_name
    
    • 默认排序是升序,最小的值在第一。要想以降序排序,在你正在排序的列名上增加DESC(降序 )关键字:
    mysql>SELECT name, birth FROM pet ORDER BY birth DESC;
    
    +----------+------------+
    
    | name     | birth      |
    
    +----------+------------+
    
    | Puffball | 1999-03-30 |
    
    | Chirpy   | 1998-09-11 |
    
    | Whistler | 1997-12-09 |
    
    | Slim     | 1996-04-29 |
    
    | Claws    | 1994-03-17 |
    
    | Fluffy   | 1993-02-04 |
    
    | Fang     | 1990-08-27 |
    
    | Bowser   | 1989-08-31 |
    
    | Buffy    | 1989-05-13 |
    
    +----------+------------+
    

    可以对多个列进行排序,并且可以按不同的方向对不同的列进行排序。例如,按升序对动物的种类进行排序,然后按降序根据生日对各动物种类进行排序(最年轻的动物在最前面),使用下列查询:

    mysql>
    SELECT name, species, birth FROM pet
    
        ->ORDER BY species, birth DESC;
    
    +----------+---------+------------+
    
    | name     | species | birth      |
    
    +----------+---------+------------+
    
    | Chirpy   | bird    | 1998-09-11 |
    
    | Whistler | bird    | 1997-12-09 |
    
    | Claws    | cat     | 1994-03-17 |
    
    | Fluffy   | cat     | 1993-02-04 |
    
    | Fang     | dog     | 1990-08-27 |
    
    | Bowser   | dog     | 1989-08-31 |
    
    | Buffy    | dog     | 1989-05-13 |
    
    | Puffball | hamster | 1999-03-30 |
    
    | Slim     | snake   | 1996-04-29 |
    
    +----------+---------+------------+
    

    注意DESC关键字仅适用于在它前面的列名();不影响species列的排序顺序

    相关文章

      网友评论

        本文标题:3.2 从表检索信息,修改信息,排序

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