23.12.13
[오늘 할 일]
1. SQL코드카타 풀기(7문제)
2. SQLD 자격증 대비반 9주차 수강&정리
3. 아티클 스터디
4. 독서
[내용 정리]
1. SQL코드카타 풀기
-- 문자추출
SELECT SUBSTR(PRODUCT_CODE,0,2) AS category, COUNT(*) AS cout
FROM PRODUCT
GROUP BY SUBSTR(PRODUCT_CODE,0,2)
ORDER BY category;
-- LEFT(PRODUCT_CODE,2)
-- 날짜 포멧
SELECT TO_NUMBER(TO_CHAR(DATETIME, 'HH24')) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE TO_CHAR(DATETIME, 'HH24') BETWEEN 9 AND 19
GROUP BY TO_CHAR(DATETIME,'HH24')
ORDER BY TO_CHAR(DATETIME, 'HH24')
-- NULL인 경우 대체 NVL (MySql은 IFNULL OR CASE OR COALESCE)
SELECT PT_NAME, PT_NO, GEND_CD, AGE, NVL(TLNO,'NONE')
FROM PATIENT
WHERE GEND_CD = 'W' AND AGE <= 12
ORDER BY AGE DESC, PT_NAME ASC
-- 한 칼럼에 다양한 옵션이 들어가 있는데, 여러 옵션 중 특정 옵션에 해당하는 데이터 불러오기
SELECT C.CAR_TYPE AS "CARS", COUNT(*)
FROM CAR_RENTAL_COMPANY_CAR C
WHERE C.OPTIONS LIKE '%통풍시트%' OR
C.OPTIONS LIKE '%열선시트%' OR
C.OPTIONS LIKE '%가죽시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE ASC
+) ORACLE 날짜 포멧 정리
YYYY : 년 / MM : 월 / DD : 일 / HH24 : 24시간 / HH12 : 12시 / MI : 분 / SS : 초
2. SQLD 자격증 대비반 9주차 수강
<9주차 - 2/2>
[함수 - 단일행 함수]
- 데이터베이스 조작(변환, 계산 등) 과정에서 DBMS회사 별로 제공하는 내장함수로 단일행 함수와 다중행 함수로 분류할 수 있다. 기본적으로 함수는 값을 여러 개 입력받을 수 있지만 하나의 결과값을 출력한다.
1. 문자형 함수
- 문자를 입력하면 문자나 숫자 값을 반환해 주는 함수
1) LOWER(문자열) - 소문자 / UPPER(문자열) - 대문자 / CONCAT(문자열1, 문자열2) = || - 문자 합치기
2) ASCII(문자) - 아스키코드 번호로 바꿔줌
3) Oracle : CHR(ASCII번호) / SQL Server : CHAR(ASCII번호) - 아스키 번호를 문자로 바꿔주는 것.
4) Oracle : SUBSTR(문자열, 위치, 몇글자) / SQL Server : SUBSTRING( )
5) Oracle : LENGTH(문자열) SQL : LEN(문자열)
6) LTRIM or RTRIM(문자열1,'지정문자') -왼쪽 OR 오른쪽 지정문자가 나오면 해당 문자를 문자열에서 삭제
8) TRIM([LEADING | TRAILING | BOTH ] '지정문자' FROM 문자열) - 머리말 꼬리말 또는 양쪽에 있는 지정 문자를 제거
9) LPAD or RPAD(문자열1, n , 문자열2 - 문자열1을 n자리 만큼 늘리고 왼쪽 또는 오른쪽 빈 공간을 문자열2로 채우기
2. 숫자형 함수
1) ABS(숫자) - 절댓값
2) SIGN (숫자) - 부호
3) MOD (숫자1, 숫자2) - 나머지
4) Oracle : CEIL (숫자) / SQL Server : CEILING(숫자) - 올림
5) FLOOR (숫자) - 내림
6) ROUND (숫자, n) - 소수점 n자리에서 반올림
7) TRUNC (숫자, n) - 소수점 n자리에서 버림
8) SIN, COS TAN (숫자) - 삼각함수 연산
9) EXP(n) - e의 n제곱 반환
POWER(m,n) - 거듭 제곱
SQRT(n) - n의 제곱근
LOG(m,n) - 밑을 m으로 한 n의 로그값
LN(n) - n의 자연로그
3. 날짜형 함수
- 데이터베이스는 날짜를 저장할 때 내부적으로 숫자 형식으로 변환하여 저장하기에 숫자와 계산이 가능하다.
1) Oracle : SYSDATE / SQL Server : GETDATE() - 현재 날짜와 시간 출력
2) Oracle : EXTRACT(시간날짜단위, FROM 시간날짜) - 날짜 데이터에서 년/월/일 - 시간/분/초 데이터 출력
3) Oracle : TO_NUMBER(TO_CHAR(날짜정보, 데이트_포멧)) / SQL Server : YEAR( ), MONTH(), DAY()
4. 변환형 함수
특정 데이터 타입을 다른 형태로 출력하고 싶을 때 사용되는 함수. 2가지 유형이 있지만 최대한 명시적 데이터 유형 변환을 사용하는 것이 좋다.
1) 명시적 데이터 유형 변환 : 데이터 유형을 변환하도록 쿼라에 명시를 해주는 경우다.
2) 암시적인 변환 방식 : 서로 다른 두 타입을 자동으로 유형을 변환하여 계산하는 방식. 이는 결국 자동으로 변환해주지 않으면 문제가 발생.
5. NULL 관련 함수
- 정의되지 않은 값을 의미. 숫자 0이나 빈 공백 ' '과는 다른 값
* 어떠한 값과 NULL과의 연산은 항상 NULL 값이 나온다. 따라서 변환 해줘야 한다.
1) Oracle : NVL(NULL값, 'A') / SQL Server : ISNULL(NULL 판단 대상, 대체값)
2) NULL과 공집합
테이블에서 조건에 맞는 데이터가 한 건도 없는 경우 공집합이라고 부른다. 이때 공집합은 NULL과 다름. 따라서 공집한은 그룹함수(SUM 등)와 NVL함수를 같이 사용해서 처리해야 한다.
SELECT NVL(SUM(MGR), 9999) MGR FROM EMP WHERE ENAME='JSC';
-- MAX(MGR)의 값은 선택된 값이 없기에 NULL이 출력되고
-- 이를 NVL 함수에서 9999로 변환
4) NULLIF(EXPR1, EXPR2)
- 특정 값을 NULL로 대체하는 경우 사용.
- 두조건 EXPR1과 EXPR2를 비교하고 같다면 NULL을 리턴하고, 같지 않으면 EXPR1값 출력
5) COALESCE(EXPR1, EXPR2, EXPR3, ...)
- 여러 값 중에서 NULL이 아닌 첫 번째 값을 찾을 때 사용함.
6. CASE 표현
조건부로 값을 반환하거나 연산을 수행하는 데 사용하는 구문
1) CASE
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE result_else
END
2) DECODE 함수
- 조건을 평가하여 값을 반환하는 함수, 주로 간단한 조건과 대응하는 결과 값을 처리할 때 사용.
DECODE(expression, value1, result1,
value2, result2,
value3, result3,
...,
default_result)
/* value 값은 expression과 비교
result 값은 value 값과 대응하는 결과 값이나 표현식