0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

誰でも解る!SQLの基礎

Last updated at Posted at 2024-11-22

はじめに

HI Engineer Collegeでは、実務未経験のエンジニアの方や、エンジニアに興味がある方を募集したおります、まずはお気軽にお問い合わせください。

※ (株)G&T(【内々定まで最短2週間】ゼロからしっかりじっくり研修☆20代活躍中!)

※ HI Engineer Collegeに興味あがある方はこちら(プログラミングを学習したい方)


エンジニア向けチャットルーム「TechTalk」参加者募集中!

プログラミングやITの話題を気軽に共有し、学び合えるエンジニアのためのチャットルーム「TechTalk」では、新たな参加者を募集中です!

こんな方にオススメです

  • 最新技術の動向やトレンドを追いかけたい
  • 日々の開発で生じる疑問を他のエンジニアに相談したい
  • コードレビューの方法やデバッグのコツを知りたい
  • 他のエンジニアと共に成長できる場を探している

チャットルームで扱う主なトピック

  • プログラミング: JavaScript、Python、Javaなど、言語やフレームワークについて
  • 開発ツール: Git、Docker、CI/CD の自動化など
  • キャリア: 転職やキャリアパス、業界動向
  • AI/機械学習: モデルの開発やトレンド
  • Webセキュリティ: セキュリティ対策や最新の脅威情報

チャットルームの特徴

  • 他のエンジニアからリアルタイムでフィードバックがもらえます
  • 勉強会やハンズオンセッションも定期開催
  • 初心者から上級者まで、幅広いレベルのエンジニアが在籍
  • リモートワーク時のちょっとした相談や雑談も大歓迎

参加方法
下記リンクから「TechTalk」へぜひご参加ください。


テーブルの作成: CREATE TABLE

CREATE TABLE 構文を使って、新しいテーブルをデータベースに作ります。

例:

CREATE TABLE TBL_EMPLOYEES (
  EMP_CODE INT PRIMARY KEY,
  EMP_NAME VARCHAR(50) NOT NULL,
  KANA VARCHAR(50),
  SEX CHAR(1),
  BIRTHDAY DATE
);

解説:

  • CREATE TABLE:新しいテーブルを作る命令です。
  • TBL_EMPLOYEES:テーブルの名前です。
  • カッコの中には、テーブルの中の各カラム(列)を定義します。
    • EMP_CODE INT PRIMARY KEY:従業員番号です。整数型で、重複を許さない主キーにします。
    • EMP_NAME VARCHAR(50) NOT NULL:従業員の名前を表します。最大50文字で、空欄は許されません。
    • KANA VARCHAR(50):従業員名のフリガナです。最大50文字まで使えます。
    • SEX CHAR(1):性別です。1文字の値で (MF) を格納します。
    • BIRTHDAY DATE:従業員の誕生日を表します。

データの挿入: INSERT INTO

テーブルにデータを入れるには、INSERT INTO を使います。

例: 複数行まとめてデータを入れる場合

INSERT INTO TBL_EMPLOYEES (EMP_CODE, EMP_NAME, KANA, SEX, BIRTHDAY) VALUES
(1, '田中 太郎', 'タナカ タロウ', 'M', '1985-04-01'),
(2, '佐藤 花子', 'サトウ ハナコ', 'F', '1988-10-15'),
(3, '鈴木 一郎', 'スズキ イチロウ', 'M', '1992-06-20');

例: 1行ずつデータを入れる場合

INSERT INTO TBL_EMPLOYEES (EMP_CODE, EMP_NAME, KANA, SEX, BIRTHDAY)
VALUES (4, '高橋 真理', 'タカハシ マリ', 'F', '1990-01-05');

解説:

  • INSERT INTO:テーブルにデータを追加します。
  • (EMP_CODE, EMP_NAME, KANA, SEX, BIRTHDAY):追加するカラムの名前を指定します。
  • VALUES:それぞれのカラムに入れる値を指定します。
    • 例えば (1, '田中 太郎', 'タナカ タロウ', 'M', '1985-04-01') は、各カラムに対応するデータです。

データの取得: SELECT

テーブルからデータを取り出すには、SELECT を使います。

例:

SELECT * FROM TBL_EMPLOYEES;
  • * は全てのカラムを意味します。

特定のカラムを取り出す例:

SELECT EMP_NAME, BIRTHDAY FROM TBL_EMPLOYEES;
  • EMP_NAMEBIRTHDAY だけを取り出します。

SELECT はデータベースから情報を引き出すための基本的な命令です。必要なカラムを指定すると、効率的にデータを取り出すことができます。

データの更新: UPDATE

既存のデータを変更するには、UPDATE を使います。

例:

UPDATE TBL_EMPLOYEES
SET EMP_NAME = '田中 次郎'
WHERE EMP_CODE = 1;
  • SET で変更するカラムと新しい値を指定します。
  • WHERE 句で、どの行を更新するかを指定します。

