AP データベース SQL基礎

提供:yonewiki
2025年4月19日 (土) 22:53時点におけるYo-net (トーク | 投稿記録)による版 (→‎LEFT JOIN)

AP データベースに戻る

概要

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

 

CREATE TABLE

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


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

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


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

 

INSERT

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


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

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

 

SELECT

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


SELECT 氏名, 給与 FROM 社員;


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

 

WHERE

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

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

 

ORDER BY

SELECT * FROM 社員 ORDER BY 給与 DESC;


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

 

GROUP BY

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


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

 

HAVING

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

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

 

DISTINCT

SELECT DISTINCT 所属部署 FROM 社員;

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

 

LIKE

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


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

 

UPDATE ~ SET ~

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


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

 

DELETE

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


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

 

INNER JOIN

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

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


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


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

 

LEFT JOIN

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


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

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


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

 


 

AP データベースに戻る