• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 从数据表查询数据(select)

    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       |
    +----------	+--------	+---------	+------	+------------	+------------	+
    | Fluffy    | Harold  | cat      | f     | 1993 -02 -04  | NULL        |
    | Claws     | Gwen    | cat      | m     | 1994 -03 -17  | NULL        |
    | Buffy     | Harold  | dog      | f     | 1989 -05 -13  | NULL        |
    | Fang      | Benny   | dog      | m     | 1990 -08 -27  | NULL        |
    | Bowser    | Diane   | dog      | m     | 1979 -08 -31  | 1995 -07 -29  |
    | Chirpy    | Gwen    | bird     | f     | 1998 -09 -11  | NULL        |
    | Whistler  | Gwen    | bird     | NULL  | 1997 -12 -09  | NULL        |
    | Slim      | Benny   | snake    | m     | 1996 -04 -29  | NULL        |
    | Puffball  | Diane   | hamster  | f     | 1999 -03 -30  | NULL        |
    +----------	+--------	+---------	+------	+------------	+------------	+
    

    SELECT如果您想参见整个表(例如,在将初始数据集加载到表中之后),则这种形式非常有用。例如,您可能碰巧认为Bowser的出生日期似乎不太正确。查阅原始的血统书,您会发现正确的出生年份应该是1989,而不是1979。

    至少有两种方法可以解决此问题:

    • 编辑文件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问题仅更改的记录,不要求您重新加载表。


    选择特定行

    如上一节所示,很容易检索整个表。只需WHERESELECT语句中省略该子句即可。但通常您不希望看到整个表格,尤其是当表格变大时。取而代之的是,您通常对回答特定问题更感兴趣,在这种情况下,您可以对所需信息指定一些约束。让我们从与宠物有关的问题来看一些选择查询。

    您只能从表中选择特定的行。例如,如果要验证对Bowser生日的更改,请选择Bowser的记录,如下所示:

    mysql> SELECT * FROM pet WHERE name = 'Bowser';
    +--------	+-------	+---------	+------	+------------	+------------	+
    | name    | owner  | species  | sex   | birth       | death       |
    +--------	+-------	+---------	+------	+------------	+------------	+
    | Bowser  | Diane  | dog      | m     | 1989 -08 -31  | 1995 -07 -29  |
    +--------	+-------	+---------	+------	+------------	+------------	+
    

    输出确认该年正确记录为1989,而不是1979。

    字符串比较通常不区分大小写,因此您可以将名称指定为'bowser''BOWSER'等等。查询结果相同。

    您可以在任何列上指定条件,而不仅仅是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   |
    +-------	+--------	+---------	+------	+------------	+-------	+
    

    选择特殊列

    如果您不想看到表中的整个行,只需用逗号分隔您感兴趣的列的名称即可。例如,如果您想知道动物何时出生,请选择namebirth列:

    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  |
    +--------	+---------	+------------	+