MySQLのデータ操作
テーブルにデータを追加したり、編集するコマンドです。
データを抽出する
基本構文
SELECT カラム名 FROM テーブル名 WHERE 条件 ORDER BY ソート条件;
全カラム抽出
SELECT * FROM テーブル名;
指定したカラムのみ抽出
SELECT カラム名[, カラム名2...] FROM テーブル名;
DISTINCT
重複した値は1行として抽出します。
SELECT DISTINCT カラム名[, カラム名2...] FROM テーブル名;
カラムを複数指定した場合は、全てが同じものを1行として抽出します。
抽出条件
値、条件が文字列の場合は''
で囲みます。
カラムの値が一致する行を抽出
WHERE カラム名 = 値
カラムの値が一致しない行を抽出
WHERE カラム名 <> 値
カラムの値がNULLの行を抽出
WHERE カラム名 IS NULL;
カラムの値がNULL以外の行を抽出
WHERE カラム名 IS NOT NULL;
カラムの値がリストのいづれかと一致する行を抽出
WHERE カラム名 IN (値1, 値2, ...)
カラムの値がリストのどれとも一致しない行を抽出
WHERE カラム名 NOT IN (値1, 値2, ...)
あいまい検索
前方一致や部分検索で条件を指定します。下記では、@mail.com
の手前はどんな文字列でもヒットします。
WHERE カラム名 LIKE '%@mail.com';
複数条件を満たす行を抽出する場合はAND
で指定します。
複数条件のいづれかと一致であればOR
で指定します。同一カラムのOR
指定はWHERE IN
と同じ意味になります。
ソート
抽出結果を指定したカラム名でソートします。
ORDER BY カラム名 ASC|DESC
- ASC - 昇順
- DESC - 降順
レコード数の取得
全レコード数を取得
SELECT COUNT(*) FROM テーブル名;
カラムの値がNULLでないレコード数を取得
SELECT COUNT(カラム名) FROM テーブル名;
結果は扱いやすいよう別名を付けます。下記ではRECORD_COUNT
として結果を取得できます。
SELECT COUNT(*) AS RECORD_COUNT FROM テーブル名;
行を追加する
INSERT INTO テーブル名 (カラム名[, カラム名2...]) VALUES (値[, 値...]);
一度に複数行追加する場合
INSERT INTO テーブル名 (カラム名[, カラム名2...])
VALUES (値[, 値...]), (値[, 値...]), (値[, 値...]);
削除
行を削除する
DELETE FROM テーブル名 WHERE 条件;
全データを削除する
TRUNCATE TABLE テーブル名;
データを更新する
UPDATE文
で更新したいカラムと値を指定します。
UPDATE テーブル名 SET カラム名 = 値[, カラム名2 = 値...] WHERE 条件;
-- sample
UPDATE samplemeta SET meta_key = 'a_index' WHERE meta_key = 'd_index';
データを変えずに日時を更新したい場合
テーブル定義にて、カラム名 DATETIME default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
としても、更新前と更新後でデータが同じ場合は日時が更新されません。
データは変わらないけど、日時だけは更新したい場合は、次のようにします。
UPDATE テーブル名 SET カラム名=CURRENT_TIMESTAMP WHERE 条件;
別のテーブルからデータを抽出して追加する
INSERT文
で値の部分にSELECT文
を記述します。固定値を入れたい場合は、抽出カラムではなく値を記述します。
tableAからデータを抽出して、tableBに追加する例
下記ではno
は全て固定値1
が入ります。
INSERT INTO tableB(
product_id,
no,
product_name
)
SELECT
product_id,
'1',
name
FROM tableA;