WEB

SQL スーパー早見表【用例付き】

WEB
この記事は約13分で読めます。

この記事では、SQLの構文句と用例を列挙します。

基本構文

データベース操作

CREATE DATABASE

新しいデータベースを作成する。

CREATE DATABASE my_database;

DROP DATABASE

データベースを削除する。

DROP DATABASE my_database;

テーブル操作

CREATE TABLE

新しいテーブルを作成する。

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    customer_name VARCHAR(255),
    email VARCHAR(255)
);

DROP TABLE

テーブルを削除する。

DROP TABLE customers;

ALTER TABLE ADD COLUMN

テーブルに新しい列を追加する。

ALTER TABLE customers
ADD COLUMN phone_number VARCHAR(20);

SELECT FROM

テーブルから特定の列を選択して表示する。

SELECT customer_name, email
FROM customers;

SELECT FROM WHERE

条件に合致するデータを選択して表示する。

SELECT *
FROM customers
WHERE email = 'example@email.com';

算術演算子

基本的な算術演算子

加算(+)

データの値を足したものを作って、表示します。
下記は従業員の給与(salary)とボーナス(bonus)を合計して、総収入(total_income)の計算です。

SELECT salary, bonus, salary + bonus AS total_income FROM employees;

減算 (ー)

データの値を引いたものを作って、表示します。
下記は商品の価格(product_price)から割引額(discount)を引いて、割引後の価格(discounted_price)を求めたものです。

SELECT product_price, discount, product_price - discount AS discounted_price FROM products;

乗算 (*)

データの値を掛けたものを作って、表示します。
下記では、注文された商品の数量(quantity)と単価(unit_price)を掛け合わせて、合計金額(total_price)を計算しています。

SELECT quantity, unit_price, quantity * unit_price AS total_price FROM order_details;

除算 ( / )

データの値を割ったものを作って、表示します。
この例では、旅行の総距離(total_distance)を総時間(total_time)で割って、平均速度(average_speed)を求めています。

SELECT total_distance, total_time, total_distance / total_time AS average_speed FROM trips;

等しい (=)

データの値が指定された値と等しい場合に真となる条件を作ります。

例えば、特定の従業員の情報を取得する場合、次のようにします。
ここでは、従業員ID(employee_id)が5と等しい従業員の情報を取得しています。

SELECT * FROM employees WHERE employee_id = 5;

等しくない (<>または!=)

データの値が指定された値と異なる場合に真となる条件を作ります。例えば、特定のカテゴリ以外の商品を取得する場合、次のようにします。このクエリでは、カテゴリID(category_id)が3ではない商品を取得しています。

SELECT * FROM products WHERE category_id <> 3;

以上 (>=)

データの値が指定された値以上である場合に真となる条件を作ります。例えば、特定の金額以上の注文を取得する場合、次のようにします。このクエリでは、合計金額(total_amount)が500以上の注文を取得しています。

SELECT * FROM orders WHERE total_amount >= 500; 

より大きい (>)

データの値が指定された値より大きい場合に真となる条件を作ります。例えば、特定の年齢以上の従業員を取得する場合、次のようにします。このクエリでは、年齢(age)が30より大きい従業員を取得しています。

SELECT * FROM employees WHERE age > 30;

以下 (<=)

データの値が指定された値以下である場合に真となる条件を作ります。例えば、特定の価格以下の商品を取得する場合、次のようにします。このクエリでは、価格(price)が100以下の商品を取得しています。

SELECT * FROM products WHERE price <= 100;

より小さい (<)

データの値が指定された値より小さい場合に真となる条件を作ります。例えば、特定の期限以前の注文を取得する場合、次のようにします。このクエリでは、注文日(order_date)が2024年1月1日より前の注文を取得しています。

SELECT * FROM orders WHERE order_date < '2024-01-01';

NOT

指定された条件と反対の条件を作ります。例えば、特定のカテゴリに属さない商品を取得する場合、次のようにします。このクエリでは、カテゴリID(category_id)が2でない商品を取得しています。

