3.3.4.1 すべてのデータの選択

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 の生年月日が正しくないようだと気付いたとします。血統書の原本を確認すると、正しい生年は 1979 年ではなく 1989 年であるとわかりました。

これを修正するには、少なくとも 2 つの方法があります。

  • ファイル pet.txt を編集して間違いを修正したあと、DELETELOAD 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 は該当するレコードだけを変更するため、テーブルをリロードする必要はありません。


User Comments
  Posted by Vlad Dogaru on May 11, 2006
Or, if, for instance, you added an extra blank line in pet.txt and ended up with an extra empty row, you can use:

DELETE FROM pet WHERE name='';
  Posted by Jason Chesterton on October 1, 2006
Warning about the UPDATE statement:

If you forget the WHERE clause, you'll end up changing ALL the rows of the table.

Example: UPDATE pet SET birth = '2002-08-30';

(above line changes all pets' birthdates in the table to 2002-08-30)
  Posted by Vasanth Rajendran on October 30, 2007
fyi: if there are two or more rows which match the query, all of them are affected. So if there are two entries for Bowser, then both of them get affected.

This may lead to errors where the user changes more than what he bargained for. However, we can figure out from the number of rows affected that the change has impacted many entries instead of just one.

  Posted by Clive Norman on January 10, 2010
It is a good idea to first run a select to see which data is going to be affected, and then "comment out"/replace the select statement with the update\delete statement.
Sign Up Login You must be logged in to post a comment.