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?

GROUPBYとHAVINGを使ったデータ抽出

Posted at

最近OracleDBを触る機会が増えたので備忘録程度に。

問題文:
empテーブルからデータを検索しなさい。同じ職種が2人以上存在するデータを検索するものとし、下記の実行結果を参考にすること。

<実行結果_empテーブル>
| EMPNO     | ENAME            | JOB
----------  -----------------  ----------
| 001       | 鈴木 仁         | PL
| 003       | 高橋 ひとみ     | PL
| 004       | 大前 貢         | SE
| 005       | 真田 博之       | SE
| 007       | 神城 陣         | PG
| 008       | 結城 陣         | SE
| 009       | 博多 弁         | PG

GROUP BYとHAVING使うのは見えてたけど、サブクエリを定義する場所が分からず苦戦した。

ということで定番のテーブル作成から。実行結果を見たい方は、4番へ。

1.テーブル作成
empテーブル作成:

CREATE TABLE emp (
    empno varchar2(3) PRIMARY KEY,
    ename varchar2(20) NOT NULL,
    superior varchar2(20),
    hiredate date NOT NULL,
    sal number NOT NULL,
    job varchar2(30),
    deptno varchar2(2),
    FOREIGN KEY (deptno) REFERENCES dept (deptno) 
);

2.論理名付与
COMMENT ON COLUMN emp.empno IS '任意の論理名';

※empno=部署NO、empname=社員名、superior=上司、hiredate=入社日、sal=給与、job=職種、deptno=部署名


3.レコード挿入
INSERT INTO emp VALUES ('001', '鈴木 仁', NULL, '2000/01/01', 600000, 'PL', '01');
INSERT INTO emp VALUES ('002', '佐藤 幸助', '鈴木 仁', '2000/03/22', 350000, 'ブリッジSE', '01');
INSERT INTO emp VALUES ('003', '高橋 ひとみ', NULL, '2000/01/01', 500000, 'PL', '02');
INSERT INTO emp VALUES ('004', '大前 貢', '鈴木 仁', '2000/04/01', 320000, 'SE', '01');
INSERT INTO emp VALUES ('005', '真田 博之', '鈴木 仁', '2001/04/01', 300000, 'SE', '01');
INSERT INTO emp VALUES ('006', '大城 勉', '鈴木 仁', '2001/04/01', 300000, 'SE', '01');
INSERT INTO emp VALUES ('007', '神城 陣', '高橋 ひとみ', '2001/04/01', 280000, 'PG', '02');
INSERT INTO emp VALUES ('008', '結城 瞳', '高橋 ひとみ', '2002/04/01', 280000, 'PG', '02');
INSERT INTO emp VALUES ('009', '博多 弁', '高橋 ひとみ', '2003/04/01', 260000, 'PG', '02');
INSERT INTO emp VALUES ('010', '小山 浩', '高橋 ひとみ', '2006/04/01', 180000, 'デザイナー', '02');

4.クエリ定義
SELECT empno, ename, job
FROM emp
WHERE (job) IN
(
    SELECT job 
    FROM emp
    GROUP BY job
    HAVING count(*) > 1
);
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?