📕 2과목 - SQL 기본 및 활용
📌 1장 - SQL 기본
📍 부정연산자 ?
- 같지 않다
- !=, ^=, <>
- not
- null 과 비교할 때
- is null
- is not null
📍 SQL Server vs ORACLE ?
- ㉠ INSERT INTO 서비스 VALUES('001', '', '2015-11-11');
- ㉡ SELECT * FROM 서비스 WHERE 서비스명 = '';
- ㉢ SELECT * FROM 서비스 WHERE 서비스명 IS NULL;
- ㉣ SELECT * FROM 서비스 WHERE 서비스번호 = '001'; --> 결과 있음.
- ㉤ SELECT * FROM 서비스 WHERE 서비스번호 = '1'; ---> 결과 없음.
- SQL Server 에서는 ㉡
- ❗❗ SQL Server 에는 IS NULL 로 검색 불가능.
- ORACLE 에서는 ㉢ 로 조회.
- 서비스번호는 PK 에 VARCHAR2 라서 완벽하게 앞의 00까지도 같아야함.
- 만약, 서비스번호가 INTEGER 였다면 001 = 1 이였을 것임.
📍 38번 ?
-- Q.38
create table q38(
year INTEGER,
month INTEGER,
maechul INTEGER);
select * from q38;
insert into q38 values(2014, 01, 1000);
insert into q38 values(2014, 02, 2000);
insert into q38 values(2014, 03, 3000);
insert into q38 values(2014, 11, 4000);
insert into q38 values(2014, 12, 5000);
insert into q38 values(2015, 01, 6000);
insert into q38 values(2015, 02, 7000);
insert into q38 values(2015, 03, 8000);
insert into q38 values(2015, 11, 9000);
insert into q38 values(2015, 12, 10000);
insert into q38 values(999, 999, 999);
select
(select sum(maechul) from q38 where year between '2014' and '2015' and month between '03' and '12') as "1번",
(select sum(maechul) from q38 where year in('2014', '2015') and month in('11', '12', '03', '04', '05')) as "2번",
(select sum(maechul) from q38 where (year = '2014' or year = '2015') and (month between '01' and '03' or month between '11' and '12')) as "3번",
(select sum(maechul) from q38 where year = '2014' and month between '11' and '12' or year = '2015' and month between '01' and '03') as "4번"
from dual;
select * from q38 where year between '2014' and '2015' and month between '03' and '12' union all
select * from q38 where year = 999 union all
select * from q38 where year in('2014', '2015') and month in('11', '12', '03', '04', '05') union all
select * from q38 where year = 999 union all
select * from q38 where (year = '2014' or year = '2015') and (month between '01' and '03' or month between '11' and '12') union all
select * from q38 where year = 999 union all
select * from q38 where year = '2014' and month between '11' and '12' or year = '2015' and month between '01' and '03';

