๐โ 4๊ฐ ํ ์ด๋ธ์ ํฌํจ๋ ๋ฐ์ดํฐ ๊ฑด ์๋ฅผ ๊ตฌํ๋ SQL ๊ตฌ๋ฌธ์ ๋ง๋๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์.
๐ฉ Example Output
4 rows selected
SELECT COUNT(*) FROM TB_BOOK; |
SELECT COUNT(*) FROM TB_BOOK_AUTHOR; |
SELECT COUNT(*) FROM TB_PUBLISHER; |
SELECT COUNT(*) FROM TB_WRITER; |
SELECT
'SELECT COUNT(*) FROM ' || A || ';' " "
FROM (SELECT
DISTINCT TABLE_NAME A
FROM USER_TAB_COLUMNS
ORDER BY 1
);
SELECT 'SELECT COUNT(*) FROM '||TABLE_NAME||';' AS " "
FROM USER_TABLES U
WHERE TABLE_NAME IN ('TB_BOOK', 'TB_BOOK_AUTHOR', 'TB_PUBLISHER', 'TB_WRITER');
๐ฌ Overall Comment
* ์ฒ์์๋ SELECT ๊ตฌ๋ฌธ ์์ฒด๋ฅผ ์ด๋ป๊ฒ RESULT SET์ ๋์ค๊ฒ๋ ํด์ผํ๋์ง ๊ฐ์ด ์กํ์ง ์์ ์ฌ๋ฌ ๋ฐฉ๋ฉด์ผ๋ก ํค๋งธ๋ค. ๊ต์ฅํ ๋์ผ์ค์ ์ธ ๋ฌธ์ ์๊ณ , ์๋ธ์ฟผ๋ฆฌ์ ๋ฐ์ดํฐ ๋์
๋๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ๊ฒฐ๊ตญ ํ์ด๋ด๋ ๋ฟ๋ฏํ๋ค.
๐โ 4๊ฐ ํ ์ด๋ธ์ ๊ตฌ์กฐ๋ฅผ ํ์ ํ๋ ค๊ณ ํฉ๋๋ค. ์ ์๋ ๊ฒฐ๊ณผ์ฒ๋ผ TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_DEFAULT, NULLABLE, CONSTRAINT_NAME, CONSTRAINT_TYPE, R_CONSTRAINT_NAME ๊ฐ์
์กฐํํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์.
๐ฉ Example Output
29 rows selected
TABLE_NAME | COLUMN_NAME | DATA_TYPE | DATA_DEFAULT | NULLABLE | CONSTRAINT_NAME | CONSTRAINT_TYPE | R_CONSTRAINT_NAME |
---|---|---|---|---|---|---|---|
TB_BOOK | BOOK_NO | VARCHAR2 | (null) | N | PK_BOOK_NO | P | (null) |
TB_BOOK | BOOK_NM | VARCHAR2 | (null) | Y | (null) | (null) | (null) |
. . . . . . | . . . . . . | . . . . . . | . . . . . . | . . . . . . | . . . . . . | . . . . . . | . . . . . . |
TB_WRITER | EMAIL_ADDR | VARCHAR2 | (null) | Y | (null) | (null) | (null) |
TB_WRITER | REGIST_DATE | DATE | (null) | Y | (null) | (null) | (null) |
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_DEFAULT, NULLABLE, CONSTRAINT_NAME, CONSTRAINT_TYPE, R_CONSTRAINT_NAME
FROM USER_TAB_COLS
LEFT JOIN USER_CONS_COLUMNS USING (TABLE_NAME, COLUMN_NAME)
LEFT JOIN USER_CONSTRAINTS USING (TABLE_NAME, CONSTRAINT_NAME)
WHERE TABLE_NAME IN ('TB_BOOK', 'TB_BOOK_AUTHOR', 'TB_PUBLISHER', 'TB_WRITER');
๐โ ๋์๋ช ์ด 25์ ์ด์์ธ ์ฑ ๋ฒํธ์ ๋์๋ช ์ ํ๋ฉด์ ์ถ๋ ฅํ๋ SQL ๋ฌธ์ ์์ฑํ์ธ์.
๐ฉ Example Output
5 rows selected
์ฑ ๋ฒํธ | ๋์๋ช |
---|---|
1987071002 | ์ฐฝ๋น 1987(58ํธ_1987 ๋ถ์ ๊ธฐ ๊ฐํ๋ฌผ) |
1991120501 | ์ง์ค์ ์์ํ ๊ฐ์ฅ์ ๊ฐ๋์ด ๋ ์๋ ์์ต๋๋ค |
1999121501 | SMILES OF THE BABY BUDDHA |
2004020501 | ๋ดํด๊ณผ ์์ธ์ํ์ธ, ์ฐ๋ฆฌ๊ฐ ๋ชฐ๋๋ ์ฒ์ฌ๋ค์ ์ฐฝ์กฐ์ฑ |
2007052102 | ๋ฌธํ์ง๋ฐฐ์ ๋์ข ํ์ ์๋ฐฐ๋ฌ-๊ฝ์์ ๋ง๋ก ํธ์ง๋ฅผ ์ด๋ค |
SELECT
BOOK_NO "์ฑ
๋ฒํธ"
, BOOK_NM ๋์๋ช
FROM TB_BOOK
WHERE LENGTH(BOOK_NM) >= 25;
๐โ ํด๋ํฐ ๋ฒํธ๊ฐ โ019โ๋ก ์์ํ๋ ๊น์จ ์ฑ์ ๊ฐ์ง ์๊ฐ๋ฅผ ์ด๋ฆ์์ผ๋ก ์ ๋ ฌํ์ ๋ ๊ฐ์ฅ ๋จผ์ ํ์๋๋ ์๊ฐ ์ด๋ฆ๊ณผ ์ฌ๋ฌด์ค ์ ํ๋ฒํธ, ์ง ์ ํ๋ฒํธ, ํด๋ํฐ ์ ํ๋ฒํธ๋ฅผ ํ์ํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์.
๐ฉ Example Output
1 row selected
์๊ฐ ์ด๋ฆ | ์ฌ๋ฌด์ค ์ ํ๋ฒํธ | ์ง ์ ํ๋ฒํธ | ํด๋ํฐ ์ ํ๋ฒํธ |
---|---|---|---|
๊น๊ฒฝ์ผ | 052-9272-8984 | (null) | 019-8623-8304 |
SELECT
WRITER_NM "์๊ฐ ์ด๋ฆ"
, OFFICE_TELNO "์ฌ๋ฌด์ค ์ ํ๋ฒํธ"
, HOME_TELNO "์ง ์ ํ๋ฒํธ"
, MOBILE_NO "ํด๋ํฐ ์ ํ๋ฒํธ"
FROM (SELECT
WRITER_NM
, OFFICE_TELNO
, HOME_TELNO
, MOBILE_NO
FROM TB_WRITER
WHERE MOBILE_NO LIKE '019%'
AND WRITER_NM LIKE '๊น%'
ORDER BY 1
)
WHERE ROWNUM = 1;
SELECT *
FROM ( SELECT WRITER_NM,
OFFICE_TELNO,
HOME_TELNO,
MOBILE_NO
FROM TB_WRITER
WHERE WRITER_NM LIKE '๊น%'
AND MOBILE_NO LIKE '019-%'
ORDER BY 1 )
WHERE ROWNUM = 1;
๐โ ์ ์ ํํ๊ฐ โ์ฎ๊นโ์ ํด๋นํ๋ ์๊ฐ๋ค์ด ์ด ๋ช ๋ช ์ธ์ง ๊ณ์ฐํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์. (๊ฒฐ๊ณผ ํค๋๋ โ์๊ฐ(๋ช )โ์ผ๋ก ํ์)
๐ฉ Example Output
1 row selected
์๊ฐ(๋ช ) |
---|
155 |
SELECT
COUNT(*) "์๊ฐ(๋ช
)"
FROM TB_BOOK_AUTHOR
WHERE COMPOSE_TYPE = '์ฎ๊น';
๐โ 300๊ถ ์ด์ ๋ฑ๋ก๋ ๋์์ ์ ์ ํํ ๋ฐ ๋ฑ๋ก๋ ๋์ ์๋์ ํ์ํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์. (๋จ, ์ ์ํํ๊ฐ ๋ฑ๋ก๋์ง ์์ ๊ฒฝ์ฐ๋ ์ ์ธ)
๐ฉ Example Output
2 rows selected
์ ์ ํํ | ๋ฑ๋ก๋ ๋์ ์๋ |
---|---|
์ง์ | 1087 |
์ฎ์ | 331 |
SELECT
COMPOSE_TYPE "์ ์ ํํ"
, COUNT(COMPOSE_TYPE) "๋ฑ๋ก๋ ๋์ ์๋"
FROM TB_BOOK_AUTHOR
GROUP BY COMPOSE_TYPE
HAVING COUNT(COMPOSE_TYPE) >= 300;
๐โ ๊ฐ์ฅ ์ต๊ทผ์ ๋ฐ๊ฐ๋ ์ต์ ์ ์ด๋ฆ๊ณผ ๋ฐํ์ผ์, ์ถํ์ฌ ์ด๋ฆ์ ํ์ํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์.
๐ฉ Example Output
1 rows selected
์ต์ ์ ์ด๋ฆ | ๋ฐํ์ผ์ | ์ถํ์ฌ ์ด๋ฆ |
---|---|---|
ํธ๊ธฐ์ฌ | 08/01/02 | ์ฒญ์ฐ |
SELECT
BOOK_NM "์ต์ ์ ์ด๋ฆ"
, ISSUE_DATE ๋ฐํ์ผ์
, PUBLISHER_NM "์ถํ์ฌ ์ด๋ฆ"
FROM (SELECT
BOOK_NM
, ISSUE_DATE
, PUBLISHER_NM
FROM TB_BOOK
ORDER BY 2 DESC
)
WHERE ROWNUM = 1;
SELECT
BOOK_NM
, ISSUE_DATE
, PUBLISHER_NM
FROM TB_BOOK
WHERE ISSUE_DATE = (SELECT
MAX(ISSUE_DATE)
FROM TB_BOOK
);
๐โ ๊ฐ์ฅ ๋ง์ ์ฑ ์ ์ด ์๊ฐ 3๋ช ์ ์ด๋ฆ๊ณผ ์๋์ ํ์ํ๋, ๋ง์ด ์ด ์์๋๋ก ํ์ํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์. ๋จ, ๋๋ช ์ด์ธ ์๊ฐ๋ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. (๊ฒฐ๊ณผ ํค๋๋ โ์๊ฐ ์ด๋ฆโ, โ๊ถ ์โ๋ก ํ์)
๐ฉ Example Output
3 rows selected
์๊ฐ ์ด๋ฆ | ๊ถ ์ |
---|---|
๊ณ ์(้ซ้) | 46 |
ํฉ์์ | 36 |
์ฐฝ๋น | 26 |
SELECT
"์๊ฐ ์ด๋ฆ"
, "๊ถ ์"
FROM (SELECT
WRITER_NM "์๊ฐ ์ด๋ฆ"
, COUNT(BOOK_NO) "๊ถ ์"
FROM TB_WRITER
JOIN TB_BOOK_AUTHOR USING (WRITER_NO)
WHERE COMPOSE_TYPE = '์ง์'
GROUP BY WRITER_NM
ORDER BY 2 DESC
)
WHERE ROWNUM <= 3;
๐ฌ Overall Comment
* ์ธ๋ผ์ธ ๋ทฐ๋ฅผ ํ์ฉํ TOP-N ๋ถ์ ๋ฌธ์ ๋ ๋ง์ด ํ์ด๋ณด์๊ธฐ ๋๋ฌธ์ ํฐ ์ด๋ ค์ ์์ด ์ด ๋ฌธํญ ๋ํ
ํ ์ ์์๊ฑฐ๋ผ ์๊ฐํ๋ค. ํ์ง๋ง ๊ทธ๋ฃนํจ์ COUNT์ GROUP BY๊ฐ ํฌํจ๋๋ ๋ฑ ์ฝ๊ฐ ๋ณต์กํ
์ฟผ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์ธ๋ผ์ธ ๋ทฐ๋ฅผ ๋ง๋ค๊ณ ์ ํ๋ ์ฌ๋ฐ๋ฅธ SQL ๊ตฌ๋ฌธ์ด ์๋๋ผ๋ ์ค๋ฅ๊ฐ ๊ณ์ ๋ ์
๋๊ฐํ๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก๋ ๋ฉ์ธ์ฟผ๋ฆฌ์ ์๋ธ์ฟผ๋ฆฌ์ ๋ณ์นญ์ ๋ฃ๊ณ GROUP BY์ ์ ์ญ์ ํ๋ ํด๊ฒฐ์ด
๋์๋ค. ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๋ํ๋ค ํด๊ฒฐ๋ฐฉ์์ ๋ฐ๊ฒฌํ๋ ์ธ์๊น๊ฒ ๋จ์ ๋ฌธํญ์ด์๋ค.
๐โ ์๊ฐ ์ ๋ณด ํ ์ด๋ธ์ ๋ชจ๋ ๋ฑ๋ก์ผ์ ํญ๋ชฉ์ด ๋๋ฝ๋์ด ์๋ ๊ฑธ ๋ฐ๊ฒฌํ์์ต๋๋ค. ๋๋ฝ๋ ๋ฑ๋ก์ผ์ ๊ฐ์ ๊ฐ ์๊ฐ์ โ์ต์ด ์ถํ๋์์ ๋ฐํ์ผ๊ณผ ๋์ผํ ๋ ์งโ๋ก ๋ณ๊ฒฝ์ํค๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์. (COMMIT ์ฒ๋ฆฌ ์๋ง)
UPDATE
TB_WRITER TW
SET REGIST_DATE = (SELECT
MIN(ISSUE_DATE)
FROM TB_BOOK
JOIN TB_BOOK_AUTHOR USING(BOOK_NO)
WHERE TW.WRITER_NO = WRITER_NO
-- TB_WRITER์ TB_BOOK_AUTHOR์ ๊ฐ WRITER_NO๊ฐ ๋์ผํ ์กฐ๊ฑด
);
๐ฌ Overall Comment
* ์ฌ๊ธฐ์๋ ์๊ฐ ๋ง๋ค์ ์ต์ด ์ถํ๋์ ๋ฐํ์ผ์ ์๋ธ์ฟผ๋ฆฌ๋ก ์์ฑํ์ผ๋ ๊ฐ์ฅ ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ ๋
๋ถ๋ถ์ '์๊ฐ๋ง๋ค์ ์ต์ด ๋ฐํ์ผ ์ฝ์
'์ด์๋ค. UPDATE๊ตฌ๋ฌธ์์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด๋ณธ ๊ฒฝํ์ด
์ ๋ค๋ณด๋ ์ด๋ค ๋ฐฉํฅ์ผ๋ก ์ฝ์
์ ํด์ผํ ์ง ๋๊ฐํ๋ค. ์๋ฆฌ์กฐ๋ฆฌ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ๊ฟ๋ณด๋ค๊ฐ ๋ฉ์ธ์ฟผ๋ฆฌ์
์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ํธ์ฐ๊ด์ง์ด 'B_WRITER์ TB_BOOK_AUTHOR์ ๊ฐ WRITER_NO๊ฐ ๋์ผํ ์กฐ๊ฑด'์
์๋ธ์ฟผ๋ฆฌ์ ์
๋ ฅํด์ฃผ๋ฉด ํด๊ฒฐ์ด ๋์๋ค. ์ค๋ ๊ณ ๋ฏผํ๋ ๋ฌธ์ ์๋๋ฐ ๊ฒฐ๊ตญ์ ํ์ด๋ด์ด ๊ต์ฅํ ๋ฟ๋ฏํ๋ค.
๐โ ํ์ฌ ๋์์ ์ ์ ๋ณด ํ ์ด๋ธ์ ์ ์์ ๋ฒ์ญ์๋ฅผ ๊ตฌ๋ถ ์์ด ๊ด๋ฆฌํ๊ณ ์์ง๋ง ์์ผ๋ก๋ ๋ฒ์ญ์๋ ๋ฐ๋ก ๊ด๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค. ์ ์๋ ๋ด์ฉ์ ๋ง๊ฒ โTB_BOOK_TRANSLATORโ ํ ์ด๋ธ์ ์์ฑํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์.
(Primary Key ์ ์ฝ ์กฐ๊ฑด ์ด๋ฆ์ โPK_BOOK_TRANSLATORโ๋ก ํ๊ณ , Reference ์ ์ฝ ์กฐ๊ฑด ์ด๋ฆ์ โFK_BOOK_TRANSLATOR_01โ, โFK_BOOK_TRANSLATOR_02โ๋ก ํ ๊ฒ)
๐ฉ Example Output
CREATE TABLE TB_BOOK_TRANSLATOR(
BOOK_NO VARCHAR2(10) NOT NULL
, WRITER_NO VARCHAR2(10) NOT NULL
, TRANS_LANG VARCHAR2(60)
, CONSTRAINT PK_BOOK_TRANSLATOR PRIMARY KEY(BOOK_NO, WRITER_NO)
, CONSTRAINT FK_BOOK_TRANSLATOR_01 FOREIGN KEY(BOOK_NO) REFERENCES TB_BOOK(BOOK_NO)
, CONSTRAINT FK_BOOK_TRANSLATOR_02 FOREIGN KEY(WRITER_NO) REFERENCES TB_WRITER(WRITER_NO)
);
๐โ ๋์ ์ ์ ํํ(composetype)๊ฐ '์ฎ๊น', '์ญ์ฃผ', 'ํธ์ญ', '๊ณต์ญ'์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ ๋์ ์ ์ ์ ๋ณด ํ ์ด๋ธ์์ ๋์ ์ญ์ ์ ๋ณด ํ ์ด๋ธ(TB_BOOK TRANSLATOR)๋ก ์ฎ๊ธฐ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์. ๋จ, โTRANS_LANGโ ์ปฌ๋ผ์ NULL ์ํ๋ก ๋๋๋ก ํฉ๋๋ค. (์ด๋๋ ๋ฐ์ดํฐ๋ ๋ ์ด์ TB_BOOK_AUTHOR ํ ์ด๋ธ์ ๋จ์ ์์ง ์๋๋ก ์ญ์ ํ ๊ฒ)
/* ๋ฐ์ดํฐ ๋ณต์ฌ */
INSERT
INTO
TB_BOOK_TRANSLATOR(BOOK_NO, WRITER_NO)
SELECT
BOOK_NO
, WRITER_NO
FROM TB_BOOK_AUTHOR
WHERE COMPOSE_TYPE IN ('์ฎ๊น', '์ญ์ฃผ', 'ํธ์ญ', '๊ณต์ญ');
/* ๋จ์์๋ ๋ฐ์ดํฐ ์ญ์ */
DELETE
FROM TB_BOOK_AUTHOR
WHERE COMPOSE_TYPE IN ('์ฎ๊น', '์ญ์ฃผ', 'ํธ์ญ', '๊ณต์ญ');
๐โ 2007๋ ๋์ ์ถํ๋ ๋ฒ์ญ์ ์ด๋ฆ๊ณผ ๋ฒ์ญ์(์ญ์)๋ฅผ ํ์ํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์.
๐ฉ Example Output
5 rows selected
๋ฒ์ญ์ ๋ช | ๋ฒ์ญ์ |
---|---|
์ฌ๋ฆฌ๋ฒ ํธ์์คํธ 2 | ์คํ์ค |
์ฌ๋ฆฌ๋ฒ ํธ์์คํธ 1 | ์คํ์ค |
์ญ์ฃผ ์ํ | ์ด์ฒ ๋ฆฌ |
์ถ๋! ๊ทธ๋ฆฐํ ๊ณ ๋๋ฅผ ๊ตฌํ์ | ์ ํฌ์ |
์๊ณผ๋ฐ: ์๋ฏธ๋ฌธํ์ฐ๊ตฌ ์ 23ํธ | ์ ํ์ฉ |
SELECT
BOOK_NM "๋ฒ์ญ์ ๋ช
"
, WRITER_NM ๋ฒ์ญ์
FROM TB_BOOK
JOIN TB_BOOK_TRANSLATOR USING(BOOK_NO)
JOIN TB_WRITER USING(WRITER_NO)
WHERE BOOK_NO LIKE '2007%';
๐โ 12๋ฒ ๊ฒฐ๊ณผ๋ฅผ ํ์ฉํ์ฌ ๋์ ๋ฒ์ญ์๋ค์ ์ถํ์ผ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ๋ ๋ทฐ๋ฅผ ์์ฑํ๋ SQL๊ตฌ๋ฌธ์ ์์ฑํ์ธ์. (๋ทฐ ์ด๋ฆ์ โVW_BOOK_TRANSLATORโ๋ก ํ๊ณ ๋์๋ช , ๋ฒ์ญ์, ์ถํ์ผ์ด ํ์๋๋๋ก ํ ๊ฒ)
๐ฉ Example Output
169 rows selected
๋์๋ช | ๋ฒ์ญ์ | ์ถํ์ผ |
---|---|---|
๋ฏผ์ค๋ฌธํ์ ์ 3์ธ๊ณ | ์ ๊ฒฝ๋ฆผ | 1983๋ 10์ 25์ผ |
ํผ์ ๊ฝ์ ไธ | ๊น์ข ์ฒ | 1983๋ 09์ 10์ผ |
. . . . . . | . . . . . . | |
์์กฐ ์์์ด | ์ํฌ๊ทผ | 1995๋ 06์ 30์ผ |
์ญ์ฃผ ๋ชฉ๋ฏผ์ฌ์ 2 | ๋ค์ฐ์ฐ๊ตฌํ | 1995๋ 05์ 25์ผ |
/* CREATE VIEW ๊ถํ ๋ถ์ฌ */
GRANT CREATE VIEW TO C##BOOK;
/* ๋ทฐ ์์ฑ */
CREATE OR REPLACE VIEW VW_BOOK_TRANSLATOR
AS
SELECT
BOOK_NM ๋์๋ช
, WRITER_NM ๋ฒ์ญ์
, TO_CHAR(TO_DATE(SUBSTR(BOOK_NO, 1, 8), 'YYMMDD'), 'RRRR"๋
"MM"์ "DD"์ผ "') ์ถํ์ผ
FROM TB_BOOK
JOIN TB_BOOK_TRANSLATOR USING(BOOK_NO)
JOIN TB_WRITER USING(WRITER_NO)
WITH READ ONLY;
๐โ ์๋ก์ด ์ถํ์ฌ(์ถ ์ถํ์ฌ)์ ๊ฑฐ๋ ๊ณ์ฝ์ ๋งบ๊ฒ ๋์์ต๋๋ค. ์ ์๋ ๋ค์ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์. (COMMIT ์ฒ๋ฆฌ ์๋ง)
INSERT
INTO TB_PUBLISHER
(
PUBLISHER_NM, PUBLISHER_TELNO, DEAL_YN
)
VALUES
(
'์ถ ์ถํ์ฌ', '02-6710-3737', DEFAULT
);
COMMIT;
๐โ ๋๋ช ์ด์ธ ์๊ฐ์ ์ด๋ฆ์ ์ฐพ์ผ๋ ค๊ณ ํฉ๋๋ค. ์ด๋ฆ๊ณผ ๋๋ช ์ด์ธ ์๋ฅผ ํ์ํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์.
๐ฉ Example Output
3 rows selected
์ด๋ฆ | ๋๋ช ์ด์ธ ์ |
---|---|
์ด์๊ถ | 2 |
์ด๊ธฐ์ | 2 |
์ด์ ํธ | 2 |
SELECT
WRITER_NM ์ด๋ฆ
, COUNT(WRITER_NM) "๋๋ช
์ด์ธ ์"
FROM TB_WRITER
GROUP BY WRITER_NM
HAVING COUNT(WRITER_NM) > 1;
๐โ ๋์์ ์ ์ ์ ๋ณด ์ค ์ ์ ํํ(compose_type)๊ฐ ๋๋ฝ๋ ๋ฐ์ดํฐ๋ค์ด ์ ์ง ์๊ฒ ์กด์ฌํฉ๋๋ค. ํด๋น ์ปฌ๋ผ์ด NULL์ธ ๊ฒฝ์ฐ '์ง์'์ผ๋ก ๋ณ๊ฒฝํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์. (COMMIT ์ฒ๋ฆฌ ์๋ง)
UPDATE
TB_BOOK_AUTHOR
SET COMPOSE_TYPE = DEFAULT -- ์ด ์ปฌ๋ผ์ ๊ธฐ๋ณธ๊ฐ์ด '์ง์'
WHERE COMPOSE_TYPE IS NULL;
COMMIT;
๐ฌ Overall Comment
* ์ฒ์์ WHERE COMPOSE_TYPE = NULL;๋ก ์
๋ ฅํ๋ค๊ฐ ๊ณ์ 0ํ์ด ์ฝ์
๋์๋ค๋ ๋ฌธ๊ตฌ๋ง
๋จ๊ธธ๋ ๋ญ๊ฐ ๋ฌธ์ ์ธ์ง ์ ์ ํท๊ฐ๋ ธ๋ค. NULL์ ๋ฐ๋์ '='์ด ์๋ 'IS'๋ฅผ ํจ๊ป ์ฌ์ฉํด์ผ ํ๋ค๋
๊ฒ์ ์์ง๋ง์!
๐โ ์์ธ์ง์ญ ์๊ฐ ๋ชจ์์ ๊ฐ์ตํ๋ ค๊ณ ํฉ๋๋ค. ์ฌ๋ฌด์ค์ด ์์ธ์ด๊ณ , ์ฌ๋ฌด์ค ์ ํ ๋ฒํธ ๊ตญ๋ฒ์ด 3์๋ฆฌ์ธ ์๊ฐ์ ์ด๋ฆ๊ณผ ์ฌ๋ฌด์ค ์ ํ ๋ฒํธ๋ฅผ ํ์ํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์.
๐ฉ Example Output
8 rows selected
์ด๋ฆ | ์ฌ๋ฌด์ค ์ ํ๋ฒํธ |
---|---|
๊น์คํ | 02-777-3558 |
์ํํ | 02-295-5329 |
. . . . . . | . . . . . . |
๊ณฝํ์ก | 02-714-3181 |
์ก์ฑ์ | 02-504-4275 |
SELECT
WRITER_NM ์ด๋ฆ
, OFFICE_TELNO "์ฌ๋ฌด์ค ์ ํ๋ฒํธ"
FROM TB_WRITER
WHERE OFFICE_TELNO LIKE '02%'
AND LENGTH(OFFICE_TELNO) < 12;
SELECT WRITER_NM,
OFFICE_TELNO
FROM TB_WRITER
WHERE OFFICE_TELNO LIKE '02-___-%'
ORDER BY 1;
๐ฌ Overall Comment
* ์ฒ์์ ๊ตญ๋ฒ์ด ์ง์ญ๋ฒํธ์ธ 02๋ฅผ ์๋ฏธํ๋์ค๋ก ์๊ณ ๋ฌธ์ ๊ฐ ์กฐ๊ธ ์ด์ํ๋ค๊ณ ์๊ฐ๋์์ผ๋
๊ฒ์์ ํด๋ณด๋, ๊ตญ๋ฒ์ ์ง์ญ๋ฒํธ(02)์ ๋ฐ๋ก ๋ท ๋ฒํธ๋ฅผ ์๋ฏธํ๋ ๊ฒ์ด์๋ค. ํํ;
๊ตญ๋ฒ์ ๋ท์๋ฆฌ๋ ๋ชจ๋ 4์๋ฆฌ์ผํ
๋, ๋ฐ๋ผ์ LENGTH(OFFICE_TELNO) < 12;๋ฅผ ์ฌ์ฉํ์ฌ
๊ตญ๋ฒ์ด 3์๋ฆฌ์ธ ๋ฒํธ๋ง ์กฐํํ์๋ค. ๋ฌธ์ ๋ฅผ ํด์ํ๊ณ ํ๊ธฐ ์ํด์๋ ์ด๋ฐ ๊ธฐ๋ณธ์ ์ธ ์์ ๋ํ
ํ์๋ผ๋ ๊ฒ์ ๋ ๋ฐฐ์ ๋ค.
๐โ 2006๋ 1์ ๊ธฐ์ค์ผ๋ก ๋ฑ๋ก๋์ง 31๋ ์ด์ ๋ ์๊ฐ ์ด๋ฆ์ ์ด๋ฆ์์ผ๋ก ํ์ํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์.
๐ฉ Example Output
10 rows selected
์๊ฐ ์ด๋ฆ |
---|
๊น์ ํ(้ๅปทๆผข) |
๋ฆฌ์ํฌ |
. . . . . . |
์ฒ์น์ธ |
ํฉ์์ |
SELECT
WRITER_NM "์๊ฐ ์ด๋ฆ"
FROM TB_WRITER
WHERE MONTHS_BETWEEN(TO_DATE(200601, 'YYMM'), REGIST_DATE) / 12 >= 31
ORDER BY 1;
๐โ ์์ฆ ๋ค์ด ๋ค์๊ธ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์๋ 'ํฉ๊ธ๊ฐ์ง' ์ถํ์ฌ๋ฅผ ์ํ ๊ธฐํ์ ์ ์ด๋ ค๊ณ ํฉ๋๋ค. 'ํฉ๊ธ๊ฐ์ง' ์ถํ์ฌ์์ ๋ฐํํ ๋์ ์ค ์ฌ๊ณ ์๋์ด 10๊ถ ๋ฏธ๋ง์ธ ๋์๋ช ๊ณผ ๊ฐ๊ฒฉ, ์ฌ๊ณ ์ํ๋ฅผ ํ์ํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์. ์ฌ๊ณ ์๋์ด 5๊ถ ๋ฏธ๋ง์ธ ๋์๋ โ์ถ๊ฐ์ฃผ๋ฌธํ์โ๋ก, ๋๋จธ์ง๋ โ์๋๋ณด์ โ๋ก ํ์ํ๊ณ , ์ฌ๊ณ ์๋์ด ๋ง์ ์, ๋์๋ช ์์ผ๋ก ํ์๋๋๋ก ํฉ๋๋ค.
๐ฉ Example Output
12 rows selected
๋์๋ช | ๊ฐ๊ฒฉ | ์ฌ๊ณ ์ํ |
---|---|---|
๊ทธ๋ฆฌ์ค ๋ก๋ง ์ ํ 2 | 6000 | ์๋๋ณด์ |
๋ชจ์ฌ๋ผ ๊พธ๋ฌ๊ธฐ ์ ๋ค | 8000 | ์๋๋ณด์ |
. . . . . . | . . . . . . | . . . . . . |
์ฅ๊ธธ์ฐ 9 | 7500 | ์ถ๊ฐ์ฃผ๋ฌธํ์ |
ํ๊ตญ๊ฒฝ์ ์ ๊ตฌ์กฐ์ ์ ๊ฐ | 6000 | ์ถ๊ฐ์ฃผ๋ฌธํ์ |
SELECT
BOOK_NM ๋์๋ช
, PRICE ๊ฐ๊ฒฉ
, CASE
WHEN STOCK_QTY < 5 THEN '์ถ๊ฐ์ฃผ๋ฌธํ์'
ELSE '์๋๋ณด์ '
END ์ฌ๊ณ ์ํ
FROM TB_BOOK
WHERE PUBLISHER_NM = 'ํฉ๊ธ๊ฐ์ง'
AND STOCK_QTY < 10
ORDER BY STOCK_QTY DESC, 1;
๐ฌ Overall Comment
* ์ฒ์์๋ ์ ํํจ์ DECODE๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ์ผ๋, ์๋ฆฌ์กฐ๋ฆฌ ์ฌ์ฉํ๋ค๋ณด๋ ๋น๊ต์ฐ์ฐ์ ์ฌ์ฉ์ด
๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค. ๊ทธ๋์ ์์ง ์ฌ์ฉํด๋ณด์ง ๋ชป ํ๋ CASEํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๊ณ ๊ฐ
5๊ถ ๋ฏธ๋ง์ด๋ฉด '์ถ๊ฐ์ฃผ๋ฌธํ์', ๋๋จธ์ง(ELSE)๋ '์๋๋ณด์ '๋ก ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ์๋ค.
ํจ์จ์ ์ด๊ณ ๊น๋ํ ์ฟผ๋ฆฌ๊ฐ ์์ฑ๋ ๋ฏํ์ฌ ๋ฟ๋ฏํ๋ค.
๐โ '์ํํธ๋กค' ๋์ ์๊ฐ์ ์ญ์๋ฅผ ํ์ํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์. (๊ฒฐ๊ณผ ํค๋๋ โ๋์๋ช โ,โ์ ์โ,โ์ญ์โ๋ก ํ์)
๐ฉ Example Output
1 row selected
๋์๋ช | ์ ์ | ์ญ์ |
---|---|---|
์ํํธ๋กค | ๊ณ ํธํํธ ์ํ๋ผ์ ๋ ์ฝ(GOTTHOLD EPHRAIM LESSING) | ์ค๋์ค |
SELECT
BOOK_NM ๋์๋ช
, TW1.WRITER_NM ์ ์
, TW2.WRITER_NM ์ญ์
FROM TB_BOOK TB
JOIN TB_BOOK_AUTHOR TBA ON(TB.BOOK_NO = TBA.BOOK_NO)
JOIN TB_BOOK_TRANSLATOR TBT ON(TB.BOOK_NO = TBT.BOOK_NO)
JOIN TB_WRITER TW1 ON(TBA.WRITER_NO = TW1.WRITER_NO)
JOIN TB_WRITER TW2 ON(TBT.WRITER_NO = TW2.WRITER_NO)
WHERE BOOK_NM = '์ํํธ๋กค';
๐ฌ Overall Comment
* ์ฒ์์ ๋ฌธ์ ๋ฅผ ์ฝ์์ ๋, ์ด ๋ฌธํญ์ ๋ฌด์กฐ๊ฑด SELF-JOIN์ ์ฌ์ฉํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
ํ์ง๋ง ์ค์ ๋ก ์ ์ฉ์ํค๊ธฐ์ ์ฝ๊ฐ ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ์ด ์์ด ํค๋งธ์ง๋ง ์ฒ์ฒํ ๋
ผ๋ฆฌ์ ์ผ๋ก ์๊ฐํ์ฌ
JOIN์ ์์๋ฅผ ์ ๊ฒฝ์ฐ๋ฉฐ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ ๊ฒฐ๊ณผ ์ฌ๋ฐ๋ฅธ RESULT SET์ด ์ถ๋ ฅ๋์๋ค :)
ํ์์ JOIN์ ๋จ์ฉํ๋ ์ต๊ด์ด ์๋ค๋ณด๋ ์์ฑํ๊ณ ๋์๋ ์ด๊ฒ์ด ์ต์ ์ธ์ง ์๊ตฌ์ฌ์ด ๋ค์์ง๋ง
๊ฒํ ํ ๊ฒฐ๊ณผ ํ์์๋ JOIN์ ์ ์์๋ค. ์ด๊ฒ ์ญ์ ๋ฟ๋ฏํ ๋ฌธํญ ์ค ํ๋์ด๋ค.
๐โ ํ์ฌ ๊ธฐ์ค์ผ๋ก ์ต์ด ๋ฐํ์ผ๋ก๋ถํฐ ๋ง 30๋ ์ด ๊ฒฝ๊ณผ๋๊ณ , ์ฌ๊ณ ์๋์ด 90๊ถ ์ด์์ธ ๋์์ ๋ํด ๋์๋ช , ์ฌ๊ณ ์๋, ์๋ ๊ฐ๊ฒฉ, 20% ์ธํ ๊ฐ๊ฒฉ์ ํ์ํ๋ SQL ๊ตฌ๋ฌธ์ ์์ฑํ์ธ์. (๊ฒฐ๊ณผ ํค๋๋ โ๋์๋ช โ, โ์ฌ๊ณ ์๋โ, โ๊ฐ๊ฒฉ(Org)โ, โ๊ฐ๊ฒฉ(New)โ๋ก ํ์. ์ฌ๊ณ ์๋์ด ๋ง์ ์, ํ ์ธ ๊ฐ๊ฒฉ์ด ๋์ ์, ๋์๋ช ์์ผ๋ก ํ์)
๐ฉ Example Output
58 rows selected
๋์๋ช | ์ฌ๊ณ ์๋ | ๊ฐ๊ฒฉ(Org) | ๊ฐ๊ฒฉ(New) |
---|---|---|---|
์ฌ๊ณผ๋๋ฌด๋ฐญ ๋ฌ๋_1978๋ ํ | 98 | 8500 | 6800 |
๋ฌธํ๊ณผ ์์ ์ ์ฌํ์ฌ 4 | 98 | 8000 | 6400 |
. . . . . . | . . . . . . | . . . . . . | . . . . . . |
๋์ค๋์ด | 90 | 2000 | 1600 |
์ฐฝ์๊ณผ๋นํ 49ํธ(78๋ ๊ฐ์ํธ) | 90 | 800 | 640 |
SELECT
BOOK_NM ๋์๋ช
, STOCK_QTY ์ฌ๊ณ ์๋
, PRICE "๊ฐ๊ฒฉ(Org)"
, (PRICE - PRICE * 0.2) "๊ฐ๊ฒฉ(New)"
FROM TB_BOOK
WHERE MONTHS_BETWEEN(SYSDATE, ISSUE_DATE) / 12 >= 30
AND STOCK_QTY >= 90
ORDER BY 2 DESC, 4 DESC, 1;