SQLはデータベースを操作するための言語です。
SQLを使うことでデータベースにデータを挿入したり、検索したりといった操作を効率的に行うことが可能です。
本記事ではSQLの基礎構文、用途、サンプルコードをまとめていきます。
なお、説明の便宜上、以下の表のデータを使用します。
【初心者用】SQLの書き方・用途などまとめ
1. 基礎構文①SELECT文
SELECT文はデータベースからデータを取り出すための構文です。
基本構造は以下のようになります。
「SELECT 列名 FROM テーブル名」
列名を複数指定する場合は列名を「,」で区切ります。また、全選択する場合は列名の箇所に「*」を記述します。
全ての列のデータを取得するときのサンプルコードは以下のようになります。
基本構造は以下のようになります。
「SELECT 列名 FROM テーブル名」
https://www.sejuku.net/blog/104588
列名を複数指定する場合は列名を「,」で区切ります。また、全選択する場合は列名の箇所に「*」を記述します。
全ての列のデータを取得するときのサンプルコードは以下のようになります。
SELECT * FROM user_list;
1-1. 条件の絞り込みは「WHERE句」を用いる
WHERE句は「FROM テーブル名」の後に付け加えることで、指定した列名のデータからさらに条件に見合ったデータを抽出できます。
書き方は「WHERE 列名 条件式 値」となります。
年齢が23歳以上のユーザーのIDと名前を取得するときはこのようになります。
書き方は「WHERE 列名 条件式 値」となります。
年齢が23歳以上のユーザーのIDと名前を取得するときはこのようになります。
SELECT id, name FROM user_list WHERE age >= 23;
10. まとめ
SQLの基礎構造や用途をまとめてみました。
SQLは他のプログラミング言語と比べ、そこまで難しいものではないといわれているので、基本的な記述ルールを覚えたら、あとは数をこなすことで習得に繋がると思います。
2. 基礎構文②INSERT文
INSERT文はデータベースにデータを登録するための構文です。
基本構造は以下のようになります。
「INSERT INTO テーブル名({列名1},{列名2},・・・)VALUES ({値1},{値2},・・・)」
列名の部分は省略可能です。
列名の数と値の数が一致していない場合エラーとなるので注意です。
列名をすべて指定した場合のINSERT文のサンプルコードは以下のようになります。
基本構造は以下のようになります。
「INSERT INTO テーブル名({列名1},{列名2},・・・)VALUES ({値1},{値2},・・・)」
https://www.sejuku.net/blog/104588
列名の部分は省略可能です。
列名の数と値の数が一致していない場合エラーとなるので注意です。
列名をすべて指定した場合のINSERT文のサンプルコードは以下のようになります。
INSERT INTO user_list(id, name, age, created_at, updated_at)
VALUES (6, '太郎', 20, '2023/12/4', '2023/12/4');
3. 基礎構文③UPDATE文
UPDATE文はデータベースの情報を更新するための構文です。
基本構造は以下のようになります。
「UPDATE テーブル名 SET {列名1}={列名1の値},{列名2}={列名2の値} WHERE {条件}」
WHERE句は省略可能です。
その場合全ての行が更新対象となるので注意です。
IDが5のユーザー情報を更新するときのサンプルコードは以下のようになります。
基本構造は以下のようになります。
「UPDATE テーブル名 SET {列名1}={列名1の値},{列名2}={列名2の値} WHERE {条件}」
https://www.sejuku.net/blog/104588
WHERE句は省略可能です。
その場合全ての行が更新対象となるので注意です。
IDが5のユーザー情報を更新するときのサンプルコードは以下のようになります。
UPDATE user_list SET name = '伍郎' , age = 29 WHERE id = 5;
4. 基礎構文④DELETE文
DELETE文はデータベースのデータを削除するための構文です。
基本構造は以下のようになります。
「DELETE FROM テーブル名 WHERE {条件}」
UPDATE文同様にWHERE句は省略可能です。
その場合全ての行が削除対象となるので注意です。
IDが5の行のデータを削除するときのサンプルコードは以下のようになります。
基本構造は以下のようになります。
「DELETE FROM テーブル名 WHERE {条件}」
https://www.sejuku.net/blog/104588
UPDATE文同様にWHERE句は省略可能です。
その場合全ての行が削除対象となるので注意です。
IDが5の行のデータを削除するときのサンプルコードは以下のようになります。
DELETE FROM user_list WHERE id = 5;
5. 基礎構文⑤AS句
AS句を使用すると、テーブル名や列名に別の名前を指定できます。
まずは以下のサンプルコードを見てください。
users_listの列名は「id」や「name」ですが、AS句を使用することで「ID」や「名前」というようにテーブルに存在しない名前で結果を取得できます。
AS句は複数のテーブルを一気に取得する場合、同名の行名などを区別するために使用します。
まずは以下のサンプルコードを見てください。
SELECT id AS ID, name AS 名前 FROM user_list WHERE age >= 23;
users_listの列名は「id」や「name」ですが、AS句を使用することで「ID」や「名前」というようにテーブルに存在しない名前で結果を取得できます。
AS句は複数のテーブルを一気に取得する場合、同名の行名などを区別するために使用します。
6. 基礎構文⑥ORDER BY句
ORDER BYを使用すると、SELECTの結果の並び替えが可能です。
ORDER BY句は複数の並べ替え条件を指定できます。
ORDER BY句を指定しない場合、SELECT結果が不定となります。複数の結果を取得する可能性がある場合は、ORDER BYを指定する習慣をつけておきましょう。
データを昇順で抽出するときは「ASC」、降順で抽出するときは「DESC」を使います。
SELECT結果をID昇順の並びで取得するときのサンプルコードは以下のようになります。
ORDER BY句は複数の並べ替え条件を指定できます。
ORDER BY句を指定しない場合、SELECT結果が不定となります。複数の結果を取得する可能性がある場合は、ORDER BYを指定する習慣をつけておきましょう。
データを昇順で抽出するときは「ASC」、降順で抽出するときは「DESC」を使います。
SELECT結果をID昇順の並びで取得するときのサンプルコードは以下のようになります。
SELECT id, name FROM user_list ORDER BY id ASC;
7. 基礎構文⑦GROUP BY句
GROUP BY句は、データをグループ化することができます。
ひとまとめにしたいデータがある場合などに有効です。
例えば、以下のようなデータを持つテーブルがあるとします。
このデータから「日付ごとに使った金額の合計」を知りたいとしましょう。
そのような場合、以下のようなサンプルコードで集計することが可能です。
上記の記述により、以下のような結果が表示されます。
このように、ちりばめられたデータを共通の要素に従ってグループ化する際に使用します。
ひとまとめにしたいデータがある場合などに有効です。
例えば、以下のようなデータを持つテーブルがあるとします。
このデータから「日付ごとに使った金額の合計」を知りたいとしましょう。
そのような場合、以下のようなサンプルコードで集計することが可能です。
SELECT SUM(price),date FROM cost_list GROUP BY date;
上記の記述により、以下のような結果が表示されます。
このように、ちりばめられたデータを共通の要素に従ってグループ化する際に使用します。
8. DDLとDML
本記事で紹介したSQL文はDML(Data Manipulation Languageの略)で、データを操作するSQL文です。
対するDDLは、Data Definition Languageの略でデータを定義するSQL文です。
こちらの記事では紹介していないのでご注意ください。
なお、DDLは以下のようなものがあります。
・CREATE文:データベース・テーブルなどを作成する
・ALTER文:テーブル内の定義を変更する
・DROP文:データベース・テーブルを削除する
9. エラーが出た際の対処法
SQL文でエラーが表示された場合、「エラーコード」を確認すればエラーの原因がわかります。
エラーコードはかなりの数に上り、全部を覚えるのは不可能です。
よくあるエラーは以下に記載します。
・『Error Code: 1064』
スペルミスです。
特に初心者のうちは、全角文字が入力されていないかに注意しましょう。
・『Error Code: 1046』
データベースを指定していないエラーです。
データベースの名前を「USE データベース名;」という形で指定する必要があります。