Skip to content

SQL 基本的な知識#

SQL(Structured Query Language)は、データベース管理システム(DBMS)とのインタラクションに使用される標準的なクエリ言語です。

以下に、データサイエンティスト検定で問われる可能性のある基本的なSQL知識をまとめました。

テーブルの作成とデータの挿入#

  • CREATE TABLE文を使用して、新しいテーブルを作成します。
  • INSERT INTO文を使用して、データを既存のテーブルに挿入します。
-- テーブルの作成
CREATE TABLE students (
  id INT,
  name VARCHAR(100),
  age INT
);

-- データの挿入
INSERT INTO students (id, name, age)
VALUES (1, 'John', 20),
       (2, 'Emily', 22),
       (3, 'Michael', 19);

データの選択とフィルタリング:#

SELECT文を使用して、テーブル内のデータを選択します。 WHERE句を使用して、条件に基づいてデータをフィルタリングします。

-- データの選択
SELECT * FROM students;

-- 条件に基づいてデータをフィルタリング
SELECT * FROM students WHERE age > 20;

データの並べ替え:#

ORDER BY文を使用してしたデータを特定の列で昇順または降順に並べ替えます。

-- データを特定の列で昇順に並べ替え
SELECT * FROM students ORDER BY age ASC;

-- データを特定の列で降順に並べ替え
SELECT * FROM students ORDER BY name DESC;

データの集計:#

GROUP BY文を使用して、特定の列でデータをグループ化します。 聚集関数(SUM、AVG、COUNT、MAX、MINなど)を使用して、グループ内のデータを集計します。

-- 特定の列でデータをグループ化して合計を計算
SELECT age, SUM(score) FROM students GROUP BY age;

-- グループ内のデータの数をカウント
SELECT age, COUNT(*) FROM students GROUP BY age;

テーブルの結合:#

  • JOIN句を使用して、2つ以上のテーブルを特定の列を使用して結合します。
  • INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOINなどの結合方法を選択します。
-- 2つのテーブルを結合してデータを選択
SELECT students.name, scores.score
FROM students
INNER JOIN scores ON students.id = scores.student_id;

データの更新と削除:#

  • UPDATE文を使用して、既存のデータを更新します。
  • DELETE文を使用して、テーブル内のデータを削除します。
-- 既存のデータを更新
UPDATE students SET age = 21 WHERE id = 1;

-- テーブル内のデータを削除
DELETE FROM students WHERE id = 3;

データの集計とグループ化:#

HAVING句を使用して、GROUP BY文でグループ化されたデータに対して条件を適用します。

-- HAVING句を使用して条件を適用
SELECT age, COUNT(*) FROM students GROUP BY age HAVING COUNT(*) > 1;

UNION 句#

UNION句は、SQLで使用されるクエリ演算子の一つであり、2つのSELECT文の結果を結合して単一の結果セットとして返すために使用されます。UNION句は次のような特徴を持ちます:

  • UNION句を使用するためには、結合するSELECT文の列数とデータ型が一致している必要があります。
  • 重複する行は自動的に削除されます。重複行を保持したい場合は、UNION ALLを使用します。

列名は最初のSELECT文の列名に基づいて結果セットに表示されます。 以下に、UNION句の基本的な構文と使用例を示します。

基本構文:

SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;

例文:

SELECT name, age, city
FROM customers
WHERE age > 30
UNION
SELECT name, age, city
FROM employees
WHERE age > 30;
上記の例では、customersテーブルとemployeesテーブルから、ageが30よりも大きい顧客と従業員の情報を取得しています。 UNION句により、2つのSELECT文の結果が結合されて単一の結果セットとして返されます。

サブクエリ:#

サブクエリ(Subquery)は、SQL文内に組み込まれた別のクエリです。サブクエリは、外部のクエリの一部として使用され、結果を取得したり、条件として使用したりするために利用されます。

サブクエリは、主に次の2つの方法で使用されます:

  1. SELECT文内のサブクエリ:

サブクエリは、SELECT文内のカラムや条件の一部として使用されます。 サブクエリの結果は、外部のクエリによって利用されます。

SELECT column1, column2, ...
FROM table1
WHERE column3 IN (SELECT column4 FROM table2 WHERE condition);

上記の例では、外部のクエリはtable1から特定の条件に一致する行を選択していますが、その条件はサブクエリ(table2内の特定の条件)に基づいています。

  1. FROM句内のサブクエリ:

サブクエリは、FROM句内でテーブルとして使用されます。その結果は一時的なテーブルとして扱われます。 外部のクエリは、サブクエリの結果に対して通常のテーブルと同じようにクエリを実行します。

SELECT column1, column2, ...
FROM (SELECT column3 FROM table1 WHERE condition) AS temp_table;

上記の例では、外部のクエリはサブクエリの結果をtemp_tableという一時テーブルとして使用しています。

その後、temp_tableから必要なカラムを選択しています。

サブクエリを使用することで、より複雑な条件やクエリの組み合わせを実現することができます。また、サブクエリはネスト(入れ子)することもできます。 つまり、サブクエリ内にさらに別のサブクエリを含めることができます。

ただし、サブクエリを使う際には、パフォーマンスや実行時間に注意する必要があります。ネストが深くなりすぎたり、 大量のデータを処理する場合には、クエリの最適化やインデックスの使用など、効率的なデータベース設計が重要になります。

サブクエリはSQLの強力な機能の一つであり、データサイエンティストとしてSQLを使う際に重要なスキルとなります。