Skip to content

Latest commit

ย 

History

History
356 lines (249 loc) ยท 7.12 KB

Oracle_SQL_#2.md

File metadata and controls

356 lines (249 loc) ยท 7.12 KB

Oracle - SQL #2


TO_DATE

  • ORACLE์—์„œ DATE ํƒ€์ž…์˜ ์ปฌ๋Ÿผ์— ํŠน์ • ๋‚ ์งœ๊ฐ’์„ ๋„ฃ์–ด์ค˜์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” TO_DATE๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  • TO_DATE('๋‚ ์งœ๊ฐ’', 'FORMAT');


INSERT INTO TEST(DATE_COLUMN) 
VALUES(TO_DATE('2019/10/15 21:31:10', 'YYYY/MM/DD HH24:MI:SS'));

---

SELECT TO_DATE(DATE_COLUMN,'HH24:MI:SS') 
FROM TB1;




TO_CHAR

  • ORACLE์—์„œ TO_CHAR๋Š” ์ˆซ์ž๋‚˜ ๋‚ ์งœ๋ฅผ ์›ํ•˜๋Š” ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
YYYY 4์ž๋ฆฌ ๋…„๋„๋ฅผ ํ‘œ์‹œ
MM ์›”์„ 2์ž๋ฆฌ ์ˆซ์ž๋กœ ํ‘œ์‹œ, ์˜ˆ: 01, 12
DD ์ผ์„ 2์ž๋ฆฌ ์ˆซ์ž๋กœ ํ‘œ์‹œ
HH24 24์‹œ๊ฐ„ ํ˜•์‹์˜ ์‹œ๊ฐ„์„ ํ‘œ์‹œ
MI ๋ถ„์„ ํ‘œ์‹œ
SS ์ดˆ๋ฅผ ํ‘œ์‹œ

TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'); -- 2023-10-03 15:45:30

--- ์ˆซ์ž๋ฅผ ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ
TO_CHAR(๊ฐ’);

--- ๊ฐ’์ด ์˜ค์ „/์˜คํ›„์ธ์ง€ ํ‘œ์‹œ
TO_CHAR(SYSDATE, 'HH:MI AM');
TO_CHAR(SYSDATE, 'HH:MI PM');

--- ๊ฐ’์ด ๋ฌด์Šจ ์š”์ผ์ธ์ง€
TO_CHAR(SYSDATE, 'DAY'); -- WEDNESDAY

--- ๊ฐ’์„ ๋…„์›”์ผ, ์š”์ผ๊นŒ์ง€ ํ‘œ์‹œ
TO_CHAR(SYSDATE, 'DL');

--- 999๋ฅผ ์ž…๋ ฅํ•œ ์ž๋ฆฌ์ˆ˜๊นŒ์ง€ ํ‘œ์‹œ
TO_CHAR(๊ฐ’, '999')

--- ๋”ฐ์˜ดํ‘œ(,) ์†Œ์ˆ˜์  ํ‘œ์‹œ
TO_CHAR(๊ฐ’, '999,999');
TO_CHAR(๊ฐ’, '999.99');

--- S๋Œ€์‹  ์–‘์ˆ˜๋ฉด +, ์Œ์ˆ˜๋ฉด -๊ฐ€ ๋‚˜์˜ด
TO_CHAR(๊ฐ’, 'S999');

SELECT TO_CHAR(order_date, 'YYYY-MM-DD HH24:MI:SS') AS formatted_date
FROM orders;

---

SELECT TO_CHAR(price, '999,999.99') AS formatted_price
FROM products;




TO_CHAR vs TO_DATE


TO_DATE vs TO_CHAR
TO_DATE๋Š” ๋ฌธ์ž์—ด์„ ๋‚ ์งœ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜.
TO_CHAR๋Š” ๋‚ ์งœ๋‚˜ ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜.




DECODE

  • if - else๋ž‘ ๋น„์Šท
SELECT DECODE(column_name, '์กฐ๊ฑด 1', '์กฐ๊ฑด 1 ์ผ๋•Œ ๊ฐ’') AS decode_result
FROM TB1;


SELECT DECODE(
    column_name,
    '์กฐ๊ฑด 1', '์กฐ๊ฑด 1 ์ผ๋•Œ ๊ฐ’',
    '์กฐ๊ฑด 2', '์กฐ๊ฑด 2 ์ผ๋•Œ ๊ฐ’', 
    '์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ’์ด ์—†์„ ๋•Œ'
) AS decode_result
FROM TB1;


