【SQL】これだけ覚えればOK!実務で活躍できるSQL文をご紹介
はい、hebiです。
SQLは、多くの企業が求める重要なスキルの1つです。SQLをマスターすることで、自身の市場価値を向上させ、IT業界で活躍できる機会を増やすことができます。
私が勤めている会社でも、開発業務以外に社内に集まったデータをSQLで抽出し分析する場面が多々あります。SQLはどの会社や業界でも必要なスキルだと改めて感じてます。
そこで、本記事では実際に実務でよく使うSQL文について記事にしたいと思います。
SQLとは
SQLについて詳しく教えてください!
うむ!
SQLはサーバー側で動作する言語なのじゃ。
データベースにあるテーブルからクエリ(SQL文)を実行してデータを取得したり追加、更新、削除を行うことができるのじゃ。
基本的な概念や用語を以下に説明するぞ。
- データベース: データの集合体を管理する仕組みであり、データベースは、一般的に複数のテーブルから成り立ち、それらの関係性を保持します。
- テーブル: データを表形式で格納するための構造です。テーブルは、行(レコード)と列(フィールドまたは属性)で構成されます。例えば、顧客情報を格納するための「Customers」というテーブルを保持します。
- クエリ: データベースから情報を取得するための命令です。クエリは、データをフィルタリング、ソート、集計するための条件や操作を含むことができます。例えば、「すべての顧客の名前とメールアドレスを取得する」というクエリを実行できます。
クエリにはどのような種類があるの?
業務でよく使うクエリを教えるのじゃ。
以下に説明するぞ。
- SELECT文: テーブルからデータを取得するために使用するSQLの基本的な文です。SELECT文を使用して、特定の列や行、または条件に基づいてデータを取得します。
- INSERT文: テーブルに新しいデータを挿入するために使用するSQL文です。INSERT文を使用して、新しい行をテーブルに追加できます。
- UPDATE文: テーブル内の既存のデータを更新するために使用するSQL文です。UPDATE文を使用して、既存の行の値を更新することができます。
- DELETE文: テーブルからデータを削除するために使用されるSQL文です。DELETE文を使用して、特定の行を削除できます。
DB内には以下のようなテーブルがあり、クエリでデータを取得したり、追加、更新、削除を行います。
なるほど。
テーブルはExcelの表みたいな感じで作られるんだな。
テーブル作成
テーブルはどうやって作るの?
テーブルはCREATE TABLE テーブル名で作成することができるのじゃ。
以下のように実行することでテーブルを作成できるぞ。
CREATE TABLE t_customers(
customer_id SERIAL, -- カラム名:customer_id、型:SERIAL
name VARCHAR(255) NOT NULL, -- カラム名:name、型:VARCHAR 最大255、必須項目
email VARCHAR(255) NOT NULL, -- カラム名:email 、型:VARCHAR 最大255、必須項目
phone VARCHAR(15), -- カラム名:phone 、型:VARCHAR 最大15
PRIMARY KEY(customer_id) -- customer_idを一意のキーとする(重複して登録できないようにする)
);
INSERT文
先にINSERT文から説明するぞ。データが無いとSELECT、UPDATE、DELETEを実行できないからの。
INSERT文はデータを追加するクエリです。
INSERT文には、1件追加する書き方と複数を一括で追加する書き方があります。
1件追加パターン
上記で作成したt_customersテーブルに対してデータを追加します。
INSERT
INTO t_customers(name, email, phone)
VALUES ('ぺんぎん', 'pen@xx.xx', 'xxxxxxxxxxx')
複数追加
1回のINSERT文で複数のレコードを追加するにはVALUESをカンマ区切りで指定して追加することができます。
INSERT
INTO public.t_customers(name, email, phone)
VALUES
('hebiじぃ', 'hebiji@xx.xx', 'xxxxxxxxxxx'),
('hebiばぁ', 'hebiba@xx.xx', 'xxxxxxxxxxx')
SELECT文
SELECT文について説明していくぞ。
SQL文で一番使うのがこのSELECT文なのでよく理解するのじゃぞ。
通常取得
レコードを取得する簡単な実行方法です。
SELECT
-- 取得したいカラム名を列挙します。
customer_id
, name
, email
, phone
FROM
-- 取得したいテーブル名を指定します。
t_customers
上記を実行するとt_customersテーブルの全てのレコードを取得できます。
件数取得
レコード数を取得したい場合にもSELECT文のCOUNTを利用します。
SELECT
// カウントを取得
COUNT(*)
FROM
t_customers
条件指定で取得
WHERE句を利用することで、条件付きのSELECT文を実行できます。
WHERE句はSELECT文に限らず、UPDATE文、DELETE文でも使用できます。
以下の例ではnameが’hebiじぃ’と一致するレコードを取得します。
SELECT
customer_id
, name
, email
, phone
FROM
t_customers
WHERE
-- nameが'hebiじぃ'と一致するレコードを取得する
name = 'hebiじぃ'
UPDATE文
テーブルのカラムの値を変更したい場合にはUPDATE文を使うぞ!
UPDATE t_customers
SET
phone = '08099999999'
, email = 'hebi@xx.xx'
WHERE
customer_id = 2
customer_idが2のレコードのemailとphoneが変わったことが分かります。
DELETE文
レコードを削除するときにはDELETE文を使うぞ!
DELETE
FROM
t_customers
WHERE
customer_id = 3
hebiばぁのレコードが削除されたことが分かります。
結合
INSERT文、SELECT文、UPDATE文、DELETE文はどうじゃったかの?
結構簡単だな!文法も覚えやすいし楽勝だぜ!
うむ。
次は、テーブル結合について説明していくぞ。
よろしくおねがいしやす!!
INNER JOIN(内部結合)
ぺんぎんさんの注文情報を取得したい場合、t_customerテーブルには注文情報を持っていないのでt_orderテーブルから取得する必要があります。
ペンギンさんのcustomer_id(一意のキー)とt_ordersのcustomer_idを紐づけることでテーブルを結合します。これをINNER JOIN(内部結合)と言います。
SELECT
c.customer_id
, c.name
, c.email
, c.phone
, o.total_price -- 合計金額
FROM
t_customers AS c
-- t_ordersを結合
INNER JOIN t_orders AS o ON o.customer_id = c.customer_id
- 「INNER JOIN t_orders」でt_ordersと結合します。
- 「AS c」や「AS o」のようにテーブル名に名前を付けることで
c.customer_idやo.total_priceのようにアクセスできるようになります。
実行すると以下のようにt_ordersテーブルのtotal_priceを表示することができました。
更にt_ordersにはない商品情報をt_order_itemテーブルと結合して取得してみましょう。
SELECT
c.customer_id
, c.name
, c.email
, c.phone
, o.total_price
, oi.product_name -- 商品名
FROM
t_customers AS c
INNER JOIN t_orders AS o ON o.customer_id = c.customer_id
-- t_order_itemを結合
INNER JOIN t_order_item AS oi ON o.order_id = oi.order_id
実行すると以下のようにt_order_itemテーブルのproduct_nameを表示することができました。
複雑なSQL文だとINNER JOINが10以上使用されることもあるのじゃ。
LEFT JOIN(左外部結合)
INNER JOINの場合は、結合条件を満たす行のみを保持して、2つのテーブル間で共通の行を結合します。結合条件が一致する行がない場合、その行は結果に含まれません。
INNER JOINの説明で示した例で言うと、ぺんぎんさんが未購入の場合、t_ordersテーブルにはデータが無いので、ぺんぎんさんのレコードは表示されません。
未購入の会員も取得したい場面が出てくると思いますが、ここでLEFT JOIN (左外部結合)を利用します。
LEFT JOINは左側のテーブルのすべての行を保持し、右側のテーブルとの結合条件を満たす行があれば結合します。結合条件を満たさない右側の行も含まれますが、その場合、右側のテーブルのカラムはNULLになります。
SELECT
c.customer_id
, c.name
, c.email
, c.phone
, o.total_price
, oi.product_name
FROM
t_customers AS c
LEFT JOIN t_orders AS o ON o.customer_id = c.customer_id
LEFT JOIN t_order_item AS oi ON o.order_id = oi.order_id
ぺんぎんさんのレコードが取得されます。
ただ、結合したテーブルのカラムは全てnullになります。
RIGHT JOIN(右外部結合)
LEFT JOINの逆向きで利用します。
機能としては同じなの割愛します。
結合を取り入れることでSQLの幅がグッと広がるのじゃよ。
ただし、SQLの使い方が分かったとしてもテーブル構成を把握していないと結合は難しいのじゃ。
これがSQLが難しく感じる要因の1つかもしれんの。
なるほどな。
でもクエリについて理解できたから、簡単なデータなら取得できそうだな!
そうじゃな。
では、次回はサーバからデータを取得して、ブラウザにそのデータの一覧を表示する方法を記事するとしようかのう。
最後に
SQL文はいかがだったでしょうか。
業務ではこの記事で紹介したSQL文で賄えると思います。
時にはめちゃくちゃ長いSQL文に悩まされることがありますが、そのようなSQLは作った本人も忘れてしまっているカオスなSQL文だと思いますw
次回はサーバで取得したデータを一覧として表示する記事を書きます。
最後までお読みいただきありがとうございました(^^♪