Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

쟝이의 세상

SQLD 기출문제 2과목(1~20) 오답정리 본문

자격증

SQLD 기출문제 2과목(1~20) 오답정리

zyangee 2024. 8. 8. 02:53
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

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('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_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_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')

 

  1. 2023.01.10 10 의 문자열을 날짜 형식으로 변환 -> "2023.01.10 10:00:00"
  2. 1/24/(60/10)     **일 / 시간 / 분 / 초**
    -> 60분을 10분으로 나누면 6분 = 1/24/6
    -> 1일을 24시간으로 나누면 1시간, 1시간을 6분으로 나누면 10분 = "10분"
  3. 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값 반환
  • DECODE(컬럼명, 비교 대상, A, B)
    • 지정한 컬럼의 값이 비교대상과 같다면 A 출력, 같지 않다면 B 출력
    • if ~ else if ~ else 와 같다고 볼 수 있다 
      • decode(deptno, 10, '경영', '다른부서')
        : deptno 가 10이면 '경영' 값 반환, 아니면 '다른부서' 값 반환
      • decode(deptno, 10, '경영', 20, '회계', '다른부서')
        : deptno 가 10이면 '경영' 값 반환, 20이면 '회계' 값 반환, 둘 다 아니라면 '다른부서' 값 반환

⓵ 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' 출력