📍 39번 ? (https://kin.naver.com/qna/detail.naver?d1id=1&dirId=10205&docId=384919373&qb=c3FsZCAzOeuyiA==&enc=utf8§ion=kin.ext&rank=1&search_sort=0&spq=0)
TO_DATE / TO_CHAR 함수의 결과를 정확히 알면 당연한 것 입니다.
일단 답지에 1,2,3번 해설도 하루인 것 처럼 잘못 써있는데, 의미를 한달간이라고 정확히 알고 계시네요.
문제의 조건에서 svc_end_date는 date형 이라고 가정하고,
임의로 2015-01-10 09:00:00 정도의 date값이라고 가정 해 보세요.
3번의 '201501' = TO_CHAR(svc_end_date, 'yyyymm')에서,
TO_CHAR(svc_end_date, 'yyyymm')는 '201501'이 나오므로 3번 조건은 참이 됩니다.
4번의 TO_DATE('201501', 'yyyymm')은 월까지만 변환했으므로, 나머지 date자리는 최소값들로 채워집니다.
즉, 2015-01-01 00:00:00 이 되는 것 입니다.
그러면 최종적으로 2015-01-01 00:00:00 = 2015-01-10 09:00:00 비교가 되므로 거짓 조건이 됩니다.
- ❗❗ TO_DATE 에서는 없는 값은 최소값으로 채워짐. ❗❗
📍 함수 ?
- 내장함수
- 벤터에서 제공하는 함수
- 내장함수는 다시 " 함수의 입력행수에 따라 " 단일행, 다중행 함수로 나뉨.
- 단일행함수
- SELECT, WHERE, ORDER BY, UPDATE의 SET 절에 사용가능.
- 다중행함수
- 집계함수, 그룹함수, 윈도우함수
- 1:M 조인을 하는 경우, M쪽에서 출력된 행이 다중행이지만, 하나씩 단일행 함수의 입력값으로 사용될 수 있음.
- 단일행, 다중행 모두 여러 개의 인수가 입력되어도 단일 값만을 반환함.
- 단일행함수
- 사용자가 정의할 수 있는 함수

📍 41번 ?
- https://www.youtube.com/watch?v=0WKr2A3sDYs

- ❗❗ CHR(10) ::: 한줄띄기
- 한줄띄기 도 LENGTH 를 차지함.
- REPLACE('기존문자', '바꿀문자' [, 대체될 문자 default='']);
📍 날짜 연산 ?
- 1/24/60 = 1분

📍 오라클 CASE_EXPRESSION ?
- SEARCHED
- SELECT LOC, CASE WHEN LOC = 'NY' THEN 'EAST' ELSE 'ETC' END AS AREA FROM DEPT;
- SIMPLE
- SELECT LOC, CASE LOC WHEN 'NY' THEN 'EAST' ELSE 'ETC' END AS AREA FROM DEPT;
📍 45번 ?



- NULL 은 unknown value ---> 즉, 정의되지않은 값.
- NULL 은 " IS NULL " , " IS NOT NULL " 로 만 결과값(?)을 받을 수 있다고 할 수 있음.
- X = NULL , X != NULL 과 같은 조건문은 절대 TRUE 값이 될 수 없나봄.
📍 제수가 0 입니다 ?
- SELECT 100/0 AS "분모가 0" FROM DUAL; ---> ❗❗ 에러발생 ❗❗
- SELECT 0/100 AS "분자가 0" FROM DUAL;
- SELECT 0/0 AS "둘다 0" FROM DUAL; ---> ❗❗ 에러발생 ❗❗
- 분자가 0 인 경우 까지는 가능.
- 분모가 0 인 경우는 무조건 에러 ❗❗


📍 COALESCE ?
- NULL을 만나면 그 다음 값으로 넘어가는 함수.
- 그렇게 계속 넘어가다가, NULL이 아니게 되는 최초의 값을 결과값으로 보여줌.


📍 NVL, NULLIF, NVL2 ?
- ORACLE ::: NVL(표현1, 표현2)
- SQL Server ::: ISNULL(표현1, 표현2)
- 표현1이 NULL 이면 표현2 반환.
- 표현1이 NULL 이 아니면 표현1 반환.
- NULLIF(표현1, 표현2)
- 표현1 = 표현2 이면 NULL 반환.
- 표현1 != 표현2 이면 표현1 반환.
- 오라클 ::: NVL2(표현1, 표현2, 표현3)
- 표현1이 NULL 이면 표현3, NULL이 아니면 표현2 반환.

'나를 기록하기 > [자격증] SQLD' 카테고리의 다른 글
[SQLD] 2과목 2장 - SQL 활용(Q.65~91) (0) | 2022.05.22 |
---|---|
[SQLD] 2과목 1장 - SQL 기본(Q.52~63) (0) | 2022.05.21 |
[SQLD] 2과목 1장 - SQL 기본(Q.22~35) (0) | 2022.05.17 |
[SQLD] 2과목 1장 - SQL 기본(Q.1~21) (0) | 2022.05.16 |
[SQLD ] 1과목 1장 - 데이터 모델링의 이해 (0) | 2022.03.26 |