SELECT DECODE(
    job_id, 
    'MANAGER', '๊ด€๋ฆฌ์ž', 
    'EMPLOYEE', '์ง์›', 
    '์•Œ ์ˆ˜ ์—†์Œ'
) AS job_description
FROM employees;




CASE WHEN THEN

  • ์กฐ๊ฑด์— ๋งž์„ ๊ฒฝ์šฐ์—๋Š” THEN์œผ๋กœ ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” ELSE๋กœ ์ถœ๋ ฅ

  • ELSE๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” ์กฐ๊ฑด์— ๋งž์ง€ ์•Š๋Š” ๊ฐ’๋“ค์ด ๋ชจ๋‘ NULL๋กœ ์ถœ๋ ฅ

SELECT 
    CASE 
        WHEN TEXT = 'A' THEN 'A์ž…๋‹ˆ๋‹ค'
        WHEN TEXT = 'B' THEN 'B์ž…๋‹ˆ๋‹ค'
        WHEN TEXT = 'C' THEN 'C์ž…๋‹ˆ๋‹ค'
        ELSE 'A,B,C๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค'
    END AS CASE_WHEN_RESULT
FROM CASEWHENTB;




NVL, NVL2

  • NVL ํ•จ์ˆ˜: ์ฒซ ๋ฒˆ์งธ ์ธ์ž๊ฐ€ NULL์ธ ๊ฒฝ์šฐ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋ฅผ ๋ฐ˜ํ™˜.

  • NVL2 ํ•จ์ˆ˜: ์ฒซ ๋ฒˆ์งธ ์ธ์ž๊ฐ€ NULL์ธ ๊ฒฝ์šฐ ์„ธ ๋ฒˆ์งธ ์ธ์ž๋ฅผ ๋ฐ˜ํ™˜.

SELECT NVL(employee_name, 'No Name') AS employee_name
FROM employees;

---

SELECT NVL2(email, 'Has Email', 'No Email') AS email_status
FROM employees;




BETWEEN A AND B

  • ์˜ค๋ผํด์—์„œ BETWEEN A AND B๋Š” ํŠน์ • ๋ฒ”์œ„์˜ ๋‚ ์งœ๋ฅผ ์กฐ๊ฑด์œผ๋กœ ์กฐํšŒํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ.

  • WHERE ์ ˆ์—์„œ ์ปฌ๋Ÿผ๋ช… BETWEEN A AND B ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ.

SELECT DATECOL
FROM (SELECT TO_DATE('20190713') AS DATECOL FROM DUAL
      UNION ALL 
      SELECT TO_DATE('20190113') AS DATECOL FROM DUAL
      UNION ALL
      SELECT TO_DATE('20201210') AS DATECOL FROM DUAL)
WHERE DATE1 BETWEEN '20190101' AND '20191231'




EXISTS, NOT EXISTS

  • EXISTS๋Š” ์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ ์žˆ์„๋•Œ๋งŒ ์กฐํšŒ.

  • NOT EXISTS๋Š” ์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ ์—†์„๋•Œ๋งŒ ์กฐํšŒ.

SELECT * 
FROM EMP
WHERE EXISTS (
    SELECT EMPNO 
    FROM EMP 
    WHERE EMPNO = '7369'
)

---

SELECT * 
FROM EMP
WHERE NOT EXISTS (
    SELECT EMPNO 
    FROM EMP 
    WHERE EMPNO = '73691'
)




CONCAT, ||

  • ์˜ค๋ผํด์—์„œ CONCAT, ||๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ž์—ด์„ ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค.

  • CONCAT(๊ฐ’, ๊ฐ’)

  • 2๊ฐœ ์ด์ƒ์„ ํ•ฉ์น  ๊ฒฝ์šฐ์—๋Š” ||๋ฅผ ์‚ฌ์šฉ โ†’ ๊ฐ’ || ๊ฐ’ || ๊ฐ’

SELECT 
    CONCAT('A', 'B') CONCAT_ATTACH1,
    CONCAT(1, 2) CONCAT_ATTACH2,
    'A' || 'B' || 'C' ATTACH3,
    1 || 2 || 3 || 4 ATTACH4
FROM DUAL

---

์ถœ๋ ฅ ๊ฐ’:
AB
12
ABC
1234




WITH

  • ์˜ค๋ผํด์—์„œ WITH๋Š” ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ

    • WITH ํ…Œ์ด๋ธ”๋ช… AS ( ํ…Œ์ด๋ธ”๋ช…์— ๋“ค์–ด๊ฐˆ ๊ฐ’ SQL )
  • WITH ์•ˆ์—์„œ๋Š” UNION, UNION ALL์„ ์‚ฌ์šฉํ•ด ํƒ€ WITH ํ…Œ์ด๋ธ”๊ณผ๋„ ํ•ฉ์น˜๊ธฐ ๊ฐ€๋Šฅ.

WITH TBL1 AS 
            (
              SELECT 'A' AS COL1 FROM DUAL
              UNION ALL SELECT 'B' FROM DUAL
              UNION ALL SELECT 'C' FROM DUAL
              UNION ALL SELECT 'D' FROM DUAL
            ),
     TBL2 AS 
            (
              SELECT 'E' AS COL1 FROM DUAL
              UNION ALL
              SELECT COL1 FROM TBL1 -- ํƒ€ WITH์™€ ํ•ฉ์น˜๊ธฐ ๊ฐ€๋Šฅ
            )

SELECT * FROM TBL2;

---

์ถœ๋ ฅ ๊ฐ’:

|COL1|
----
|E|
|A|
|B|
|C|
|D|




ROLLUP, CUBE, GROUPING

  • ์ง‘๊ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

ROLLUP

SELECT department_id, job_id, SUM(salary) AS total_salary
FROM employees
GROUP BY ROLLUP(department_id, job_id);

---

DEPARTMENT_ID | JOB_ID | TOTAL_SALARY
------------------------------
10            | SALES  | 12000
10            | HR     | 6000
10            | NULL   | 18000  -- 10๋ฒˆ ๋ถ€์„œ์˜ ์ด๊ธ‰์—ฌ
20            | HR     | 7000
20            | NULL   | 7000   -- 20๋ฒˆ ๋ถ€์„œ์˜ ์ด๊ธ‰์—ฌ
NULL          | NULL   | 25000  -- ๋ชจ๋“  ๋ถ€์„œ์˜ ์ด๊ธ‰์—ฌ

CUBE

SELECT department_id, job_id, SUM(salary) AS total_salary
FROM employees
GROUP BY CUBE(department_id, job_id);

---

DEPARTMENT_ID | JOB_ID | TOTAL_SALARY
------------------------------
10            | SALES  | 12000
10            | HR     | 6000
20            | HR     | 7000
10            | NULL   | 18000   -- 10๋ฒˆ ๋ถ€์„œ์˜ ์ด๊ธ‰์—ฌ
20            | NULL   | 7000    -- 20๋ฒˆ ๋ถ€์„œ์˜ ์ด๊ธ‰์—ฌ
NULL          | HR     | 13000   -- HR ์ง๋ฌด์˜ ์ด๊ธ‰์—ฌ
NULL          | SALES  | 12000   -- SALES ์ง๋ฌด์˜ ์ด๊ธ‰์—ฌ
NULL          | NULL   | 25000   -- ๋ชจ๋“  ๋ถ€์„œ์™€ ์ง๋ฌด์˜ ์ด๊ธ‰์—ฌ

GROUPING

GROUPING ํ•จ์ˆ˜๋Š” CUBE์™€ ROLLUP ์—ฐ์‚ฐ์—์„œ ์‚ฌ์šฉ๋  ๋•Œ,
ํ•ด๋‹น ์ปฌ๋Ÿผ์ด ์ง‘๊ณ„์— ํฌํ•จ๋˜์ง€ ์•Š์•˜์„ ๋•Œ 1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์›๋ž˜ ๊ฐ’์ด ์‚ฌ์šฉ๋˜์—ˆ์„ ๋•Œ๋Š” 0์„ ๋ฐ˜ํ™˜

---

SELECT department_id, job_id, SUM(salary) AS total_salary,
       GROUPING(department_id) AS grp_department,
       GROUPING(job_id) AS grp_job
FROM employees
GROUP BY CUBE(department_id, job_id);

---

DEPARTMENT_ID | JOB_ID | TOTAL_SALARY | GRP_DEPARTMENT | GRP_JOB
--------------------------------------------------------------
10            | SALES  | 12000        | 0              | 0
10            | HR     | 6000         | 0              | 0
20            | HR     | 7000         | 0              | 0
10            | NULL   | 18000        | 0              | 1
20            | NULL   | 7000         | 0              | 1
NULL          | HR     | 13000        | 1              | 0
NULL          | SALES  | 12000        | 1              | 0
NULL          | NULL   | 25000        | 1              | 1