UPDATE を使うとデータを変更できます。WHERE 句を使わないと、すべての行が更新されるので注意が必要です。

データの削除: DELETE

データを削除するには、DELETE を使います。

例:

DELETE FROM TBL_EMPLOYEES
WHERE EMP_CODE = 2;
  • WHERE 句を使わないと、全てのデータが削除されるので注意が必要です。

DELETE はテーブルから不要なデータを消すために使います。WHERE 句を忘れると全てのデータが消えてしまうので気をつけましょう。

条件指定: WHERE

WHERE 句を使って、特定の条件に合ったデータを取り出します。

例:

SELECT * FROM TBL_EMPLOYEES
WHERE SEX = 'F';
  • SEX'F' の従業員だけを取り出します。

WHERE 句を使うと、大量のデータの中から必要な情報だけを取り出すことができます。ANDOR を使って、条件を複雑にすることもできます。

テーブルの結合: JOIN

複数のテーブルを結合してデータを取り出すには、JOIN を使います。

例:

SELECT A.EMP_CODE, A.EMP_NAME, B.DEP_NAME
FROM TBL_EMPLOYEES A
JOIN TBL_DEPARTMENTS B ON A.EMP_CODE = B.EMP_CODE;

-- テーブルの作成: `TBL_DEPARTMENTS`
```sql
CREATE TABLE TBL_DEPARTMENTS (
  DEP_CODE INT PRIMARY KEY,
  DEP_NAME VARCHAR(50) NOT NULL
);

-- データの挿入: TBL_DEPARTMENTS

INSERT INTO TBL_DEPARTMENTS (DEP_CODE, DEP_NAME) VALUES
(1, '人事部'),
(2, '営業部'),
(3, '開発部');
  • JOIN を使って TBL_EMPLOYEESTBL_DEPARTMENTS を結びつけます。

JOIN は、異なるテーブルから関連する情報をまとめて取り出すのに便利です。例えば、従業員とその所属部署の情報を結びつけて、一緒に取り出すことができます。

グループ化: GROUP BY

データを特定のカラムでまとめて、集計するために GROUP BY を使います。

例:

SELECT SEX, COUNT(*)
FROM TBL_EMPLOYEES
GROUP BY SEX;
  • SEX 別に従業員の人数を数えます。

GROUP BY は、データをグループごとに分けて、そのグループごとに集計をする時に使います。例えば、性別ごとの人数や、部署ごとの平均給与を計算する時などに便利です。

サブクエリ

サブクエリは、クエリの中に入っている別のクエリです。サブクエリは、主に複雑なデータを取得したり、特定の条件に基づいたデータの抽出を行う際に非常に便利です。例えば、特定のテーブル内で最大値や最小値を持つ行を取り出す場合や、別のテーブルから条件を持ってくる場合などに使われます。

例:

SELECT EMP_NAME
FROM TBL_EMPLOYEES
WHERE EMP_CODE = (SELECT MAX(EMP_CODE) FROM TBL_EMPLOYEES);
  • EMP_CODE が一番大きい従業員名を取り出します。

この例では、TBL_EMPLOYEES テーブルから EMP_CODE が最大の従業員名を取得します。サブクエリ (SELECT MAX(EMP_CODE) FROM TBL_EMPLOYEES) がまず実行され、その結果を使って外側のクエリが実行されます。

サブクエリを使うと、他のクエリの結果を利用してデータを取得することができます。例えば、最も新しい従業員の情報を取り出すときに役立ちます。また、サブクエリは WHERE 句、FROM 句、さらには SELECT 句の中でも使用できるため、データの絞り込みや集計の際に非常に強力なツールとなります。複数のサブクエリを組み合わせることで、より複雑なデータ操作も可能になります。

条件分岐: CASE

CASE 式を使うと、条件に基づいて異なる値を返すことができます。

例:

SELECT EMP_NAME,
  CASE WHEN SEX = 'M' THEN '男性'
       WHEN SEX = 'F' THEN '女性'
       ELSE '不明'
  END AS 性別
FROM TBL_EMPLOYEES;
  • SEX の値に応じて '男性' または '女性' を表示します。

CASE 式は、いくつかの条件を調べて、どれに当てはまるかで結果を変えたいときに使います。例えば、性別や点数によって違うランクを付けたい時などに便利です。

集計関数 (COUNT, SUM, AVG, MAX, MIN)

SQLにはデータをまとめるための関数があります。

  • COUNT:レコードの数を数えます。
    • 例: 従業員の人数を数える。
    SELECT COUNT(*) AS 従業員数 FROM TBL_EMPLOYEES;
    
  • SUM:数値の合計を計算します。
    • 例: 給料の合計を計算する(SALARY カラムがあると仮定)。
    SELECT SUM(SALARY) AS 合計給与 FROM TBL_EMPLOYEES;
    
  • AVG:数値の平均を計算します。
    • 例: 平均年齢を計算する。
    SELECT AVG(YEAR(CURDATE()) - YEAR(BIRTHDAY)) AS 平均年齢 FROM TBL_EMPLOYEES;
    
  • MAX:最大値を取得します。
    • 例: 最も年上の人の誕生日を取得する。
    SELECT MAX(BIRTHDAY) AS 最年長の誕生日 FROM TBL_EMPLOYEES;
    
  • MIN:最小値を取得します。
    • 例: 最も若い人の誕生日を取得する。
    SELECT MIN(BIRTHDAY) AS 最年少の誕生日 FROM TBL_EMPLOYEES;
    

集計関数を使うと、データ全体の傾向を知ることができます。GROUP BY でグループごとに集計することもできます。

まとめ

この基本的な構文を使うことで、データベースにテーブルを作り、そのテーブルにデータを追加、更新、削除、そして取得することができます。CREATE TABLE でテーブルを作り、INSERT INTO でデータを入れ、SELECT でデータを取り出すという流れが基本です。さらに、JOIN でテーブルを結合したり、GROUP BY でデータをまとめたり、CASE 式で条件に応じて結果を変えたりすることもできます。これらの構文をうまく使うと、いろいろなデータ操作が可能になります。

データベースの使い方を理解し、実際に手を動かして練習することで、SQLの知識はどんどん深まります。もっと複雑なクエリを作れるようになると、データを集めたり分析したりするのが簡単になります。SQLはとても強力なツールなので、うまく使うことでたくさんの役立つアプリケーションを作ることができます。

練習問題

以下に、このチュートリアルで学んだ内容を使った練習問題を20問用意しました。各問題の解答を確認しながら、SQLのスキルを磨いてください。問題は実践的なシナリオに基づいていますので、実際にSQLを使う際に役立つでしょう。

  1. 新しいテーブル TBL_PROJECTS を作成し、プロジェクトコード (PROJ_CODE)、プロジェクト名 (PROJ_NAME)、開始日 (START_DATE) を含むようにしてください。
    解答:

    CREATE TABLE TBL_PROJECTS (
      PROJ_CODE INT PRIMARY KEY,
      PROJ_NAME VARCHAR(100) NOT NULL,
      START_DATE DATE
    );
    
  2. TBL_EMPLOYEES テーブルに、新しく従業員「山田 一郎(フリガナ:ヤマダ イチロウ、男性、誕生日:1991年3月10日)」を追加してください。
    解答:

    INSERT INTO TBL_EMPLOYEES (EMP_CODE, EMP_NAME, KANA, SEX, BIRTHDAY)
    VALUES (5, '山田 一郎', 'ヤマダ イチロウ', 'M', '1991-03-10');
    
  3. TBL_EMPLOYEES から、全ての男性 (SEX = 'M') の従業員の名前を取得してください。
    解答:

    SELECT EMP_NAME FROM TBL_EMPLOYEES
    WHERE SEX = 'M';
    
  4. 従業員番号が 3 の従業員の名前を「鈴木 太郎」に更新してください。
    解答:

    UPDATE TBL_EMPLOYEES
    SET EMP_NAME = '鈴木 太郎'
    WHERE EMP_CODE = 3;
    
  5. TBL_EMPLOYEES から、従業員番号が 2 のデータを削除してください。
    解答:

    DELETE FROM TBL_EMPLOYEES
    WHERE EMP_CODE = 2;
    
  6. TBL_EMPLOYEES から、誕生日が1990年以降の従業員を取り出してください。
    解答:

    SELECT * FROM TBL_EMPLOYEES
    WHERE BIRTHDAY >= '1990-01-01';
    
  7. TBL_EMPLOYEESTBL_DEPARTMENTS を結合して、全従業員の名前と所属部署名を取り出してください。
    解答:

    SELECT A.EMP_NAME, B.DEP_NAME
    FROM TBL_EMPLOYEES A
    JOIN TBL_DEPARTMENTS B ON A.EMP_CODE = B.EMP_CODE;
    
  8. 性別ごとに従業員の人数を数えるクエリを書いてください。
    解答:

    SELECT SEX, COUNT(*) AS 人数
    FROM TBL_EMPLOYEES
    GROUP BY SEX;
    
  9. TBL_EMPLOYEES から最も最近雇用された従業員の名前を取得するサブクエリを書いてください。
    解答:

    SELECT EMP_NAME FROM TBL_EMPLOYEES
    WHERE EMP_CODE = (SELECT MAX(EMP_CODE) FROM TBL_EMPLOYEES);
    
  10. TBL_EMPLOYEES の性別を「男性」「女性」に変換して表示するクエリを書いてください。
    解答:

    SELECT EMP_NAME,
      CASE WHEN SEX = 'M' THEN '男性'
           WHEN SEX = 'F' THEN '女性'
           ELSE '不明'
      END AS 性別
    FROM TBL_EMPLOYEES;
    
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?