SQL 이론] UNION_ALL

-- 코드를 입력하세요
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') as SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
    FROM (
        SELECT O.SALES_DATE, O.PRODUCT_ID, O.USER_ID, O.SALES_AMOUNT
        FROM ONLINE_SALE O
        WHERE O.SALES_DATE >= '2022-03-01' AND O.SALES_DATE <'2022-04-01'
        
        UNION ALL
        
        SELECT F.SALES_DATE, F.PRODUCT_ID, NULL as USER_ID, F.SALES_AMOUNT
        FROM OFFLINE_SALE F
        WHERE F.SALES_DATE >= '2022-03-01' AND F.SALES_DATE <'2022-04-01'
    ) AS S
    ORDER BY SALES_DATE, PRODUCT_ID, USER_ID

SQL 이론] ORDER BY, WHERE

 

정렬 X

SELECT * FROM TABLE1;

 

오름차순

SELECT * FROM TABLE1 ORDER BY COLUMN1 ASC;

 

오름차순 ASC 생략

SELECT * FROM TABLE1 ORDER BY COLUMN1;

 

내림차순

SELECT * FROM TABLE1 ORDER BY COLUMN1 DESC;

 

여러 컬럼 기준

SELECT * FROM TABLE1 ORDER BY COLUMN1 ASC, COLUMN2 ASC;

 

조건식 적용

SELECT * FROM TABLE1 WHERE CONDITION1 ORDER BY COLUMN1

 

컬럼 번호로 정렬

SELECT * FROM TABLE1 WHERE CONDITION1 ORDER BY 1 DESC, 2 ASC

 

Oracle 세팅_SQL Plus

기타 함수

IFNULL()

- 지정한 값이 NULL이면,
 지정한 다른 값으로 바꾼 결과 반환
SELECT IFNULL(NULL, 10);

>> 10
   
NULL()

- 두 값이 같으면 NULL 반환
SELECT NULLIF(10, 10);

>> NULL
   
COALESCE()

- 나열된 값 중에서 NULL이 아닌 첫 번째 값 반환
SELECT COALESCE(NULL, NULL, 10, 20)

>> 10
   
IF()

- 조건의 참/거짓에 따른 값 반환
SELECT IF(10>1, '참', '거짓');

>> 참

숫자 관련 함수

DATE_FORMAT(DATE_OF_BIRTH, "%Y-%m-%d")

 

FORMAT()

 

- 천 단위 콤마를 갖는 문자열 반환

SELECT FORMAT(112345.7890,2);


>> 2는 소수점 2자리까지를 의미

 

CEILING()

- 지정한 수보다 큰 가장 작은 정수 반환

SELECT CEILING(15.4);

 

ROUND()

- 지정한 위치에서 반올림한 수 반환

SELECT ROUND(15.649);

 

 

SELECT ROUND(15.649, 2);

 

TRUCATE()

- 지정한 위치의 수만 반환

SELECT TRUNCATE(1234.567, 2);

 

SELECT TRUNCATE(1234.567,1);

 

SELECT TRUNCATE(1234.567, 0);

 

SELECT TRUNCATE(1234.567, -1);

ABS()

- 절대값 반환
SELECT ABS(-30);
   
FLOOR()

- 지정한 수보다 작은 가장 큰 정수 반환
SELECT FLOOR(15.7);

>> 15
   
MOD()

- 나머지를 반환
SELECT MOD(5, 2);

>> 1
   
POW()

- 제곱한 수 반환
SELECT POW(4,3)

>> 64
   
SQRT()

- 제곱근 반환
SELECT SQRT(4);

>> 2
   
GREATEST()

- 나열된 값 중에서 가장 큰 값 반환
SELECT GREATEST( 10, 12, 11, 34, 21);

>> 34
   
LEAST()


- 위와 반대 개념
 

 

SQL 이론 날짜와 시간 관련 함수

 

ADDTIME()

: 지정한 시간 만큼 더해진 날짜와 시간 반환

SELECT ADDTIME('2022-12-25 09:00:00', '35:30:40');

>> 2022-12-26 20:30:40

 

SUBTIME()

: 지정한 시간 만큼 날짜와 시간 반환

 

ADDDATE()

: 지정한 수 만큼 날이 더해진 날짜와 시간 반환

SELECT ADDDATE('2022-12-25 09:00:00', INTERVAL 15 DAY);

>> 2022-01:09 09:00:00

 

SUBDATE()

: 문법은 위와 동일

 

CURDATE()

: 현재 날짜 반환

SELECT CURDATE();

>> 현재 날짜 YYYY-MM-DD

 

CURTIME()

: 현재 시간 반환

SELECT CURTIME()

>> 현재 시간 HH:MM:SS

 

NOW()

: 현재 날짜와 시간 반환

SELECT NOW();

>> YYYY-MM-DD HH:MM:SS

 

SYSDATE()

: 위와 동일

 

QUARTER()

: 지정한 날짜의 분기 반환

SELECT QUARTER(NOW());

 

>> 3

 

월, 일, 시간

SELECT MONTH(NOW());

SELECT DAY(NOW());

SELECT TIME(NOW());

 

DATEDIFF()

: 두 날짜와 시간의 일수 차이 반환

SELECT DATEDIFF('2023-12-25 00:00:00', 'NOW()');

>> 165

 

DAYOFWEEK()

: 지정한 날짜의 요일 반환

SELECT DAYOFWEEK(NOW());

>> (일요일:1 ~ 토요일 :7)

 

DATE_FORMAT()

