쟝이의 세상
SQLD 기출문제 2과목(1~20) 오답정리 본문
1. 데이터 제어어 DCL에 해당하는 명령어는? |
⓵ INSERT ⓶ RENAME ⓷ COMMIT ⓸ REVOKE |
SQL 문장의 종류
- DDL(Data Definition Language): 데이터 정의어
- 데이터베이스 객체와 관련된 명령어
-- CREATE, ALTER, DROP, RENAME
- 데이터베이스 객체와 관련된 명령어
- DML(Data Manipulation Language): 데이터 조작어
- 데이터(행)와 관련된 명령어
-- SELECT, INSERT, DELETE, UPDATE
- 데이터(행)와 관련된 명령어
- DCL (Data Control Language): 데이터 제어어
- 권한을 부여하고 회수하는 명령어
-- GRANT, REVOKE
- 권한을 부여하고 회수하는 명령어
- TCL (Transaction Control Language): 트랜잭션 제어어
- DML에 의해 조작된 결과를 트랜잭션 별로 제어
-- COMMIT, ROLLBACK
- DML에 의해 조작된 결과를 트랜잭션 별로 제어
2. 아래에서 빈칸 ㉠에 들어갈 내용으로 가장 적절한 것은 |
INSERT는 테이블에 데이터를 입력할 때 사용한다. ㉠는 입력한 정보 중에 잘못 입력되거나 변경이 발생하여 정보를 수정할 때 사용한다. DELETE는 테이블의 정보가 필요 없게 되었을 경우 데이터 삭제를 수행한다. |
⓵ UPDATE ⓶ SELECT ⓷ ALTER ⓸ REVOKE |
DML언어의 종류 - SELECT(조회), INSERT(추가), UPDATE(수정), DELETE(삭제)
3. 아래 내용에 해당하는 SQL 명령어의 종류는? |
논리적인 작업의 단위를 묶어 DML에 의해 조작된 결과를 작업단위(Transaction)별로 제어하는 명령어인 Commit, Rollback, Savepoint 등이 여기에 해당하며, 일부에서는 DCL(Data Control Language)로 분류하기도 한다. |
⓵ DDL ⓶ DML ⓷ TCL ⓸ TML |
논리적인 작업의 단위를 묶어 DML에 의해 조작된 결과를 작업단위 별로 제어하는 명령어
-> TCL(Transaction Control Language)
4. SELECT 문에 대한 설명으로 가장 적절하지 않은 것은? |
⓵ WHERE 절은 필수가 아니므로 생략 가능하다. ⓶ DISTINCT 옵션을 통해 중복된 데이터가 있을 경우 1건으로 처리해 출력할 수 있다. ⓷ FROM 절이 없는 다음 문장 "SELECT COL1, COL2"은 에러 없이 수행된다. ⓸ SELECT List에 서브쿼리가 사용될 수 있다. |
SQL 쿼리에서의 필수 - SELECT, FROM 절
5. SQL의 종류와 해당되는 명령어를 바르게 연결한 것은? |
⓵ DML - SELECT ⓶ TCL - GRANT ⓷ DCL - DROP ⓸ DML - ALTER |
DDL언어 종류 - CREATE, ALTER, DROP, RENAME
DML언어 종류 - SELECT, INSERT, UPDATE, DELETE
DCL언어 종류 - GRANT, REVOKE
TCL언어 종류 - COMMIT, ROLLBACK
6. 아래 내용의 범주에 해당하는 SQL 명령어로 가장 적절하지 않은 것은? |
테이블의 구조를 생성, 변경, 삭제하는 등 데이터 구조를 정의하는 데 사용되는 명령어이다. |
⓵ CREATE ⓶ GRANT ⓷ ALTER ⓸ DROP |
데이터 구조를 정의 -> DDL(Data Definition Language)
종류: CREATE, ALTER, DROP, RENAME
⓶ GRANT - DCL언어
7. 데이터베이스에서 조회되는 데이터에 대한 조건을 설정하여 원하는 데이터만을 검색하기 위해 사용하는 절로 가장 적절한 것은? |
⓵ WHERE 절 ⓶ GROUP BY 절 ⓷ ORDER BY 절 ⓸ HAVING 절 |
⓶ GROUP BY - 같은 값을 가진 행끼리 하나의 그룹으로 뭉쳐준다
⓷ ORDER BY - SELECT문으로 출력되는 결과를 정렬할 때 사용
⓸ HAVING - 집계함수의 조건절
8. SQL 문을 실행했을 때 오류가 발생하는 부분으로 가장 적절한 것은? |
⓵ SELECT DEPTNO, ROUND(AVG(SAL),2) ⓶ FROM EMP ⓷ WHERE AVG(SAL) >= 1800 ⓸ GROUP BY DEPTNO; |
WHERE절에는 집계함수가 입력될 수 없다.
집계함수의 조건절 -> HAVING
9. 아래 SQL의 수행 결과로 가장 적절한 것은? |
⓵ 60, NULL, 30, 60 ⓶ 60, 20, 30, 60 ⓷ 90, NULL, 30, 60 ⓸ 90, 20, 30, 60 |
select sum(COL2) + sum(COL3) from TAB_A;
sum(COL2) = null을 제외하고 50+10을 해준다. = 60
sum(COL3) = null을 제외하고 20+10을 해준다. = 30
=> 60 + 30 = "90" 출력
select sum(COL2) + sum(COL3) from TAB_A where COL1 > 0
COL1 | COL2 | COL3 |
30 | <NULL> | 20 |
sum(COL2) = NULL
sum(COL3) = 20
=> NULL + 20 = "NULL" 출력
** NULL **
NULL의 연산은 항상 NULL값을 추출
집계함수는 NULL값을 제외하고 처리
select sum(COL2) + sum(COL3) from TAB_A where COL1 is not null;
COL1 | COL2 | COL3 |
30 | <NULL> | 20 |
0 | 10 | <NULL> |
sum(COL2) = null을 제외하고 10
sum(COL3) = null을 제외하고 20
=> 10 + 20 = "30" 출력
select sum(COL2) + sum(COL3) from TAB_A where COL1 is null;
COL1 | COL2 | COL3 |
<NULL> | 50 | 10 |
sum(COL2) = 50
sum(COL3) = 10
=> 50 + 10 = "60" 출력
10. 다음 SQL 문장 중 COLUMN1의 값이 NULL이 아닌 경우를 찾아내는 문장으로 가장 적절한 것은? (ANSI 표준 기준) |
⓵ SELECT * FROM MYTABLE WHERE COLUMN1 IS NOT NULL; ⓶ SELECT * FROM MYTABLE WHERE COLUMN1 <> NULL; ⓷ SELECT * FROM MYTABLE WHERE COLUMN1 != NULL; ⓸ SELECT * FROM MYTABLE WHERE COLUMN1 NOT NULL; |
NULL인 경우를 찾아내는 조건 = COLUMN1 IS NULL
NULL이 아닌 경우를 찾아내는 조건 = COLUMN1 IS NOT NULL
11. 아래에 대한 설명으로 가장 적절한 것은? |
⓵ 서비스번호 칼럼의 레코드 중 하나의 레코드라도 '001'과 같은 숫자 형식으로 입력되어 있다면 ㉠은 오류 없이 실행된다. ⓶ 오라클에서 ㉡과 같이 데이터를 입력하였을 때, 서비스명 칼럼에 공백 문자 데이터가 입력된다. ⓷ 오라클에서 ㉡과 같이 데이터를 입력하고 ㉢과 같이 조회하였을 때, 데이터는 조회된다. ⓸ SQL Server에서 ㉡과 같이 데이터를 입력하고 ㉣과 같이 조회하였을 때, 데이터는 조회되지 않는다. |
NULL 값은 공백, 숫자 0 과는 전혀 다른 의미이다.
㉡의 값을 조회하려 할 때 "select * from 서비스 where 서비스명 = ' ';" 로 조회해야 나온다.
12. 함수의 실행 결과로 가장 적절하지 않은 것은? (단, A의 아스키코드는 65이다.) |
⓵ LOWER('SQL Expert') : 'sql expert' ⓶ UPPER('SQL Expert') : 'SQL EXPERT' ⓷ ASCII('A') : 65 ⓸ LTRIM('xxYYZZxYZxx', 'x') : 'YYZZxYZ' |
- LOWER( ) : 소문자로 변환
- UPPER( ) : 대문자로 변환
- ASCII( ) : 해당 문자를 아스키코드 값으로 변환
- LTRIM('문자열', '옵션') : 문자열 왼쪽부터 지정 옵션 문자 제거
- LTRIM('hello', 'h') : 문자열 왼쪽부터 h를 제거하여 출력 ->
hello = "ello" 출력 - LTRIM('xxyyzzxx', x') : 문자열 왼쪽부터 x를 제거하여 출력 ->
xxyyzzxx = "yyzzxx" 출력
- LTRIM('hello', 'h') : 문자열 왼쪽부터 h를 제거하여 출력 ->
⓸ LTRIM('xxYYZZxYZxx', 'x') = YYZZxYZxx
13. 아래를 참고할 때 실행 결과가 다른 SQL은? | |
서비스_가입 ----------------- 고객ID 서비스ID 가입일자 가입시간 ----------------- 서비스시작일시 서비스종료일시 (논리) |
SVC_JOIN -------------------------------------- CUST_ID: VARCHAR2(10) NOT NULL SVC_ID: VARCHAR2(5) NOT NULL JOIN_YMD: VARCHAR2(8) NOT NULL JOIN_HH: VARCHAR2(4) NOT NULL -------------------------------------- SVC_START_DATE: DATE NULL SVC_END_DATE: DATE NULL (물리) |
⓵
⓶ ⓷ ⓸ |
- TO_CHAR( ) : 날짜, 숫자 등의 값을 문자열로 변환하는 함수
- TO_CHAR(SYSDATE, 'YYYY-MM-DD') -> "2024-08-07"
SYSDATE: 오라클에서 현재 시스템의 날짜와 시간을 반환해주는 함수
- TO_CHAR(SYSDATE, 'YYYY-MM-DD') -> "2024-08-07"
- TO_DATE( ) : 문자열 형식의 날짜를 날짜 형식으로 변환하는 함수
- TO_DATE('2024-08-07', 'YYYY-MM-DD') -> 2024-08-07 문자열을 date 형식으로 변환 "2024-08-07"
- TO_DATE('2024-08-07 23', 'YYYY-MM-DD HH24')
-> 해당 문자열을 date 형식으로 변환(+시간) "2024-08-07 23:00:00" - YYYY: 4자리 연도
MM: 2자리 월
DD: 2자리 일
HH24: 24시간 형식의 시간
MI: 분
SS: 초
- CONCAT( ) : 두 개 이상의 문자열을 연결할 때 사용
- CONCAT('My', 'Friend') = "MyFreind"
- COUNT( ) : 행의 개수 출력
- COUNT(*) : 전체 행 개수 출력 **NULL 포함**
- COUNT(deptno) : deptno 컬럼의 행 개수 출력 **NULL 제외**
- COUNT(*) + WHERE 절과 함께 쓰이면? 조건에 만족하는 행의 개수 계산
- COUNT(*) + GROUP BY 절과 함께 쓰이면? 그룹별로 행의 개수를 계산
⓵ where 절을 보면
서비스종료일시 >= 2015.01.01 00:00:00
서비스종료일시 <= 2015.01.31.23:59:59
가입일자+가입시간 = 2014.12.01 00:00:00
⓶ where절을 보면
서비스종료일시 >= 2015.01.01
-> 시간은 반환되지 않지만 기본적으로 00:00:00 시간을 포함한다.
서비스종료일시 < 2015.02.01
-> 2014.01.31 23:59:59 까지만 포함됨
(가입일자, 가입시간) 이 ('20141201', '00') 포함되는 행
-> (가입일자, 가입시간), ('20141201', '00')을 하나의 묶음으로 봐야함
⓷
서비스종료일시 = 2015.01
-> 서비스종료일시 문자열이 '201501' 과 일치하는지 확인.
20150131 과 20150114 모두 일치 -- (문자열이라서)년도와 월만 일치하면 되기 때문! = 2015.01월 전체를 뜻함
가입일자 = 2014.12.01
가입시간 = 00시
⓸
서비스종료일시 = 2015.01
-> 문자열 '201501' 을 날짜 형식으로 변환한 후 서비스종료일시와 비교
날짜 형식으로 변환하면 2015.01.01 로 변환됨 = 서비스종료일시가 2015.01.01인 조건임을 알 수 있다
가입일자 = 2014.12.01 00시
-> || : 문자열 연결
14. GROUP BY 절과 HAVING 절에 대한 설명으로 가장 적절한 것은? |
⓵ 집계 함수의 통계 정보는 NULL 값을 가진 행을 포함하여 수행한다. ⓶ GROUP BY 절에서는 SELECT 절과 같이 ALIAS 명을 사용할 수 있다. ⓷ 집계 함수는 WHERE 절에도 올 수 있다. ⓸ HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치한다. |
⓵ 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.
⓶ GROUP BY 절에서는 SELECT 절과 같이 ALIAS 명을 사용할 수 없다.
- ALIAS(별칭) : 컬럼에 대해 별칭을 지정, as 뒤에 별칭명을 지정해준다.
ex) select ename as 사원명 from emp; - 쿼리문의 순서: FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
ex) select절에서 쓰인 alias를 group by에서 인식할 수 없기 때문에 사용할 수 없음
⓷ 집계 함수의 조건절은 HAVING 절이다.
15. 아래를 참고할 때 SQL의 실행 결과로 가장 적절한 것은? (단, 이해를 돕기 위해 ↓는 줄바꿈을 의미하며 실제 저장값이 아님, 또한 CHR(10)의 ASCII 값은 줄바꿈을 의미) |
SELECT SUM(CC) FROM ( SELECT (LENGTH(C1) - LENGTH(REPLACE(C1, CHR(10))) + 1) CC FROM TAB1 ); |
⓵ 2 ⓶ 3 ⓷ 5 ⓸ 6 |
- LENGTH( ) : 문자열의 길이를 반환
- REPLACE('문자열', '찾는 문자', '치환문자') : 해당 문자열의 찾는 문자를 치환 문자로 치환
- REPLACE('Oracle Database', 'Database', 'DB') = 'Oracle DB'
- REPLACE('OracleDB', 'DB') = 'Oracle'
- 치환 문자 설정이 없을 경우: OracleDB 문자의 DB를 치환할 문자가 없으므로 찾는 문자의 문자열 삭제
- CHR( ) : 해당 아스키코드 값을 문자로 반환
- CHR(65) = 'A'
LENGTH(C1)
: 줄바꿈까지 문자로 취급
ROWNUM | LENGTH(C1) |
1 | 3 |
2 | 5 |
REPLACE(C1, CHR(10))
: C1 문자의 'CHR(10)=줄바꿈'을 치환할 문자가 없으므로 ↓(줄바꿈)문자열 삭제
ROWNUM | REPLACE(C1, CHR(10)) |
1 | AA |
2 | BBB |
LENGTH( REPLACE(C1, CHR(10)) )
ROWNUM | REPLACE(C1, CHR(10)) | LENGTH( REPLACE(C1, CHR(10)) ) |
1 | AA | 2 |
2 | BBB | 3 |
SELECT(LENGTH(C1) - LENGTH( REPLACE(C1, CHR(10)) ) + 1 ) CC FROM TAB1
LENGTH(C1) - LENGTH( REPLACE(C1, CHR(10)) ) -> 위의 계산 참고
ROWNUM | LENGTH(C1) - LENGTH( REPLACE(C1, CHR(10)) ) + 1 |
1 | 3 - 2 + 1 => 2 |
2 | 5 - 3 + 1 => 3 |
SUM(CC)
2 + 3 = "5"
16. 아래 SQL의 실행 결과로 가장 적절한 것은?(단, DBMS는 오라클로 가정) |
SELECT TO_CHAR(TO_DATE('2023.01.10 10', 'YYYY.MM.DD HH24') + 1/24/(60/10), 'YYYY.MM.DD HH24:MI:SS') FROM DUAL; |
⓵ 2023.01.10 11:01:00 ⓶ 2023.01.10 10:05:00 ⓷ 2023.01.10 10:10:00 ⓸ 2023.01.10 10:30:00 |
- TO_CHAR( ) : 날짜, 숫자 등의 값을 문자열로 변환하는 함수
- TO_CHAR(SYSDATE, 'YYYY-MM-DD') -> "2024-08-07"
SYSDATE: 오라클에서 현재 시스템의 날짜와 시간을 반환해주는 함수
- TO_CHAR(SYSDATE, 'YYYY-MM-DD') -> "2024-08-07"
- TO_DATE( ) : 문자열 형식의 날짜를 날짜 형식으로 변환하는 함수
- TO_DATE('2024-08-07', 'YYYY-MM-DD') -> 2024-08-07 문자열을 date 형식으로 변환 "2024-08-07"
- TO_DATE('2024-08-07 23', 'YYYY-MM-DD HH24')
-> 해당 문자열을 date 형식으로 변환(+시간) "2024-08-07 23:00:00" - YYYY: 4자리 연도
MM: 2자리 월
DD: 2자리 일
HH24: 24시간 형식의 시간
MI: 분
SS: 초
TO_CHAR(TO_DATE('2023.01.10 10', 'YYYY.MM.DD HH24') + 1/24/(60/10), 'YYYY.MM.DD HH24:MI:SS')
- 2023.01.10 10 의 문자열을 날짜 형식으로 변환 -> "2023.01.10 10:00:00"
- 1/24/(60/10) **일 / 시간 / 분 / 초**
-> 60분을 10분으로 나누면 6분 = 1/24/6
-> 1일을 24시간으로 나누면 1시간, 1시간을 6분으로 나누면 10분 = "10분" - TO_CHAR( (2023.01.10 10:00:00 + 10분), 'YYYY.MM.DD HH24:MI:SS')
= "2023.01.10 10:10:00"
17. 아래의 (가)와 (나)가 동일한 결과를 출력한다고 할 때, 빈칸 ㉠에 들어갈 내용으로 가장 적절한 것은? (단, 스칼라 서브쿼리는 제외함) |
(가) SELECT LOC, CASE WHEN LOC = 'NEW YORK' THEN 'EAST' ELSE 'ETC' END as AREA FROM DEPT; (나) SELECT LOC, ㉠ as AREA FROM DEPT; |
⓵ CASE WHEN LOC IS 'NEW YORK' THEN 'EAST' ELSE 'ETC' END ⓶ CASE LOC WHEN 'NEW YORK' THEN 'EAST' ELSE 'ETC' END ⓷ CASE LOC WHEN 'NEW YORK' THEN 'EAST' DEFAULT 'ETC' END ⓸ DECODE (LOC, 'EAST', 'NEW YORK', 'ETC') |
- CASE [컬럼명 | 표현식] WHEN [조건식1] THEN [결과1] .... ELSE [결과] END
- 조건문과 조건문 사이 콤마(,) 사용하지 않는다
- 반드시 END로 종료
- THEN에 NULL은 안됨
- case when a = b then a else b end
: 조건 a와 b가 같다면 a 반환, 아니라면 b 반환 - case a when 1 then 1 else null end
: a가 1일 경우 1 반환, 아니라면 null값 반환
- case when a = b then a else b end
- DECODE(컬럼명, 비교 대상, A, B)
- 지정한 컬럼의 값이 비교대상과 같다면 A 출력, 같지 않다면 B 출력
- if ~ else if ~ else 와 같다고 볼 수 있다
- decode(deptno, 10, '경영', '다른부서')
: deptno 가 10이면 '경영' 값 반환, 아니면 '다른부서' 값 반환 - decode(deptno, 10, '경영', 20, '회계', '다른부서')
: deptno 가 10이면 '경영' 값 반환, 20이면 '회계' 값 반환, 둘 다 아니라면 '다른부서' 값 반환
- decode(deptno, 10, '경영', '다른부서')
⓵ CASE WHEN LOC IS 'NEW YORK' THEN 'EAST' ELSE 'ETC' END
-> LOC IS 'NEW YORK' 에서 IS가 아닌 = 연산자 사용해야 함
⓷ CASE LOC WHEN 'NEW YORK' THEN 'EAST' DEFAULT 'ETC' END
-> CASE 문은 DEFAULT를 사용하지 않음, DEFAULT 자리에 ELSE 가 들어가야 됨
⓸ DECODE (LOC, 'EAST', 'NEW YORK', 'ETC')
-> LOC의 값이 EAST일 경우 'NEW YORK' 값 반환, 아니라면 'ETC' 값 반환
18. 각 팀별로 FW, MF, DF, GK 포지션의 인원수와 팀별 전체 인원수를 구하는 SQL 작성할 때 결과가 다른 하나는? (단, ⓵은 SQL Server 환경이고, 보기 ⓶, ⓷, ⓸는 오라클 환경이다.) |
⓵
⓶ ⓷ ⓸ |
- NVL(표현식1, 표현식2) : 표현식1의 결과값이 NULL일 경우 표현식2의 값 출력 -> 오라클에서 쓰임
** 표현식1과 표현식2의 데이터 타입은 같아야 함 **
- NVL(deptno, 0) : deptno의 값이 NULL일 경우 0 반환
- ISNULL(표현식1, 표현식2) : 표현식1의 결과값이 NULL일 경우 표현식2의 값 출력 -> SQL Server에서 쓰임
** 표현식1과 표현식2의 데이터 타입은 같아야 함 **
- ISNULL(deptno, 0) : deptno의 값이 NULL일 경우 0 반환
ISNULL(SUM(CASE WHEN POSITION = 'FW' THEN 1 END), 0) FW
⓵ -> POSITION이 FW인 경우 1 반환, 아니면 NULL 반환 -> 반환값 SUM( ) 함수로 집계 -> 집계한 값이 NULL 인 경우 0 반환
NVL(SUM(CASE POSITION WHEN 'FW' THEN 1 END), 0) FW
⓶ -> POSITION이 FW라면 1 반환, 아니면 NULL 반환 -> 반환 값 SUM( ) 함수로 집계 -> 집계한 값이 NULL 인 경우 0 반환
NVL(SUM(CASE WHEN POSITION = 'FW' THEN 1 END), 0) FW
⓷ -> POSITION 값이 FW와 동일하다면 1 반환, 아니면 NULL 반환 -> 반환 값 SUM( ) 함수로 집계 -> 집계한 값이 NULL 인 경우 0 반환
NVL(SUM(CASE POSITION WHEN 'FW' THEN 1 ELSE 1 END), 0) FW
⓸ -> POSITION이 FW인 경우 1 반환, 아니면 1 반환 -> 반환 값 SUM( ) 함수로 집계
-> FW가 아닌 값과 FW인 값 모두 합해지므로 위 세개와 다른 값이 출력됨
19. 아래 SQL에 대한 설명으로 가장 적절한 것은? (단, 고객이름은 중복되지 않는다고 가정) |
고객 ( 고객번호, 고객이름, 주소, 전화번호 ) 상품 ( 상품번호, 상품이름, 무게, 가격 ) 주문 ( 고객번호, 상품번호, 수량, 날짜 ) [SQL] SELECT 고객이름, SUM(수량) FROM 고객, 상품, 주문 WHERE 고객.고객번호 = 주문.고객번호 AND 상품.상품번호 = 주문.상품번호 GROUP BY 고객.고객이름 HAVING MAX(수량) > 10; |
⓵ 고객번호가 10보다 큰 고객이름과 주문한 수량의 합을 구한다. ⓶ 수량이 10보다 큰 주문을 한 고객이름과 주문한 수량의 합을 구한다. ⓷ 열한 번 이상 상품을 주문한 고객이름과 주문한 수량의 합을 구한다. ⓸ 주문한 수량의 합이 10보다 큰 고객이름과 주문한 수량의 합을 구한다. |
FROM 고객, 상품, 주문
- 고객테이블, 상품테이블, 주문테이블의 데이터를 가져온다.
WHERE 고객.고객번호 = 주문.고객번호 AND 상품.상품번호 = 주문.상품번호
- 세 개의 테이블을 조인하기 위한 조건
GROUP BY 고객.고객이름
- 고객테이블의 고객이름으로 그룹화 한다.
HAVING MAX(수량) > 10
- 고객이름으로 그룹화 한 것을 기준으로 각 그룹화된 행의 최대 수량 값이 10 초과인 행을 가져온다.
SELECT 고객이름, SUM(수량)
- 위의 조건을 모두 만족하는 고객이름과, 수량의 합계를 구한다.
20. EMP 테이블에서 MGR의 값이 7698과 같으면 NULL을 표시하고, 같지 않으면 MGR을 표시하려고 할 때 빈칸 ㉠에 들어갈 함수는? |
SELECT ENAME, EMPNO, MGR, ㉠ (MGR, 7698) as NM FROM EMP; |
⓵ NULLIF ⓶ NVL ⓷ IFNULL ⓸ COALESCE |
- NULLIF(비교대상, 비교값) : 비교대상이 비교값과 같으면 NULL, 다르면 컬럼 값 반환
- NULLIF(addr, '서울') : addr의 값이 서울이면 NULL, 다르면 칼럼 값 반환
- NULLIF(addr, new_addr) : addr의 값과 new_addr의 값이 같으면 NULL, 다르면 addr의 값 반환
- NVL(표현식1, 표현식2) : 표현식1의 결과값이 NULL일 경우 표현식2의 값 출력 -> 오라클에서 쓰임
** 표현식1과 표현식2의 데이터 타입은 같아야 함 **
- NVL(deptno, 0) : deptno의 값이 NULL일 경우 0 반환
- IFNULL(컬럼명, 대체값) : 해당 컬럼 값이 NULL인 경우 대체값으로 반환
- IFNULL(addr, '주소 누락') : addr의 값이 NULL일 경우 '주소 누락' 값 반환, 아니면 그대로 addr 반환
- COALESCE(컬럼명, 대체값...) : NULL이 아닌 값을 반환
- COALESCE(email, phone, 'NONE')
: email 이 없으면(NULL이면) phone 컬럼값 사용, 그것도 없다면(phone도 NULL이면 'NONE' 출력
- COALESCE(email, phone, 'NONE')
'자격증' 카테고리의 다른 글
리눅스마스터 오답노트 3️⃣ (0) | 2024.09.04 |
---|---|
리눅스마스터 오답노트 2️⃣ (3) | 2024.09.03 |
리눅스마스터 오답노트 1️⃣ (1) | 2024.09.03 |
SQLD 기출문제 2과목(41~52) 오답정리 (1) | 2024.08.16 |
SQLD 기출문제 2과목(21~40) 오답정리 (4) | 2024.08.11 |