--1. select 데이터를 가져온다.
SELECT -- 가져와라
* -- 모두 (모든컬럼)
FROM EMP_C; -- 컨트롤 키 + 엔터
SELECT -- 가져와라
EMP_NM -- 한개만 컬럼명을 적어준다.
FROM EMP_C; -- 컨트롤 키 + 엔터
SELECT -- 가져와라
EMP_NM
,EMP_NO
FROM EMP_C; -- 컨트롤 키 + 엔터
SELECT -- 가져와라
TMP.EMP_NM -- 테이블명.컬럼명
,TMP.EMP_NO
FROM EMP_C TMP ; -- 테이블에 이름을 붙여준다.
--2. WHERE 조건
SELECT
*
FROM EMP_C EMP
WHERE BIRTH_YMD >= '19500101'; -- = , <> , > , < , >= , <=
SELECT
*
FROM EMP_C EMP
WHERE GENDER_CD = '1'; --남자
SELECT
*
FROM EMP_C EMP
WHERE GENDER_CD <> '1'; --여자
SELECT
*
FROM EMP_C EMP
WHERE GENDER_CD <> '1'
AND BIRTH_YMD >= '19500101'; -- 여러조건을 만족하는 데이틑 찾을 때 AND를 사용
-----------------
SELECT
*
FROM EMP_C EMP
WHERE GENDER_CD <> '1'
AND BIRTH_YMD >= '19500101'
ORDER BY EMP_NM ASC ; --오름정렬
SELECT
*
FROM EMP_C EMP
WHERE GENDER_CD <> '1'
AND BIRTH_YMD >= '19500101'
ORDER BY EMP_NM DESC ; --내림정렬
SELECT
*
FROM EMP_C EMP
WHERE GENDER_CD <> '1'
AND BIRTH_YMD >= '19500101'
ORDER BY EMP_NM, BIRTH_YMD DESC ; --내림정렬
--3. 정렬
SELECT
*
FROM EMP_C EMP
WHERE GENDER_CD <> '1'
AND BIRTH_YMD >= '19500101'
ORDER BY EMP_NM ASC ; --오름정렬
SELECT
*
FROM EMP_C EMP
WHERE GENDER_CD <> '1'
AND BIRTH_YMD >= '19500101'
ORDER BY EMP_NM DESC ; --내림정렬
SELECT
*
FROM EMP_C EMP
WHERE GENDER_CD <> '1'
AND BIRTH_YMD >= '19500101'
ORDER BY EMP_NM, BIRTH_YMD DESC ; --내림정렬
--4. LIKE
SELECT
*
FROM EMP_C
WHERE EMP_NM LIKE '이%';
SELECT
*
FROM EMP_C
WHERE EMP_NM NOT LIKE '이%';
SELECT
*
FROM EMP_C
WHERE EMP_NM LIKE '%이';
SELECT
*
FROM EMP_C
WHERE EMP_NM LIKE '%이%';
--5. IN , NOT IN
SELECT
* FROM
EMP_C
WHERE EMP_NO IN ('11507952','11510199','10004553');
SELECT
* FROM
EMP_C
WHERE EMP_NO = '11507952';
SELECT
* FROM
EMP_C
WHERE EMP_NO NOT IN ('11507952','11510199');
SELECT
* FROM
EMP_C
WHERE EMP_NO IN ('11507952','11510199','10004553')
AND EMP_NM LIKE '김%';
-- 6. GROUP BY ~별, 직원별 자녀수를 구하는 sql을 작성해보세요.
SELECT
EMP_NO
,COUNT(*)
FROM FAM_C
WHERE REL_TYPE_CD = 'A27' -- 자녀는 A27
AND EMP_NO = '10007088'
GROUP BY EMP_NO ; -- GROUP BY 뒤에 있는 컬럼명을 그대로 SELECT 쪽에 넣어준다.
-- 그룹바이 , COUNT(*) , MAX,MIN,AVG,SUM 같이 함께 쓰인다.
-- 임직원중에서 남자와 여자 중에서 가장 생일이 빠른 사람은?
SELECT
GENDER_CD
,MIN(BIRTH_YMD)
FROM
EMP_C
GROUP BY GENDER_CD;
SELECT
GENDER_CD
,MAX(BIRTH_YMD)
FROM
EMP_C
GROUP BY GENDER_CD;
----
-- 7. DECODE, CASE WHEN
SELECT
EMP_NO
,GENDER_CD AS 성별코드
,DECODE(GENDER_CD,'1','남자','2','여자','모름') AS 성별
FROM EMP_C;
SELECT
EMP_NO
,GENDER_CD AS 성별코드
, BIRTH_YMD
,DECODE(GENDER_CD,'1','남자','2','여자','모름') AS 성별
,CASE WHEN GENDER_CD = '1' AND BIRTH_YMD <= '19500101' THEN '늙은남자'
WHEN GENDER_CD = '1' AND BIRTH_YMD > '19500101' THEN '젊은남자'
WHEN GENDER_CD = '2' THEN '여자'
ELSE '모름' END AS 성별2
FROM EMP_C;
SELECT
ROWNUM --순번
,EMP.*
FROM EMP_C EMP;
--RANK 동순위는 동일하게 처리하고, 뛰어 넘는다.
SELECT
RANK() OVER (ORDER BY EMP_NM ASC) AS RN -- RANK를 순위를 선정하는데, EMP_NM의 오름차순으로
,EMP.*
FROM EMP_C EMP;
--DENSE_RANK --> 동순위를 뛰어 넘기지 않는다.
SELECT
DENSE_RANK() OVER (ORDER BY EMP_NM ASC) AS RN -- RANK를 순위를 선정하는데, EMP_NM의 오름차순으로
,EMP.*
FROM EMP_C EMP;
--
SELECT * FROM EMP_C WHERE EMP_NO = '11510796'
UNION ALL -- 합치는데, 중복이 제거 되지 않는다.
SELECT * FROM EMP_C WHERE EMP_NO = '11503691'
;
SELECT * FROM EMP_C WHERE EMP_NO = '11510796'
UNION -- 합치는데, 중복이 제거된다.
SELECT * FROM EMP_C WHERE EMP_NO = '11503691'
;
SELECT * FROM EMP_C WHERE EMP_NO = '11503691'
UNION ALL -- 합치는데, 중복이 제거 되지 않는다.
SELECT * FROM EMP_C WHERE EMP_NO = '11503691'
;
SELECT * FROM EMP_C WHERE EMP_NO = '11503691'
UNION -- 합치는데, 중복이 제거된다.
SELECT * FROM EMP_C WHERE EMP_NO = '11503691'
;
SELECT * FROM EMP_C WHERE EMP_NO IN ( '11503691' , '11510796');
SELECT
EMP_NO
,COUNT(*)
FROM FAM_C
WHERE REL_TYPE_CD = 'A27'
GROUP BY EMP_NO
HAVING COUNT(*) < 3;
-- JOIN
-- 테이블과 테이블을 합친다.
-- 1) 기준 테이블
-- 2) 대상 테이블
-- 3) 키를 합친다.
-- INNER JOIN / LEFT OUTER JOIN
-- 임직원번호 / 임직원성명 / 임직원가족이름
-- EMP_C (EMP_NO ) / EMP_C (EMP_NM ) / FAM_C (FAM_NM )
SELECT
EMP.EMP_NO AS 임직원번호
,EMP.EMP_NM AS 직원성명
,FAM.FAM_NM AS 직원가족성명
FROM
EMP_C EMP
INNER JOIN -- 교집
FAM_C FAM
ON EMP.EMP_NO = FAM.EMP_NO --JOIN KEY
WHERE EMP.EMP_NO IN ('10001452','11505155')
;
SELECT
EMP.EMP_NO AS 임직원번호
,EMP.EMP_NM AS 직원성명
,FAM.FAM_NM AS 직원가족성명
FROM
EMP_C EMP
LEFT OUTER JOIN
FAM_C FAM
ON EMP.EMP_NO = FAM.EMP_NO --JOIN KEY
WHERE EMP.EMP_NO IN ('10001452','11505155')
;
참고
'데이터 베이스 > 코멘토 SQL로 배우는 데이터 추출' 카테고리의 다른 글
직무부트캠프 3주차 심화 과제, 4주차 과제 (1) | 2023.12.12 |
---|---|
코멘토 DB직무 부트 캠프 1 주차 (0) | 2023.11.16 |