SELECT * FROM products WHERE NOT category_id = 2; 

AND

2つ以上の条件がすべて真である場合に真となる条件を作ります。例えば、特定の価格帯の商品を取得する場合、次のようにします。

SELECT * FROM products WHERE price >= 50 AND price <= 150;

比較演算子

等しい (=)

データの値が指定された値と等しい場合に真となります。
下記は、商品テーブルから価格が1000円の商品を選択するSQL文です。

SELECT * FROM products WHERE price = 1000;

等しくない (<>)

データの値が指定された値と等しくない場合に真となります。
下記は、会員テーブルから会員ランクがプレミアムでない会員を選択する SQL 文です。

SELECT * FROM members WHERE NOT rank = 'プレミアム';

以上 (>=)

データの値が指定された値以上の場合に真となります。
下記は、在庫テーブルから数量が10以上の商品を選択する SQL 文です。

SELECT * FROM inventory WHERE quantity >= 10;

より大きい (>)

データの値が指定された値より大きい場合に真となります。
下記は、売上テーブルから売上が10000円を超える注文を選択する SQL 文です。

SELECT * FROM sales WHERE revenue > 10000;

以下 (<=)

データの値が指定された値以下の場合に真となります。
下記は、年齢テーブルから30歳以下の人を選択する SQL 文です。

SELECT * FROM age WHERE age <= 30;

より小さい (<)

データの値が指定された値より小さい場合に真となります。
下記は、スコアテーブルから60点未満の生徒を選択する SQL 文です。

SELECT * FROM scores WHERE score < 60;

論理演算子

NOT

指定された条件と反対の条件を作ります。
下記は、商品テーブルから在庫がない商品以外を選択する SQL 文です。

SELECT * FROM products WHERE NOT stock = 0;

AND

2つ以上の条件がすべて真である場合に真となります。
下記は、注文テーブルから価格が1000円以上かつ数量が3以上の注文を選択する SQL 文です。

SELECT * FROM orders WHERE price >= 1000 AND quantity >= 3;

OR

いずれかの条件が真である場合に真となります。
下記は、ユーザーテーブルから管理者かVIPユーザーを選択する SQL 文です。

SELECT * FROM users WHERE role = 'admin' OR role = 'vip';

集約文

SELECT COUNT

レコードの数をカウントします。
下記は、商品テーブルの商品数を取得する SQL 文です。

SELECT COUNT(*) FROM products;

SELECT SUM

数値列の合計を計算します。
下記は、売上テーブルの売上金額の総額を取得する SQL 文です。

SELECT SUM(revenue) FROM sales;

SELECT AVG

数値列の平均を計算します。
下記は、スコアテーブルの生徒の平均点を取得する SQL 文です。

SELECT AVG(score) FROM scores;

SELECT MAX

数値列の最大値を求めます。
下記は、在庫テーブルの商品の最大在庫数を取得する SQL 文です。

SELECT MAX(stock) FROM inventory;

SELECT MIN

数値列の最小値を求めます。
下記は、価格テーブルの商品の最低価格を取得する SQL 文です。

SELECT MIN(price) FROM prices;

GROUP BY

指定した列でグループ化し、集約します。
下記は、カテゴリごとに商品数を取得する SQL 文です。

SELECT category, COUNT(*) FROM products GROUP BY category;

GROUP BY HAVING

条件に合致する集約値を表示します。
下記は、売上が一定額以上のカテゴリを取得する SQL 文です。

SELECT category, SUM(revenue) FROM sales GROUP BY category HAVING SUM(revenue) > 10000;

ORDER BY

指定した列で結果を並べ替えます。
下記は、商品テーブルを価格が高い順に取得する SQL 文です。

SELECT * FROM products ORDER BY price DESC;

データ更新

INSERT INTO

テーブルにデータを登録します。
下記は、新しい商品を商品テーブルに追加する SQL 文です。

INSERT INTO products (name, price) VALUES ('新商品', 500);

DELETE FROM

特定のテーブルのデータを削除します。
下記は、在庫がない商品を商品テーブルから削除する SQL 文です。

DELETE FROM products WHERE stock = 0;

UPDATE SET

特定のテーブルのデータを更新します。
下記は、商品テーブルの価格を更新する SQL 文です。

UPDATE products SET price = 600 WHERE name = '新商品';

WINDOW関数

SUM()

指定した列の合計を計算します。オーバーパーティションまたはオーダー バイ節で集計の範囲を指定できます。下記は、部門ごとの売上合計を計算する SQL 文です。

SELECT department, sales, SUM(sales) OVER (PARTITION BY department) as department_total FROM sales_data;

AVG()

指定した列の平均値を計算します。オーバーパーティションまたはオーダー バイ節で集計の範囲を指定できます。下記は、カテゴリごとの商品価格の平均を計算する SQL 文です。

SELECT category, price, AVG(price) OVER (PARTITION BY category) as avg_price FROM products;

MIN() / MAX()

指定した列の最小値(MIN())または最大値(MAX())を計算します。オーバーパーティションまたはオーダー バイ節で集計の範囲を指定できます。下記は、カテゴリごとの在庫の最小値と最大値を計算する SQL 文です。

SELECT category, stock, MIN(stock) OVER (PARTITION BY category) as min_stock, MAX(stock) OVER (PARTITION BY category) as max_stock FROM inventory;

FIRST_VALUE() / LAST_VALUE()

FIRST_VALUE() は指定した列の最初の値、LAST_VALUE() は最後の値を取得します。オーバーパーティションまたはオーダー バイ節で集計の範囲を指定できます。

下記は、カテゴリごとの最初の注文日と最後の注文日を取得する SQL 文です。

SELECT category, order_date, FIRST_VALUE(order_date) OVER (PARTITION BY category ORDER BY order_date) as first_order_date, LAST_VALUE(order_date) OVER (PARTITION BY category ORDER BY order_date) as last_order_date FROM orders;

COUNT()

COUNT()は行の数を計算します。オーバーパーティションまたはオーダーバイ節で集計の範囲を指定でき、各グループの行数を計算することができます。

下記は、カテゴリごとの商品数を計算する SQL 文です。

SELECT category, COUNT(*) OVER (PARTITION BY category) as category_count FROM products;

ROW_NUMBER()

ROW_NUMBER()はソートして順位を付けます。同じ値の場合も順位が重複しません。

下記は、商品を価格で昇順にソートし、各商品に順位を割り当てる SQL 文です。

SELECT product_name, price, ROW_NUMBER() OVER (ORDER BY price) as price_rank FROM products;

RANK()

ソートして順位を付けます。同じ値の場合に重複があり、値は重複分飛びます。

下記は、商品を価格で昇順にソートし、各商品に順位を割り当てる SQL 文です。

SELECT product_name, price, RANK() OVER (ORDER BY price) as price_rank FROM products;

DENSE_RANK()

ソートして順位を付けます。同じ値の場合に重複があり、値は飛びません。

下記は、商品を価格で昇順にソートし、各商品に順位を割り当てる SQL 文です。

SELECT product_name, price, DENSE_RANK() OVER (ORDER BY price) as price_rank FROM products;

NTILE()

レコードを等分割した値を付与します。たとえば、NTILE(4)は四分位数を表します。

下記は、商品を価格で昇順にソートし、価格を四分位数に分割する SQL 文です。

SELECT product_name, price, NTILE(4) OVER (ORDER BY price) as price_quartile FROM products;

LAG()

前の行の値を取得します。

下記は、商品を価格で昇順にソートし、各商品の前の価格を表示する SQL 文です。

SELECT product_name, price, LAG(price) OVER (ORDER BY price) as previous_price FROM products;

LEAD()

次の行の値を取得します。

下記は、商品を価格で昇順にソートし、各商品の次の価格を表示する SQL 文です。

SELECT product_name, price, LEAD(price) OVER (ORDER BY price) as next_price FROM products;