削除する行数と並べ替えの指定

広告

データを削除する場合にも行数の指定と並び替えの指定を行うことができます。次の書式を使います。

DELETE FROM db_name.tbl_name [WHERE where_condition]
  ORDER BY col_name [ASC | DESC]
  LIMIT row_count;

LIMIT句を指定した場合、指定した行数分だけ削除が行われるとそこで終了します。

ORDER BY句を指定した場合、削除前に指定した方式で並べ替えを行った上で削除を行います。ORDER BY句の詳細はここでは省略しますが、指定のカラムの値に対してASCを指定した場合は昇順、DESCを指定した場合は降順で並べ替えを行います。省略した場合は昇順です。

LIMIT句とORDER BY句は単独で指定できますし、同時に指定もできます。ただDELETE文においてORDER BY句はLIMIT句と同時に指定する場合しかあまり使い道はないと思います。

実際には次のように使用します。

[例1]categoryカラムの値が'Fruit'のデータを10行分削除する
  DELETE FROM uriage WHERE category = 'Fruit' LIMIT 10;

[例2]salesカラムの値が少ない順に5行分削除する
  DELETE FROM uriage ORDER BY sales LIMIT 5;

サンプル

実際に試してみます。まず次のようなテーブルを作成します。

mysql> create table uriage(name varchar(20), cate varchar(20), sales int);

p11-1

テーブルにはデータを次のように格納しておきます。

p11-2

では「cate」カラムの値が'Fruit'のデータを対象に「sales」カラムの値が少ないものから3行のデータを削除してみます。

mysql> delete from uriage where cate = 'Fruit' order by sales limit 3;

p11-3

ではテーブルのデータを取得して確認してみます。

p11-4

「cate」カラムの値が'Fruit'のデータで「sales」カラムの値が少ないものから順に3行のデータ('Melon', 'Peach', 'Grapes')が削除されていることが確認できます。

( Written by Tatsuo Ikura )