SQL文の基本について、サンプルコードを交えて解説しています。
SQL文の基本はSELECT、INSERT、UPDATE、DELETE
SQL文とはデータベースを操作するためのコードです。この記事では、データベースを操作する基本のSQL文、SELECT、INSERT、UPDATE、DELETEについて紹介します。
【関連記事】
▶SQL文一覧 基本4大ステートメントのサンプルコード集
select文は、データの抽出
select文は指定したテーブルから、条件を指定してデータを抽出するためのSQL文です。以下は、userテーブルからage(年齢)順にデータを抽出する例です。
SELECT * FROM user ORDER BY age; +------+--------------+------+ | id | name | age | +------+--------------+------+ | 2 | 山田花子 | 22 | | 5 | 鈴木三郎 | 22 | | 1 | 山田太郎 | 25 | | 3 | 佐藤一郎 | 33 | | 4 | 伊藤次郎 | 44 | +------+--------------+------+
【関連記事】
▶【初心者向け】SQLのデータ抽出処理!SELECT文の使い方を理解しよう!
select文は、対象テーブル、抽出するカラムに、where句で抽出条件を指定することが可能です。条件指定の記述方法はupdateやdeleteでも流用可能です。
以下は、employees(社員)テーブルから、first_name(姓名の名)=Georgi、last_name(姓名の姓)=Facelloのデータを10件抽出する例です。
select * from employees where first_name = 'Georgi' or last_name = 'Facello' limit 10; +--------+------------+------------+------------+--------+------------+ | emp_no | birth_date | first_name | last_name | gender | hire_date | +--------+------------+------------+------------+--------+------------+ | 10001 | 1953-09-02 | Georgi | Facello | M | 1986-06-26 | | 10327 | 1954-04-01 | Roded | Facello | M | 1987-09-18 | | 10909 | 1954-11-11 | Georgi | Atchley | M | 1985-04-21 | | 11029 | 1962-07-12 | Georgi | Itzfeldt | M | 1992-12-27 | | 11430 | 1957-01-23 | Georgi | Klassen | M | 1996-02-27 | | 12157 | 1960-03-30 | Georgi | Barinka | M | 1985-06-04 | | 12751 | 1964-07-06 | Nahum | Facello | M | 1995-01-09 | | 15220 | 1957-08-03 | Georgi | Panienski | F | 1995-07-23 | | 15346 | 1959-09-26 | Kirk | Facello | F | 1991-12-07 | | 15660 | 1956-01-13 | Georgi | Hartvigsen | M | 1994-10-13 | +--------+------------+------------+------------+--------+------------+ 10 rows in set (0.00 sec)
【関連記事】
▶SQLのwhere句で検索条件を指定 複数条件やあいまい検索、サブクエリ
insert文は、データの挿入
データベースに新規にデータを挿入するにはinsert文を使います。
以下は、kakeiboテーブルにhimokuをfood、dateを2020-08-26、moneyを13000の値を指定して挿入する例です。
INSERT INTO kakeibo (himoku, date, money) VALUES ('food', '2020-08-26', 13000); mydb=# SELECT * FROM kakeibo; himoku | date | money --------+------------+------- food | 2020-08-26 | 13000 (1 row)
【関連記事】
▶SQLのインサート(INSERT)でデータを簡単に追加するやり方まとめ
insert文とselect文を組み合わせ、別テーブルからselectした結果をinsertすることも可能です。
以下は、employees(社員テーブル)からemp_no(社員番号)=10001のデータを取得し、emp_noのみ3に置き換えたデータをemployeesテーブルに挿入する例です。
insert employees SELECT 3, `birth_date`, `first_name`, `last_name`, `gender`, `hire_date` FROM `employees` WHERE emp_no = 10001
【関連記事】
▶SQL insert selectの構文 リモートへの簡易レプリケーションや独自拡張
update文は、データの更新
update文はテーブルの特定の値を更新します。
以下のSQL文はup_tableテーブルのid=1のレコードのscoreの値を70に更新する例です。update文の前後でselect文を実行して、値が更新されたことを確認しています。
SELECT * FROM up_table; id | name | score ----+---------+------- 1 | Sasaki | 0 2 | Tanaka | 0 3 | Akaishi | 0 4 | Minami | 0 5 | Kimura | 0 (5 rows) UPDATE up_table SET score = 70 WHERE id = 1; SELECT * FROM up_table; id | name | score ----+---------+------- 2 | Tanaka | 0 3 | Akaishi | 0 4 | Minami | 0 5 | Kimura | 0 1 | Sasaki | 70 (5 rows)
【関連記事】
▶SQLでアップデートする方法|様々な条件付きでデータを更新するやり方も解説
update文では、複雑な更新条件を指定することも可能です。以下は、INNER JOINにより別テーブルと結合して条件指定をおこなった例です。
UPDATE sample_table_A SET sample_table_A.medical_checkup = 'DONE' FROM sample_table_A INNER JOIN sample_table_B ON sample_table_A.stuff_id = sample_table_B.stuff_id AND sample_table_B.checkup_date IS NOT NULL ; GO (3 行処理されました) SELECT * FROM sample_table_A; GO stuff_id name medical_checkup ----------- ------------------------------ --------------- 1 Alex YET 2 Jonathan DONE 3 Olivia YET 4 Mia DONE 5 George DONE
【関連記事】
【SQL】検索結果を基にした更新が行えるUPDATE JOIN句についてコードを踏まえて解説。
delete文は、データの削除
delete文は指定した条件でデータの削除をおこないます。
以下の例は、userテーブルから、ageの値が20未満のデータを削除する例です。
DELETE FROM users WHERE age < 20;
【関連記事】
▶SQL DELETEで、データベース・テーブルの行を削除する方法
高速にデータを削除するtruncateは、データ格納件数が多いテーブルを削除するのに便利です。deleteとの違いはtruncateは条件指定ができない点と、トランザクションログを生成しないためロールバックができない点です。
truncate table employees
【関連記事】
▶SQL truncate 高速データ削除 deleteやdropとの違いとDBMS間の差異
まとめ
- SQL文とはデータベースを操作するためのコード
- SQLの基本はSELECT、INSERT、UPDATE、DELETE
- SELECT文で指定した条件文はUPDATEやDELETE文に流用が可能