: 날짜를 지정한 형태의 문자열로 반환

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d')


>> YYYY-MM-DD

SELECTDATE_FORMAT(NOW(), '%Y년%m월%d일')

 

 

문자열 관련 함수

REPEAT()

- 문자열을 지정한 횟수 만큼 반복한 문자열 반환

SELECT REPEAT('만세!', 3);  >> 만세!만세!만세!

SELECT emp_id, emp_name, dept_id, gender, salary
    FROM employee
    WHERE retire_data IS NULL;

 

 

SELECT emp_id, emp_name, dept_id, gender, REPEAT('▒', salary/250) AS salary
    FROM employee
    WHERE retire_data IS NULL;

 

REPLACE()
- 문자열의 특정 문자열을 다른
 문자열로 바꾼 문자열 반환
SELECT REPLACE('우리나라 대한민국', '  ', ' '); >> 우리나라대한민국

: 공백을 이용하면 특정 글자 삭제 가능
   
REVERSE()
- 문자열을 앞뒤로 뒤집은 문자열
  반환
SELECT REVERSE('쓰레기통'); >> 통기레쓰
   
SPACE()
- 지정한 길이 만큼을
 공백으로 채운 문자열 반환
SELECT CONCAT('', SPACE(10), ''); >> 너         나

문자열 관련 함수 

LPAD()
- 지정한 길이의 문자열이 되도록 지정한 문자를 채워 반환
SELECT LPAD('대한민국', 10, '*'); >> ******대한민국
   
LTRIM()
- 왼쪽에 있는 공백을 없앤 문자열 반환
SELECT CONCAT('[', LTRIM('   대한민국   '), ']'); >> [대한민국     ]
   
RTRIM()
- LTRIM()과 반대 기늠
 
   
TRIM()
- 양쪽에 있는 공백을 없앤 문자열 반환
SELECT CONCAT('[', TRIM('    대한민국    '), ']');  >> [대한민국]

 

문자열 관련 함수

RIGHT()

- 오른족부터 지정한 길이 만큼의 문자열 반환

SELECT RIGHT('가나다라마바사', 5 )>> 라마바사아

 

응용

SELECT emp_name, emp_id, dept_id, gender,
            CONCAT('xxx-xxxx-', RIGHT(phone, 4) ) AS phone
    FROM employee
    WHERE retire_date IS NULL;

 

INSTR()
- 문자열에서 지정한 문자열이 나타나는
 위치 반환, 없으면 0 반환
SELECT INSTR('우리나라 좋은 나라 대한민국', '나라'); >> 3 반환

SELECT INSTR('우리나라 좋은 나라 대한민국', '좋은'); >>  6

SELECT INSTR('우리나라 좋은 나라 대한민국', '나라',5); >> 9

 why? 뒤에 5는 5번째 위치부터 찾으라는 의미


   
LOCATE()
- 문자열에서 지정한 문자열이 나타나는 
 위치 반환, 없으면 0 반환
SELECT LOCATE('나라', '우리나라 대한민국'); >> 3 반환
   
LEFT()
- 왼쪽부터 지정한 길이 만큼의
 문자열 반환
SELECT LEFT('가나다라마바사아', '5') >> 가나다라마 반환
   
SUBSTR()
- 지정한 위치에서 지정한 길이 만큼의
 문자열 반환

같은 기능의 3가지 함수

SELECT
SUBSTR('아름다운 대한민국', 6, 2); -- 대한
SELECT SUBSTRING('아름다운 대한민국', 6, 2); -- 대한
SELECT MID('아름다운 대한민국', 6, 2); -- 대한
   
UPPER()
- 모든 문자를 대문자로 바꾼다

LOWER()는 반대 기능
SELECT UPPER('I have a Dream') >> I HAVE A DREAM;

 

문자열 관련 함수

 

LENGTH - 문자열 바이트 수 반환

SELECT vacation_id, emp_id, begin_date, reason,
                   LENGH(reason) As reason_len

    FROM vacation;

 

CHAR_LENGTH - 글자수 반환

SELECT vacaction_id, emp_id, begin_date, reason
    FROM vacation;

 

CONCAT - 연결해주기

SELECT CONCAT('ABC', 'DEF, 'HIF', 'KLMN');

 

응용

SELECT vacation_id, emp_id, begin_date, CONCAT(reason, '(', duration, '일간)')
            AS reason
    FROM vacation;

 

구분자를 넣어서 붙이기

SELECT CONCAT_WS( ',' , 'ABC', 'DEF' ,'HIJ',  'KLMN' );

 

응용

SELECT vacation_id, emp_id, CONCAT_WS( ', ' , begin_data, end_date. reason,
                duration) As info
    FROM vacation;

 

 

ELT() - 나열된 값 중에서 지정한 위치의 값 변환

SELECT emp_name, emp_id, gender, dept_id, hire_date, salary,
             ELT(NTILE(3) OVER(ORDER BY salary DESC), '상', '중', '하') AS grp
        FROM employee
        WHERE retire_date IS NULL AND salary IS NOT NULL;

 

FIELD

- 나열된 값 중에서 지정한 값이 있는 위치 반환, 없으면 0 반환

SELECT emp_name, emp_id, dept_id, hire_date, salary
            FROM employee
            WHERE dept_id IN ('MKT', 'SYS', 'HRD')
            ORDER BY FIELD(dept_id, 'MKT', 'HRD', 'SYS');

: 'MKT'는 1, 'HRD'는 2, 'SYS'는 3으로 간주

 

 

+ Recent posts