「AP データベース SQL基礎」の版間の差分

提供:yonewiki
511行目: 511行目:
       <caption class="db_caption">社員</caption>
       <caption class="db_caption">社員</caption>
<thead>
<thead>
  <tr>
    <tr>
    <th>社員ID</th>
          <th>氏名</th>
    <th>氏名</th>
          <th>所属部署</th>
    <th>所属部署</th>
          <th>拠点</th>
    <th>給与</th>
        </tr>
  </tr>
</thead>
</thead>
<tbody>
<tbody>
  <tr>
    <tr>
    <td>1</td>
          <td>山田太郎</td>
     <td>山田太郎</td>
          <td>営業部</td>
    <td>営業部</td>
          <td>東京</td>
    <td>300000</td>
     </tr>
  </tr>
    <tr>
  <tr>
          <td>佐藤花子</td>
    <td>3</td>
          <td>開発部</td>
     <td>鈴木一郎</td>
          <td>大阪</td>
    <td>営業部</td>
    </tr>
    <td>350000</td>
    <tr>
  </tr>
          <td>鈴木一郎</td>
          <td>営業部</td>
          <td>東京</td>
     </tr>
    <tr>
          <td>田中美咲</td>
          <td>総務部</td>
          <td>名古屋</td>
    </tr>
</tbody>
</tbody>
     </table>
     </table>

2025年4月19日 (土) 22:48時点における版

AP データベースに戻る

概要

 応用情報処理技術者試験の問題に取り上げられるようなSQLを紹介していきます。

 

CREATE TABLE

sql
CREATE TABLE 社員 (
  社員ID INT PRIMARY KEY,
  氏名 VARCHAR(20),
  所属部署 VARCHAR(20),
  給与 INT CHECK (給与 >= 0)
);
sql


 表に以下の列が定義された状態のデータベースが作成されます。

  • 社員ID 整数型 主キー
  • 氏名 文字型20桁
  • 所属部署 文字型20桁
  • 給与 整数型 0以上の整数である検査付き


社員
社員ID 氏名 所属部署 給与

 

INSERT

 INSERT句でデータを挿入できます。以下の例では4レコード挿入しています。これで表にデータがある状態になりました。ここで作った表をこの記事のベースにしたいと思います。


sql
INSERT INTO 社員(社員ID, 氏名, 所属部署, 給与)
VALUES
  (1,	'山田太郎',	'営業部',	300000),
  (2,	'佐藤花子',	'開発部',	400000),
  (3,	'鈴木一郎',	'営業部',	350000),
  (4,	'田中美咲',	'総務部',	280000);
sql

社員
社員ID 氏名 所属部署 給与
1 山田太郎 営業部 300000
2 佐藤花子 開発部 400000
3 鈴木一郎 営業部 350000
4 田中美咲 総務部 280000

 

SELECT

 SELECT句でデータの抽出ができます。抜き出したい列を指定すると、以下のようになります。列に*を指定すると、すべての列が表示されます。


sql
SELECT 氏名, 給与 FROM 社員;
sql


社員
氏名 給与
山田太郎 300000
佐藤花子 400000
鈴木一郎 350000
田中美咲 280000

 

WHERE

sql
SELECT * FROM 社員 WHERE 所属部署='営業部';
sql

社員
社員ID 氏名 所属部署 給与
1 山田太郎 営業部 300000
3 鈴木一郎 営業部 350000

 

ORDER BY

sql
SELECT * FROM 社員 ORDER BY 給与 DESC;
sql


社員
社員ID 氏名 所属部署 給与
2 佐藤花子 開発部 400000
3 鈴木一郎 営業部 350000
1 山田太郎 営業部 300000
4 田中美咲 総務部 280000

 

GROUP BY

sql
SELECT 所属部署, AVG(給与) AS 平均給与 FROM 社員 GROUP BY 所属部署;
sql


社員
所属部署 平均給与
営業部 325,000
開発部 400,000
総務部 280,000

 

HAVING

sql
SELECT 所属部署, AVG(給与) AS 平均給与 FROM 社員 GROUP BY 所属部署 HAVING AVG(給与) > 300000;
sql

社員
所属部署 平均給与
営業部 325,000
開発部 400,000

 

DISTINCT

sql
SELECT DISTINCT 所属部署 FROM 社員;
sql

社員
所属部署
営業部
開発部
総務部

 

LIKE

sql
SELECT * FROM 社員 WHERE 氏名 LIKE '田%';
sql


社員
社員ID 氏名 所属部署 給与
4 田中美咲 総務部 280000

 

UPDATE ~ SET ~

sql
UPDATE 社員 SET 給与=310000 WHERE 氏名='山田太郎';
sql


社員
社員ID 氏名 所属部署 給与
1 山田太郎 営業部 310000
2 佐藤花子 開発部 400000
3 鈴木一郎 営業部 350000
4 田中美咲 総務部 280000

 

DELETE

sql
DELETE FROM 社員 WHERE 所属部署='総務部';
sql


社員
社員ID 氏名 所属部署 給与
1 山田太郎 営業部 300000
3 鈴木一郎 営業部 350000

 

INNER JOIN

 以下のテーブルを追加します。

部署テーブル
部署名 拠点
営業部 東京
開発部 大阪
総務部 名古屋


sql
SELECT 氏名, 社員.所属部署, 拠点
FROM 社員 INNER JOIN 部署
ON 社員.所属部署 = 部署.部署名;
sql


社員
氏名 所属部署 拠点
山田太郎 営業部 東京
佐藤花子 開発部 大阪
鈴木一郎 営業部 東京
田中美咲 総務部 名古屋

 

LEFT JOIN

sql
SELECT 氏名, 社員.所属部署, 拠点
FROM 社員 LEFT JOIN 部署
ON 社員.所属部署 = 部署.部署名;
sql


社員
社員ID 氏名 所属部署 給与
1 山田太郎 営業部 300000
3 鈴木一郎 営業部 350000

 


 

AP データベースに戻る