SQL]集約演算子
この投稿では、ファストパスキャンパスの「データベースとSQL合格チャネルオンライン」コースをまとめました.
タイプunion複数のSQL文の結果を示す集合重複行は、出力データを1行ずつ並べ替えて出力します.UNIOALLの複数のSQL文の結果の並列行を結果として表示し、INTERSECTの複数のSQL文の結果の交差行を出力EXCEPTの上にあるSQL文のセットから次のSQL文のセットを減算した結果を1行で表示します.
UNIONコマンドデータのソート UNIOALLコマンドデータを並べ替えない UNIOALLコマンド重複行 を保持 UNIONコマンド表示重複行(非同期)が消去された値
INTERSECTを使用したSQLとEXISTSまたはJOINを使用したSQL文は同じ結果を示しています. INTERSECTで書かれたSQL文はずっと長くて、効率が低くて、あまり使いにくいです.
MINUS演算は、次の条件を除いた結果を示す差動セット概念である.
除外後
集合演算子のタイプ
タイプunion複数のSQL文の結果を示す集合重複行は、出力データを1行ずつ並べ替えて出力します.UNIOALLの複数のSQL文の結果の並列行を結果として表示し、INTERSECTの複数のSQL文の結果の交差行を出力EXCEPTの上にあるSQL文のセットから次のSQL文のセットを減算した結果を1行で表示します.
UNION, UNION ALL
SELECT A.EMP_NO, A.EMP_NM, A.BIRTH_DE
FROM TB_EMP A
WHERE A.BIRTH_DE BETWEEN '19600101' AND '19691231'
UNION
SELECT A.EMP_NO, A.EMP_NM, A.BIRTH_DE
FROM TB_EMP A
WHERE A.BIRTH_DE BETWEEN '19700101' AND '197901231'
;
SELECT A.EMP_NO, A.EMP_NM, A.BIRTH_DE
FROM TB_EMP A
WHERE A.BIRTH_DE BETWEEN '19600101' AND '19691231'
UNION ALL
SELECT A.EMP_NO, A.EMP_NM, A.BIRTH_DE
FROM TB_EMP A
WHERE A.BIRTH_DE BETWEEN '19700101' AND '197901231'
;
SELECT A.EMP_NM, A.BIRTH_DE
FROM TB_EMP A
WHERE A.BIRTH_DE BETWEEN '19600101' AND '19691231'
UNION ALL
SELECT A.EMP_NM, A.BIRTH_DE
FROM TB_EMP A
WHERE A.BIRTH_DE BETWEEN '19700101' AND '197901231'
;
SELECT A.EMP_NM, A.BIRTH_DE
FROM TB_EMP A
WHERE A.BIRTH_DE BETWEEN '19600101' AND '19691231'
UNION
SELECT A.EMP_NM, A.BIRTH_DE
FROM TB_EMP A
WHERE A.BIRTH_DE BETWEEN '19700101' AND '197901231'
;
INTERSECT
SELECT A.EMP_NO, A.EMP_NM, A.ADDR, B.CERTI_CD, C.CERTI_NM
FROM TB_EMP A , TB_EMP_CERTI B, TB_CERTI C
WHERE A.EMP_NO = B.EMP_NO
AND B.CERTI_CD = C.CERTI_CD
AND C.CERTI_NM = 'SQLD'
INTERSECT
SELECT A.EMP_NO, A.EMP_NM, A.ADDR, B.CERTI_CD, C.CERTI_NM
FROM TB_EMP A , TB_EMP_CERTI B, TB_CERTI C
WHERE A.EMP_NO = B.EMP_NO
AND B.CERTI_CD = C.CERTI_CD
AND A.ADDR LIKE '%용인%';
SELECT A.EMP_NO, A.EMP_NM, A.ADDR, B.CERTI_CD, C.CERTI_NM
FROM TB_EMP A , TB_EMP_CERTI B, TB_CERTI C
WHERE A.EMP_NO = B.EMP_NO
AND B.CERTI_CD = C.CERTI_CD
AND C.CERTI_NM = 'SQLD'
AND EXISTS ( SELECT 1
FROM TB_EMP K
WHERE K.EMP_NO = A.EMP_NO
AND K.ADDR LIKE '%용인%')
;
SELECT A.EMP_NO, A.EMP_NM, A.ADDR, B.CERTI_CD, C.CERTI_NM
FROM TB_EMP A , TB_EMP_CERTI B, TB_CERTI C
WHERE A.EMP_NO = B.EMP_NO
AND B.CERTI_CD = C.CERTI_CD
AND C.CERTI_NM = 'SQLD'
AND A.ADDR LIKE '%용인%';
MINUS演算
SELECT A.EMP_NO, A.EMP_NM, A.SEX_CD, A.DEPT_CD FROM TB_EMP A
MINUS
SELECT A.EMP_NO, A.EMP_NM, A.SEX_CD, A.DEPT_CD FROM TB_EMP A
WHERE A.DEPT_CD = '100001'
MINUS
SELECT A.EMP_NO, A.EMP_NM, A.SEX_CD, A.DEPT_CD FROM TB_EMP A
WHERE A.DEPT_CD = '100002'
MINUS
SELECT A.EMP_NO, A.EMP_NM, A.SEX_CD, A.DEPT_CD FROM TB_EMP A
WHERE A.DEPT_CD = '100003'
MINUS
SELECT A.EMP_NO, A.EMP_NM, A.SEX_CD, A.DEPT_CD FROM TB_EMP A
WHERE A.SEX_CD = '1'
;
上のSQL文除外後
Reference
この問題について(SQL]集約演算子), 我々は、より多くの情報をここで見つけました https://velog.io/@fancypenguin/SQL-집합-연산자テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol