๐ SQLD 45 ~ 49ํ ๊ธฐ์ถ๋ฌธ์ ๋จ๋ตํ ๋ชจ์
๋ฌธ์ 1.
45ํ ๋จ๋ตํ 1 (1๊ณผ๋ชฉ). ์ ๋ฌด์์ ํ์๋ก ํ๋ ์ธ์คํด์ค๋ก ๊ด๋ฆฌํ๊ณ ์ ํ๋ ์๋ฏธ์ ๋ ์ด์ ๋ถ๋ฆฌ ๋์ง ์๋ ์ต์์ ๋ฐ์ดํฐ ๋จ์๋?
(๋ ธ๋ญ์ด 1๊ณผ๋ชฉ 14๋ฒ)
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 2.
45ํ ๋จ๋ตํ 2 (1๊ณผ๋ชฉ). ๊ธฐ๋ณธํค๊ฐ ์๋ ๋ชจ๋ ์์ฑ์ด ๊ธฐ๋ณธํค์ ์์ ํจ์ ์ข ์๋ ์ํ๋ฅผ ๋ฌด์์ด๋ผ ํ๋๊ฐ?
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 3.
45ํ ๋จ๋ตํ 3 (2๊ณผ๋ชฉ). ์๋ SQL1 ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก SQL2 ๋น์นธ์ ์์ฑํ์์ค.
[SQL1]
SELECT*FROM A, B;
[SQL2]
SELECT*FROM A ( ) B;
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 4.
45ํ ๋จ๋ตํ 4 (2๊ณผ๋ชฉ). ์๋์ ๊ณ์ธตํ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์์ C3์ 2๋ฒ์งธ ๊ฐ์ ์์ฑํ์์ค.
[SQLD44]
C1 C2 C3
------------
1 NULL A
2 1 B
3 1 C
4 2 D
[SQL]
SELECT C1, C2, C3
FROM SQLD44
CONNECT BY PRIOR C1 = C2
START WITH C1 = 1
ORDER SIBLINGS BY C1 DESC;
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 5.
45ํ ๋จ๋ตํ 5 (2๊ณผ๋ชฉ). ์๋์ ๊ณ์ธตํ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ์์ค.
[SQLD45]
C1 C2 C3
--------------
1 KING
2 1 JOHN
3 2 SCOTT
[SQL]
SELECT C3 FROM SQLD45
WHERE C1 <> 2
CONNECT BY C1 = PRIOR C2
START WITH C1 = 2;
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 6.
45ํ ๋จ๋ตํ 6 (2๊ณผ๋ชฉ). GRANT, REVOKE ๋ฑ์ SQL์ ๋ฌด์์ด๋ผ ํ๋๊ฐ?
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 7.
45ํ ๋จ๋ตํ 7 (2๊ณผ๋ชฉ). ์๋์ SQL๊ฒฐ๊ณผ์ ๋น์นธ์ ์์ฑํ์์ค.
[SQLD45]
COL1 COL2 COL3
--------------------
A ๊ฐ 10
A ๊ฐ 20
A ๋ค 25
B ๊ฐ 10
B ๋ 30
B ๋ 20
B ๋ 60
C ๋ผ 30
[SQL]
SELECT NTILE_3, COUNT(*) AS ROWCNT
FROM (
SELECT COL1, COL2, COL3, NTILE(3) OVER(ORDER BY COL3) AS NTILE_3
FROM SQLD45
)
GROUP BY NTILE_3;
[RESULT]
NTILE_3 ROWCNT
-----------------
1 ( ใฑ )
2 3
3 ( ใด )
( ใฑ )
( ใด )
๋ฌธ์ 8.
45ํ ๋จ๋ตํ 8 (2๊ณผ๋ชฉ). ์๋ SQL์ ๋น์นธ( ? ) ์ ์์ฑํ์์ค.
[SQLD45]
V1 N1
----------------
A 100
B 150
C 1400
D 450
E 50
[SQL]
SELECT V1, N1,
COUNT(N1) OVER
(ORDER BY N1 ( ? )
BETWEEN 0 PRECEDING
AND
50 FOLLOWING) AS CNT
FROM SQLD45;
โ๏ธ ์ ๋ตํ์ธ
๋ฌธ์ 9.
45ํ ๋จ๋ตํ 9 (2๊ณผ๋ชฉ). ์๋์ SQL๊ฒฐ๊ณผ๋ฅผ ์ ์ผ์์ค.
[SQLD45]
N1 ID N2
--------------
200 A T1
250 B T2
300 NULL T3
[SQL]
SELECT COUNT(*) FROM SQLD45
WHERE N1 >= 200 OR N2 IS NULL AND ID = 'B';
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 10.
45ํ ๋จ๋ตํ 10 (2๊ณผ๋ชฉ). ์๋์ SQL๊ฒฐ๊ณผ๋ฅผ ์ ์ผ์์ค.
[SQLD45]
N1 V1
--------
1 SMITH
2 JOHN
3 ALX
4 CLARE
5 BLX
[SQL]
SELECT COUNT(*)
FROM SQLD45
WHERE V1 LIKE '_L%';
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 11.
46ํ ๋จ๋ตํ 1 (1๊ณผ๋ชฉ). ์์ฑ์ด ๊ฐ์ง ์ ์๋ ๊ฐ์ ๋ฒ์๋ฅผ ๋ฌด์์ด๋ผ ํ๋์ง ์์ฑํ์์ค.
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 12.
46ํ ๋จ๋ตํ 2 (2๊ณผ๋ชฉ). ์๋์ ๋น์นธ( ? )์ ์๋ง์ ๊ฒ์ ์์ฑํ์์ค.
์ฃผ์๋ณ์์ 5๊ฐ์ง ํน์ง์ค ํ๋์ธ ( ? )์
ํ๋์ ํค๋ก ํน์ ํ์ ๋ฐ๋ก ์ฐพ์๋ผ์ ์๋ ๊ณ ์ ํ ๋ฐ์ดํฐ ์์ฑ์ ๋งํ๋ค.
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 13.
46ํ ๋จ๋ตํ 3 (2๊ณผ๋ชฉ). ์๋์ SQL๊ฒฐ๊ณผ๋ฅผ ์ ์ผ์์ค.
[TAB1]
COL1
------
4
8
4
8
NULL
NULL
[SQL]
SELECT AVG(COL1) - AVG(NVL(COL1, 0)) FROM TAB1;
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 14-1.
46ํ ๋จ๋ตํ 4 (2๊ณผ๋ชฉ). ์ ๊ท ์ฌ์์ ๊ฒฝ์ฐ ์ผ์์ ์ผ๋ก ๋ถ์์ ์ํด ์์ง ์๋ค๊ณ ๊ฐ์ ํ๊ณ DEPT์ EMP๋ฅผ ์กฐ์ธํ๋ ๋ถ์๊ฐ ์๋ ์ฌ์์ ์ถ๋ ฅํ๋๋ก ํ ๋, ์๋ SQL๋ฌธ์ฅ์ ( ? )์์ ๋ค์ด๊ฐ ๋ด์ฉ์ ์์ฑํ์์ค.
[SQL]
SELECT E.ENAME
FROM DEPT D ( ? ) EMP E
ON D.DEPTNO = E.DEPTNO
WHERE E.DEPTNO IS NULL;
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 14-2. ์์ ๊ฐ์ ์ ํ์ ( ๋ ธ๋ญ์ด 2๊ณผ๋ชฉ 75๋ฒ ๋ฌธ์ )
- ์ ๊ท ๋ถ์์ ๊ฒฝ์ฐ ์ผ์์ ์ผ๋ก ์ฌ์์ด ์๋ ๊ฒฝ์ฐ๋ ์๋ค๊ณ ๊ฐ์ ํ๊ณ DEPT์ EMP๋ฅผ ์กฐ์ธํ๋ ์ฌ์์ด ์๋ ๋ถ์ ์ ๋ณด๋ ๊ฐ์ด ์ถ๋ ฅํ๋๋ก ํ ๋, ์๋ SQL๋ฌธ์ฅ์ ( ? ) ์์ ๋ค์ด๊ฐ ๋ด์ฉ์ ์์ฑํ์์ค.
[SQL]
SELECT E.ENAME, D.DEPTNO, D.DNAME
FROM DEPT D ( ? ) EMP E
ON D.DEPTNO = E.DEPTNO;
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 14-3. OUTER JOIN ๋ฌธ์
- ๋ค์์ Oracle ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉํ๋ OUTER JOIN์ ์์ ์ด๋ค. ๋น์นธ( ? )์ ์ฑ์ Oracle์ OUTER JOIN์ ํ์ค ANSI SQL๋ก ๋ณ๊ฒฝํ์์ค.
[Oracle OUTER JOIN]
SELECT * FROM EMP, DEPT
WHERE EMP.DEPTNO(+) = DEPT.DEPTNO;
[ANSI JOIN]
SELECT * FROM EMP ( ? ) DEPT
ON (EMP.DEPTNO = DEPT.DEPTNO);
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 15.
46ํ ๋จ๋ตํ 5 (2๊ณผ๋ชฉ). ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์กฐํํ๊ธฐ ์ํ SQL๋ฌธ์ ๋น์นธ ( ? ) ์ ์์ฑํ์์ค.
[TAB1]
JOB
-----
10
20
30
[TAB2]
GRADE
-----
50
60
70
[RESULT]
GRADE JOB SUM(GRADE)
--------------------------
50 10 50
50 20 50
50 30 50
50 150
60 10 60
60 20 60
60 30 60
60 180
70 10 70
70 20 70
70 30 70
70 210
[SQL]
SELECT B.GRADE, A.JOB, SUM(B.GRADE)
FROM TAB1 A, TAB2 B GROUP BY ( );
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 16.
47ํ ๋จ๋ตํ 1 (1๊ณผ๋ชฉ).
์ฃผ๋ฌธ๋ฒํธ+์ํ๋ฒํธ PK, ์ํ๋ช
์ปฌ๋ผ, ์ํ๋ช
์ด ์ฃผ์๋ณ์์ ํ๋์ ์ข
์์ ์ธ ์ํ
์ด ์ํ๋ ์ด๋ค ์ ๊ทํ์ ๋ง์กฑํ์ง ์๋๊ฐ?
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 17.
47ํ ๋จ๋ตํ 2 (1๊ณผ๋ชฉ). ์๋์ ์ค๋ช ์ ํด๋นํ๋ ์คํค๋ง๋ฅผ ์ ์ผ์์ค.
๋ทฐ ๋จ๊ณ ์ฌ๋ฌ ๊ฐ์ ์ฌ์ฉ์ ๊ด์ ์ผ๋ก ๊ตฌ์ฑ ๋์ด ์์ผ๋ฉฐ,
๊ฐ ๊ฐ์ธ์ ์
์ฅ์์ ํ์๋ก ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋
ผ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ ์ํ ๊ฒ
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 18.
47ํ ๋จ๋ตํ 3 (2๊ณผ๋ชฉ). USER๋ฅผ ์ญ์ ํ ๋ USER ์ ์ํ ๋ชจ๋ OBJECT๋ฅผ ๊ฐ์ด ์ญ์ ํ๋ ๋ช ๋ น์ด๋ฅผ ์์ฑํ์์ค.
[SQL]
ALTER DROP USER user_name ( ? )
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 19.
47ํ ๋จ๋ตํ 4 (2๊ณผ๋ชฉ). ์๋์ SQL์ ์์ฑํ์์ค.
[TAB1]
COL1
------
1000
1000
1000
3000
3000
4000
9999
9999
[RESULT]
COL1
----
3000
9999
[SQL]
SELECT COL1 FROM TAB1
( ? ) COL1 HAVING COUNT(*) = 2
ORDER BY (CASE WHEN COL1 = 1000 THEN 0 ELSE COL1 END);
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 20.
47ํ ๋จ๋ตํ 5 (2๊ณผ๋ชฉ). ์๋์ SQL์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ผ์์ค.
[TAB1]
COL1 COL2 COL3 COL4
---------------------------
1 2 200 20
2 3 240 10
3 4 100 20
4 5 230 20
5 6 300 20
6 7 400 10
[SQL]
SELECT COL2, COL1
FROM (SELECT ROW_NUMBER()
OVER(PARTITION BY COL4
ORDER BY COL3 DESC) RN,
COL1, COL2 FROM TAB1
WHERE COL1 <> 5 AND COL4 > 10)
WHERE RN = 1;
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 21.
47ํ ๋จ๋ตํ 6 (2๊ณผ๋ชฉ). ์๋์ ๊ณ์ธตํ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ์์ค.
[TAB1]
COL1 COL2
----------
1 NULL
2 NULL
3 1
4 1
5 2
6 2
7 3
8 4
9 5
[SQL]
SELECT COUNT(*)
FROM TAB1
WHERE COL1 <> 4
START WITH COL1= 1
CONNECT BY PRIOR COL1 = COL2;
โ
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 22.
48ํ ๋จ๋ตํ 1 (2๊ณผ๋ชฉ). ์๋ T1 ํ ์ด๋ธ์ SQL์คํ ํ ๊ฒฐ๊ด๊ฐ์ ์์ฑํ์์ค.
[T1]
COL1 COL2 COL3
--------------------
10 NULL 10
NULL 50 10
0 10 10
[SQL]
ใฑ. SELECT SUM(col2) FROM T1;
ใด. SELECT SUM(col2) FROM T1 WHERE col1 > 0;
ใท. SELECT SUM(col2) FROM T1 WHERE col1 IS NOT NULL;
ใน. SELECT SUM(col2) FROM T1 WHERE col1 IS NULL;
( ใฑ )
( ใด )
( ใท )
( ใน )
๋ฌธ์ 23.
48ํ ๋จ๋ตํ 2 (2๊ณผ๋ชฉ). ORDER BY ํ ๊ฒฐ๊ณผ๋ก 3๋ฒ์งธ ์ค๋ ๊ฐ์ ์์ฑํ์์ค.
[TAB1]
ID
----
1
2
3
4
[SQL]
SELECT ID FROM TAB1
ORDER BY (CASE WHEN ID IN(1, 3) THEN ID*3 ELSE ID END) DESC;
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 24.
48ํ ๋จ๋ตํ 3 (2๊ณผ๋ชฉ). ์๋์ SQL๋ฌธ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ์์ค.
[TAB1]
COL1 COL2
-------------
1 1
2
3 1
4 1
5 2
6 2
7 3
8 4
[SQL]
SELECT COUNT(*) FROM TAB1
WHERE COL1 <> 4
START WITH COL1 = 2
CONNECT BY PRIOR COL1 = COL2;
โ๏ธ
๋ฌธ์ 25.
48ํ ๋จ๋ตํ 4 (2๊ณผ๋ชฉ). ์ฃผ์ด์ง ํ ์ด๋ธ์ ๋ํด์ ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก SQL๋น์นธ( ? )์ ์์ฑํ์์ค.
[EMPLOYEES]
EMPLOYEE_ID DEPARTMENT_ID LAST_NAME SALARY
------------------------------------------------
107 60 Lorentz 4200.00
106 60 Pataballa 4800.00
105 60 Austin 4800.00
104 60 Ernst 6000.00
103 60 Hunold 9000.00
102 90 De Haan 17000.00
101 90 Kochhar 17000.00
100 90 King 24000.00
109 100 Faviet 9000.00
108 100 Greenberg 12000.00
201 200 ALEX 8000
202 200 SMITH 7000
[๊ฒฐ๊ณผ]
EMPLOYEE_ID DEPARTMENT_ID LAST_NAME SALARY BEFORE_SALARY
------------------------------------------------------------
107 60 Lorentz 4200.00
106 60 Pataballa 4800.00
105 60 Austin 4800.00 4200
104 60 Ernst 6000.00 4800
103 60 Hunold 9000.00 4800
102 90 De Haan 17000.00
101 90 Kochhar 17000.00
100 90 King 24000.00 17000
109 100 Faviet 9000.00
108 100 Greenberg 12000.00
[SQL]
SELECT EMPLOYEE_ID,
DEPARTMENT_ID,
LAST_NAME,
SALARY,
( ? )(SALARY, 2)
OVER(PARTITION BY DEPARTMENT_ID ORDER BY SALARY)
AS BEFORE_SALARY
FROM EMPLOYEES
WHERE EMPLOYEE_ID < 110;
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 26.
48ํ ๋จ๋ตํ 5 (2๊ณผ๋ชฉ). Oracle ์์ USER1 ์๊ฒ STUDENT_T ํ ์ด๋ธ์ INSERT ๊ถํ์ ๋ถ์ฌํ ๋ ๋ช ๋ น์ด๋ก ์๋ ๋น์นธ( ใฑ ), ( ใด ), ( ใท ) ์ ์์ฑํ์์ค.
( ใฑ ) INSERT ( ใด ) STUDENT_T ( ใท ) USER1;
( ใฑ )
( ใด )
( ใท )
๋ฌธ์ 27.
49ํ ๋จ๋ตํ 1 (1๊ณผ๋ชฉ). ๋ ๊ฐ์ ์ํฐํฐ๊ฐ ๊ด๊ณ์์ ์ฐธ์ฌ์์ ์๋ฅผ ํํํ๋ ๊ฒ์ ๋ฌด์์ด๋ผ ํ๋๊ฐ?
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 28.
49ํ ๋จ๋ตํ 2 (2๊ณผ๋ชฉ). ๋ค๋ฅธ ํ ์ด๋ธ์์ ํ์๋ ํ ์ด๋ธ๋ก, ๋ฌผ๋ฆฌ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ฒ์ด ์๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ์กด์ฌํ๋๊ฒ์ ๋ฌด์์ด๋ผ๊ณ ํ๋๊ฐ?
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 29.
49ํ ๋จ๋ตํ 3 (2๊ณผ๋ชฉ). ์๋์ SQL ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ์์ค.
[TAB1]
ID COL1
-----------
A 1
A 2
B 3
B 4
C 5
C 6
C 7
D 8
[SQL]
SELECT COUNT(*)
FROM TAB1
GROUP BY ID
HAVING COUNT(*) > 2;
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 30-1.
49ํ ๋จ๋ตํ 4 (2๊ณผ๋ชฉ). ์๋์ SQL๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์๋๋ก ๋น์นธ์ ์ฑ์ฐ์์ค.
[TAB1]
C1 C2 C3
-------------
1 A
2 1 B
3 1 C
4 2 D
[RESULT]
C3 C1
-------
A 1
C 3
B 2
D 4
[SQL]
SELECT C3, C1
FROM TAB1
START WITH C2 ( ? )
CONNECT BY PRIOR C1 = C2
ORDER SIBLINGS BY C3 DESC;
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 30-2.
์๋์ SQL๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์๋๋ก ๋น์นธ์ ์ฑ์ฐ์์ค.
[EMP]
EMPNO ENAME EDATE MANAGER
--------------------------------
001 ๊น์ฌ์ 2021-01-01 NULL
002 ์ด์ฌ์ 2021-01-01 001
003 ์ผ์ฌ์ 2022-01-01 001
004 ์ฌ์ฌ์ 2022-01-01 001
005 ์ค์ฌ์ 2022-01-01 NULL
006 ์ก์ฌ์ 2023-01-01 005
007 ๋์ฌ์ 2023-01-01 005
[RESULT]
EMPNO ENAME EDATE MANAGER
----------------------------------
001 ๊น์ฌ์ 2021-01-01 NULL
003 ์ผ์ฌ์ 2022-01-01 001
004 ์ฌ์ฌ์ 2022-01-01 001
005 ์ค์ฌ์ 2022-01-01 NULL
[SQL]
SELECT EMPNO, ENAME, EDATE, MANAGER
FROM EMP
START WITH MANAGER ( ? )
CONNECT BY PRIOR EMPNO = MANAGER
AND EDATE BETWEEN '2022-01-01' AND '2022-12-31'
ORDER SIBLINGS BY EMPNO;
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 31.
49ํ ๋จ๋ตํ 5 (2๊ณผ๋ชฉ). ์๋์ ๊ฒฐ๊ณผ[RESULT]๋ฅผ ์ป๊ธฐ ์ํ SQL๋ฌธ์์ ๋น์นธ( ใฑ )์ ๋ค์ด๊ฐ ํจ์๋ฅผ ์์ฑํ์์ค.
[RESULT]
๊ตฌ๋งค๊ณ ๊ฐ ๊ตฌ๋งค์ ์ด ๊ตฌ๋งค๊ฑด ์ด ๊ตฌ๋งค์ก
-----------------------------------
AAA 202301 1 1000
AAA 202302 2 3000
AAA 202303 1 1000
AAA 4 5000
BBB 202301 3 2000
BBB 202302 5 3000
BBB 202303 1 2000
BBB 9 7000
CCC 202301 1 2000
CCC 202302 1 5000
CCC 202303 1 1000
CCC 3 8000
16 20000
[SQL]
SELECT ๊ตฌ๋งค๊ณ ๊ฐ, ๊ตฌ๋งค์, COUNT(*) "์ด ๊ตฌ๋งค๊ฑด", SUM(๊ตฌ๋งค๊ธ์ก) "์ด ๊ตฌ๋งค์ก"
FROM ๊ตฌ๋งค์ด๋ ฅ
GROUP BY ( ใฑ ) (๊ตฌ๋งค๊ณ ๊ฐ, ๊ตฌ๋งค์)
โ๏ธ์ ๋ตํ์ธ
๋ฌธ์ 32.
49ํ ๋จ๋ตํ 6 (2๊ณผ๋ชฉ). ์๋ SQL๊ฒฐ๊ณผ์ ๋น์นธ( ใฑ ), ( ใด ) ์ ์์ฑํ์์ค.
[TAB1]
COL1 COL2
----------
1 A
2 B
3 B
4 C
5 C
6 C
7 D
[SQL]
SELECT NT, COUNT(*)
FROM (SELECT NTILE(3) OVER (ORDER BY COL1) AS NT
FROM TAB1)
WHERE 1=1
GROUP BY NT
ORDER BY 1;
[RESULT]
NT COUNT(*)
( ใฑ ) ( ใด )
2 2
3 2
(ใฑ) (ใด)์ ๋ตํ์ธ
1. ์ ๋ต : ์์ฑ (ATTRIBUTE)
๐๋ฌธ์ ํ์ธ
2. ์ ๋ต : ์ 2์ ๊ทํ
๐๋ฌธ์ ํ์ธ
3. ์ ๋ต : CROSS JOIN
๐๋ฌธ์ ํ์ธ
ํด์ค:
SQL> SELECT*FROM A;
C1
----------
1
2
SQL> SELECT*FROM B;
C1
----------
2
SQL> SELECT*FROM A, B;
C1 C1
---------- ----------
1 2
2 2
SQL> SELECT*FROM A CROSS JOIN B;
C1 C1
---------- ----------
1 2
2 2
CROSS JOIN(์ํธ ์กฐ์ธ)
ํ์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ํ๊ณผ ๋ค๋ฅธ ์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ํ์ ์กฐ์ธ์ํจ๋ค.
์ํธ ์กฐ์ธ ๊ฒฐ๊ณผ์ ์ ์ฒด ํ ๊ฐ์๋ ๋ ํ
์ด๋ธ์ ๊ฐ ํ์ ๊ฐ์๋ฅผ ๊ณฑํ ๊ฐ์ด ๋๋ฉฐ ์นดํ
์์ ๊ณฑ(CARTESIAN PRODUCT)๋ผ๊ณ ํจ.
4. ์ ๋ต : C
๐๋ฌธ์ ํ์ธ
ํด์ค: C1์ด ๊ฐ์ ๋ ๋ฒจ์์ DESC๋ก ์ ๋ ฌ๋จ
5. ์ ๋ต : KING
๐๋ฌธ์ ํ์ธ
ํด์ค: C1 = PRIOR C2 ์ญ๋ฐฉํฅ
6. ์ ๋ต : DCL (๋ฐ์ดํฐ ์ ์ด์ด)
๐๋ฌธ์ ํ์ธ
๋ฐ์ดํฐ ์ ์ด์ด (DCL : Data Control Language)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๊ณ ๊ฐ์ฒด๋ค์ ์ฌ์ฉํ๋๋ก ๊ถํ(GRANT)์ ์ฃผ๊ณ ํ์(REVOKE)ํ๋ ๋ช ๋ น์ด
7. ์ ๋ต : 3, 2
๐๋ฌธ์ ํ์ธ
ํด์ค: NTILE(3)์ ๋ฐ์ดํฐ๋ฅผ 3๋ฑ๋ถ ํ๊ณ , ๊ฐ ๋ฑ๋ถ์ ๋ํด์ COUNT๋ฅผ ๊ณ์ฐํ๋ฏ๋ก 3, 3, 2๊ฐ ๋๋ค.
[RESULT]
NTILE_3 ROWCNT
----------------
1 3
2 3
3 2
8. ์ ๋ต : RANGE
๐๋ฌธ์ ํ์ธ
ํด์ค: +0 ~ +50 ์ฌ์ด์ ๊ฐ์ด COUNT ๊ฒฐ๊ณผ๋ก ๋ํ๋จ
SQL> SELECT V1, N1, COUNT(N1) OVER (ORDER BY N1 RANGE BETWEEN 0 PRECEDING AND 50 FOLLOWING) AS CNT FROM SQLD45;
V1 N1 CNT
-----------------
E 50 2
A 100 2
B 150 1
D 450 1
C 1400 1
9. ์ ๋ต : 3
๐๋ฌธ์ ํ์ธ
ํด์ค: 200 ์ด์์ด 3๊ฐ ์ด๋ฏ๋ก 3
10. ์ ๋ต : 3
๐๋ฌธ์ ํ์ธ
ํด์ค: ๋๋ฒ์งธ ์๋ฆฌ์ ๋ฌธ์๊ฐ L์ธ ๋ชจ๋ ํ์ ์ถ๋ ฅ
SQL> SELECT COUNT(*) FROM SQLD45 WHERE V1 LIKE '_L%';
COUNT(*)
----------
3
11. ์ ๋ต : ๋๋ฉ์ธ
๐๋ฌธ์ ํ์ธ
12. ์ ๋ต : ์ ์ผ์ฑ
๐๋ฌธ์ ํ์ธ
ํด์ค:
์ ์ผ์ฑ - ์ฃผ์๋ณ์๋ ๋ชจ๋ ์ธ์คํด์ค๋ฅผ ์ ์ผํ๊ฒ ๊ตฌ๋ถ๊ฐ๋ฅ ํด์ผํ๋ค.
์ต์์ฑ - ์ฃผ์๋ณ์๋ฅผ ๊ตฌ์ฑํ๋ ์์ฑ ์๋ 1๊ฐ์ด์ด์ผ ํ๋ค.
๋ถ๋ณ์ฑ - ์ฃผ์๋ณ์๋ ์์ฃผ ๋ณ๊ฒฝ๋์ง ์์์ผ ํ๋ค.
์กด์ฌ์ฑ - ์ฃผ์๋ณ์๋ ํญ์ ๋ฐ์ดํฐ ๊ฐ์ด ์์ด์ผ ํ๋ค.
๋ํ์ฑ - ์ฃผ์๋ณ์๋ ์ํฐํฐ๋ฅผ ๋ํ ํ ์ ์์ด์ผ ํ๋ค.
13. ์ ๋ต : 2
๐๋ฌธ์ ํ์ธ
SQL> SELECT AVG(COL1), AVG(NVL(COL1, 0)) FROM TAB1;
AVG(COL1) AVG(NVL(COL1,0))
---------- ----------------
6 4
SQL> SELECT AVG(COL1) - AVG(NVL(COL1, 0)) FROM TAB1;
AVG(COL1)-AVG(NVL(COL1,0))
--------------------------
2
14-1. ์ ๋ต : RIGHT OUTER JOIN / RIGHT JOIN
๐๋ฌธ์ ํ์ธ
ํด์ค: ์ฌ์์ด ์ค๋ฅธ์ชฝ์ ์์นํด ์์ผ๋ฏ๋ก RIGHT OUTER JOIN (OUTER ์๋ต ๊ฐ๋ฅ)
14-2. ์ ๋ต : LEFT OUTER JOIN / LEFT JOIN
๐๋ฌธ์ ํ์ธ
14-3. ์ ๋ต : RIGHT OUTER JOIN / RIGHT JOIN
๐๋ฌธ์ ํ์ธ
15. ์ ๋ต : GROUPING SETS(B.GRADE, (B.GRADE, A.JOB))
๐๋ฌธ์ ํ์ธ
ํด์ค:
SELECT B.GRADE, A.JOB, SUM(B.GRADE) FROM TAB1 A, TAB2 B GROUP BY GROUPING SETS(B.GRADE, (B.GRADE, A.JOB));
GRADE JOB SUM(B.GRADE)
---------- ---------- ------------
50 10 50
50 20 50
50 30 50
50 150
60 10 60
60 20 60
60 30 60
60 180
70 10 70
70 20 70
70 30 70
70 210
12 rows selected.
16. ์ ๋ต : ์ 2์ ๊ทํ
๐๋ฌธ์ ํ์ธ
17. ์ ๋ต : ์ธ๋ถ์คํค๋ง
๐๋ฌธ์ ํ์ธ
- ์ธ๋ถ ์คํค๋ง(External Schema) - ์๋ธ ์คํค๋ง, ์ฌ์ฉ์ ๋ทฐ
1. ์ธ๋ถ ์คํค๋ง๋ ์ฌ์ฉ์๋ ์์ฉ ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ฐ์ธ์ ์
์ฅ์์ ํ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋
ผ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ค.
2. ์ธ๋ถ ์คํค๋ง๋ ์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ๋
ผ๋ฆฌ์ ์ธ ๋ถ๋ถ์ผ๋ก ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ธ ์คํค๋ง๋ผ๊ณ ๋ ํ๋ค.
3. ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
์๋ ์ฌ๋ฌ ๊ฐ์ ์ธ๋ถ ์คํค๋ง๊ฐ ์กด์ฌํ ์ ์๋ค.
4. ํ๋์ ์ธ๋ถ ์คํค๋ง๋ฅผ ์ฌ๋ฌ๊ฐ์ ์์ฉ ํ๋ก๊ทธ๋จ ํน์ ์ฌ์ฉ์๊ฐ ๊ณต์ ํ ์ ์๋ค.
5. ์ผ๋ฐ ์ฌ์ฉ์๋ SQL๊ณผ ๊ฐ์ ์ง์์ด๋ฅผ ์ด์ฉํ์ฌ DB๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
6. ์์ฉ ํ๋ก๊ทธ๋๋จธ๋ C๋ JAVA ๋ฑ์ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ DB์ ์ ๊ทผํ๋ค.
- ๊ฐ๋
์คํค๋ง(Conceptual Schema) - ์ ์ฒด์ ์ธ ๋ทฐ
1. ๊ฐ๋
์คํค๋ง๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฒด์ ์ธ ๋
ผ๋ฆฌ์ ๊ตฌ์กฐ๋ก, ๋ชจ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด๋ ์ฌ์ฉ์๋ค์ด ํ์๋ก ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ข
ํฉํ ์กฐ์ง ์ ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ํ๋๋ง ์กด์ฌํ๋ค.
2. ๊ฐ๋
์คํค๋ง๋ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ(Relationship)์ ์ ์ฝ ์กฐ๊ฑด์ ๋ํ๋ด๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผ ๊ถํ, ๋ณด์ ๋ฐ ๋ฌด๊ฒฐ์ฑ ๊ท์น์ ๊ดํ ๋ช
์ธ๋ฅผ ์ ์ํ๋ค.
3. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ์ ํํ๋ฅผ ๋ํ๋ด๋ ๊ฒ์ผ๋ก, ๋จ์ํ ์คํค๋ง๋ผ๊ณ ํ๋ฉด ๊ฐ๋
์คํค๋ง๋ฅผ ์๋ฏธํ๋ค.
4. ๊ธฐ๊ด์ด๋ ์กฐ์ง์ฒด์ ๊ด์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์ํ ๊ฒ์ด๋ค.
5. DBA์ ์ํด์ ๊ตฌ์ฑ๋๋ค.
- ๋ด๋ถ ์คํค๋ง(Internal Schema) - ์์คํ
์ค๊ณ์ ๋ทฐ
1. ๋ด๋ถ ์คํค๋ง๋ ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฅ์ฅ์น ์
์ฅ์์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๋ฐฉ๋ฒ์ ๊ธฐ์ ํ ๊ฒ์ด๋ค.
2. ๋ด๋ถ ์คํค๋ง๋ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ ์ฝ๋์ ๋ฌผ๋ฆฌ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ค.
3. ๋ด๋ถ ์คํค๋ง๋ ์ ์ฅ ๋ฐ์ดํฐ ํญ๋ชฉ์ ํํ๋ฐฉ๋ฒ, ๋ด๋ถ ๋ ์ฝ๋์ ๋ฌผ๋ฆฌ์ ์์, ์ธ๋ฑ์ค ์ /๋ฌด ๋ฑ์ ๋ํ๋ธ๋ค.
4. ์์คํ
ํ๋ก๊ทธ๋๋จธ๋ ์์คํ
์ค๊ณ์๊ฐ ๊ด๋ฆฌํ๋ค.
18. ์ ๋ต : CASCADE
๐๋ฌธ์ ํ์ธ
19. ์ ๋ต : GROUP BY
๐๋ฌธ์ ํ์ธ
20. ์ ๋ต : 5, 4
๐๋ฌธ์ ํ์ธ
21. ์ ๋ต : 4
๐๋ฌธ์ ํ์ธ
ํด์ค:
<๋ต> 2 null ์ ์ ์ธ๋ ์ํ์์ ์ํ๋๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ์์ 4 ์ธ row ๋ฅผ ์ ์ธ
์์ ์ํ ์์ ๋ก 1 ์์ ์์๋ ๊ฒฐ๊ณผ๋ 1,3,4,7,8 / 5๊ฐ์ rows ์์ COL1<>4๋ฅผ ์ ์ธํ 4๊ฐ
22. ์ ๋ต : 60, NULL, 10, 50
๐๋ฌธ์ ํ์ธ
23. ์ ๋ต : 1
๐๋ฌธ์ ํ์ธ
SQL> SELECT ID FROM TAB1 ORDER BY (CASE WHEN ID IN(1, 3) THEN ID*3 ELSE ID END) DESC;
ID
------
3
4
1
2
24. ์ ๋ต : 3
๐๋ฌธ์ ํ์ธ
25. ์ ๋ต : LAG
๐๋ฌธ์ ํ์ธ
ํด์ค: LAG ํจ์๋ ์ด์ ํ์ ๊ฐ์ ๋ฐํํ๋ ํจ์๋ก LAG(SALARY, 2) => ์ด์ ๋ ๋ฒ์งธ ํ๊ฐ์ ์ถ๋ ฅํ๋ค.
LAG : ์ด์ ํ์ ๊ฐ์ ๋ฆฌํด
LEAD : ๋ค์ ํ์ ๊ฐ์ ๋ฆฌํด
26. ์ ๋ต : GRANT, ON, TO
๐๋ฌธ์ ํ์ธ
ํด์ค:
GRANT : ๊ถํ๋ถ์ฌ ( GRANT [๊ถํ] ON [ํ ์ด๋ธ] TO [์ ์ ] )
REVOKE : ๊ถํํ์ (REVOKE [๊ถํ] ON [ํ ์ด๋ธ] FROM [์ ์ ] )
27. ์ ๋ต : ๊ด๊ณ์ฐจ์ (Cardinality)
๐๋ฌธ์ ํ์ธ
28. ์ ๋ต : VIEW (๋ทฐ)
๐๋ฌธ์ ํ์ธ
29. ์ ๋ต : 3
๐๋ฌธ์ ํ์ธ
ํด์ค: ID, COUNT(*) ๊ฒฐ๊ณผ๋ฅผ HAVING์กฐ๊ฑด์ ์ฒดํฌํ ์ต์ข ๊ฒฐ๊ณผ๋ '3'
SQL> SELECT COUNT(*) FROM TAB1 GROUP BY ID HAVING COUNT(*) > 2;
COUNT(*)
----------
3
30-1. ์ ๋ต : IS NULL
๐๋ฌธ์ ํ์ธ
30-2. ์ ๋ต : IS NULL
๐๋ฌธ์ ํ์ธ
31. ์ ๋ต : ROLLUP
๐๋ฌธ์ ํ์ธ
32. ์ ๋ต : 1, 3
๐๋ฌธ์ ํ์ธ
*ํด๋น ํฌ์คํ ์ ๋ฌธ์ ์ ํ์ ์ฐธ๊ณ ํ์ฌ ๋น์ทํ ๋ฌธ์ ๋ค๋ก ์ฌ๊ตฌ์ฑ ํ์์ผ๋ ์ฐธ๊ณ ์ฉ์ผ๋ก ๋ด์ฃผ์ธ์ :)
์คํ, SQL์๋ฌ ๋๊ธ ๋จ๊ฒจ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ๐๐ป
'IT์๊ฒฉ์ฆ ๊ณต๋ถ > SQLD ๊ธฐ์ถ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQLD] 45ํ ๊ธฐ์ถ๋ฌธ์ 1๊ณผ๋ชฉ ( 10๋ฌธ์ / ์ ๋ต, ํด์ค ) (11) | 2022.12.10 |
---|---|
[SQLD] 37ํ ๊ธฐ์ถ๋ฌธ์ ( 50๋ฌธ์ / ์ ๋ต, ํด์คํฌํจ ) (47) | 2022.09.05 |
[SQLD] 33ํ ๊ธฐ์ถ๋ฌธ์ ( 50๋ฌธ์ /์ ๋ต ) (46) | 2022.07.15 |
[SQLD] 33ํ ๊ธฐ์ถ 23๋ฒ ๋ฌธ์ - ์๋์ฐ ํจ์ (4) | 2022.05.27 |
[SQLD] 38ํ ๊ธฐ์ถ ๋ฌธ์ ( 50๋ฌธ์ / ์ ๋ต ) + ํด์ค์ถ๊ฐ (24) | 2022.05.25 |