- Structured Query Language
- NoSQL์์ ์ฌ์ฉํ์ง ์์
- DBMS๋ง๋ค SQL์ ์ฐจ์ด๊ฐ ์์ ์ ์์
- ANSI(American National Standards Institute) ์์ ํ์ค SQL์ ์ ์
- ANSI ํ์ค์ผ๋ก ์์ฑ๋ SQL์ ๋ชจ๋ DBMS์์ ํธํ
- ORACLE, MySQL์์๋ ํ์ค์ ์งํค์ง ์๊ธฐ๋ ํ๋ค๊ณ ํจ, PostgreSQL์ ๋น๊ต์ ํ์ค์ ์ ์งํจ๋ค๊ณ ํจ
-- ANSI
SELECT Test1.*, Test2.name
FROM Test1 LEFT OUTER JOIN Test2
ON Test1.num = Test2.num
-- ORACLE
SELECT Test1.*, Test2.name
FROM Test1 , Test2
WHERE Test1.num = Test2.num(+)
-- MySQL
SELECT Test1.*, Test2.name
FROM Test1 , Test2
WHERE Test1.num *= Test2.num- SQL์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์
- ์ผ๋ฐ์ ์ผ๋ก ๋๋ฌธ์๋ ํค์๋, ์๋ฌธ์๋ ์ด๋ฆ, ๊ฐ, ๋ณ์ ๋ฑ์ ์๋ฏธ
- PL/SQL : ORACLE์ด SQL์ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ก ํ์ฅ์ํจ ์ธ์ด
- if, for, ๋ณ์ ์ฌ์ฉ ๋ฑ ๊ฐ๋ฅ
- ๊ฒ์์ด ์์๋ ๋์์ก์ง๋ง, ๋ถ์์
- bigint :
$-2^63 \sim 2^63-1$ , 8๋ฐ์ดํธ - int :
$-2^31 \sim 2^31-1$ , 4๋ฐ์ดํธ - smallint :
$-2^15 \sim 2^15-1$ , 2๋ฐ์ดํธ - tinyint :
$0 \sim 255$
- numeric(=deciaml), float, real
- date : 0000-01-01 ~ 9999-12-31, 3๋ฐ์ดํธ
- datetime : 1753-01-01 ~ 9999-12-31, 00:00:00 ~ 23:59:59.997, 8๋ฐ์ดํธ
- datetime2 : 0000-01-01 ~ 9999-12-31, 00:00:00 ~ 23:59:59.9999999, 7~8๋ฐ์ดํธ
- datetimeoffset : ํ์ค ์๊ฐ๋๋ฅผ ์ธ์ํ 24์๊ฐ ๊ธฐ์ค ์๊ฐ๊ณผ ๊ฒฐํฉ๋ ๋ ์ง, datetime2 + ์๊ฐ๋, 10๋ฐ์ดํธ
- time : ํ์ค ์๊ฐ๋๋ฅผ ์ธ์ํ์ง ์๋ 24์๊ฐ ๊ธฐ์ค ์๊ฐ, 5๋ฐ์ดํธ
- char[n] : ๊ณ ์ ๊ธธ์ด ๋ฌธ์์ด ๋ฐ์ดํฐ
- varchar[n|max] : ๊ฐ๋ณ๊ธธ์ด ๋ฌธ์์ด ๋ฐ์ดํฐ
- ntext, text, image
- nchar, nvarchar
- binary, varbinary, image
-- ํ
์ด๋ธ ์์ฑ
CREATE TABLE My_table(
my_field1 INT,
my_field2 VARCHAR(50),
my_field3 DATE NOT NULL,
PRIMARY KEY (my_field1, my_field2)
);
-- ํ
์ด๋ธ ์์
ALTER TABLE My_table ADD my_field4 NUMBER(3) NOT NULL;- primary key, ๊ธฐ๋ณธํค : RDB์์ ์๋ณ์๋ก ์ฌ์ฉํ๋ ํค
- alter๋ ํ ์ด๋ธ, ์ปฌ๋ผ ์ด๋ฆ ๋ณ๊ฒฝ, ์ปฌ๋ผ ์ถ๊ฐ ๋ฑ ๊ฐ๋ฅ, ํ ์ด๋ธ ์ด๋ฆ ๋ณ๊ฒฝ์ ์ฃผ๋ก rename์ฌ์ฉ
- ์ฒ๋ฆฌ ์์ : FROM > ON > JOIN > WHERE > GROUP BY > WITH CUBE/ROLLUP > HAVING > SELECT > DISTINCE > ORDERED BY > TOP
- ๊ธฐ๋ณธ ๊ตฌ์กฐ
SELECT [ALL | DISTINCT] ์ปฌ๋ผ๋ช
[,์ปฌ๋ผ๋ช
...]
FROM ํ
์ด๋ธ๋ช
[,ํ
์ด๋ธ๋ช
...]
[WHERE ์กฐ๊ฑด์]
[GROUP BY ์ปฌ๋ผ๋ช
[HAVING ์กฐ๊ฑด์]]
[ORDER BY ์ปฌ๋ผ๋ช
]
GROUP BY ์ปฌ๋ผ๋ช
[,์ปฌ๋ผ๋ช
...]
ORDER BY ์ปฌ๋ผ๋ช
[,์ปฌ๋ผ๋ช
...]| ์กฐ๊ฑด | ์ฐ์ฐ์ | ์ |
|---|---|---|
| ๋น๊ต | =, <, >, <=, >= | price < 20000 |
| ๋ฒ์ | BETWEEN | price BETWEEN 10000 AND 20000 |
| ์งํฉ | IN, NOT IN | price IN (10000, 20000, 30000) |
| ํจํด | LIKE | bookname LIKE '์ผ๊ตฌ' |
| NULL | IS NULL, IS NOT NULL | price IS NULL |
| ๋ณตํฉ์กฐ๊ฑด | AND, OR, NOT | (price < 20000) AND (bookname LIKE '์ผ๊ตฌ) |
| ์์ผ๋ ๋ฌธ์ | ์๋ฏธ | ์ |
|---|---|---|
| + | ๋ฌธ์ ์ฐ๊ฒฐ | 'python' + 'Django' |
| % | 0๊ฐ ์ด์ ๋ฌธ์์ ์ผ์น | '%์ผ๊ตฌ%' |
| [] | 1๊ฐ์ ๋ฌธ์์ ์ผ์น | '[0-5]%' 0-5 ์ฌ์ด ์ซ์๋ก ์์ํ๋ ๋ฌธ์์ด |
| [^] | 1๊ฐ์ ๋ฌธ์์ ๋ถ์ผ์น | '[0-5]%' 0-5 ์ฌ์ด ์ซ์๋ก ์์ํ์ง ์๋ ๋ฌธ์์ด |
| - | ํน์ ์์น์ 1๊ฐ ๋ฌธ์์ ์ผ์น | '_๊ตฌ%' |
- SUM, AVG, COUNT, MAX, MIN
- SQL ์์
-- WHERE ์ฌ์ฉ
SELECT * FROM documnet where author='๊น์ธํผ';
SELECT * FROM document where nom BETWEEN 1 AND 10;
-- ์งํฉ ์ฐ์ฐ
SELECT name FROM customer
EXCEPT
SELECT name FROM customer WHERE custid IN (SELECT custid FROM Orders)- FROM์ ์์ ์ฌ๋ฌ ํ ์ด๋ธ์ ์ง์ ํ๋ฉด, JOIN์ ํตํ์ฌ ์ฌ์ฉ
SELECT * FROM table1, table2;
SELECT * FROM table1, table2 WHERE table1.field1 = table1.field2;- INNER JOIN : ๋ ํ ์ด๋ธ์ ์กฐ์ธํ ๋, ๋ ํ ์ด๋ธ์ ๋ชจ๋ ์ง์ ํ ์ด์ ๋ฐ์ดํฐ๊ฐ ์์
- OUTER JOIN : ๋ ํ ์ด๋ธ์ ์กฐ์ธํ ๋, 1๊ฐ์ ํ ์ด๋ธ์๋ง ๋ฐ์ดํฐ๊ฐ ์์ด๋ ๊ฒฐ๊ณผ๊ฐ ๋์ด
- CROSS JOIN : ํ ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ํ๊ณผ ๋ค๋ฅธ ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ์กฐ์ธํ๋ ๊ธฐ๋ฅ
- SELF JOIN : ์์ ๊ณผ ์กฐ์ธ, 1๊ฐ์ ํ ์ด๋ธ ์ฌ์ฉ ํ ๋
INSERT INTO table(field1, field2, ...) VALUES(value1, value2, ...);
UPDATE table SET field1=value1, field2=value2, {WHERE ์กฐ๊ฑด};
DELETE FROM table {WHERE ์กฐ๊ฑด};- INSERT๋ ๋ชจ๋ ํ ์ด๋ธ ๊ฐ์ ์ ๋ ฅํ๋ฉด tableํญ๋ชฉ์ด ์์ด๋ ๋จ
- UPDATE๋ WHERE์ด ์์ผ๋ฉด ๋ชจ๋ ํญ๋ชฉ ๊ฐ์ด ๋ณ๊ฒฝ๋จ
- DELETE์ WHERE์กฐ๊ฑด์ด ์์ผ๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ ์ญ์
- ๋ชจ๋ ๋ฐ์ดํฐ ์ญ์ ๋ฅผ ํ ๋, TRUNCATE๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ํ ์ด๋ธ ์ด๊ธฐํ
- DELETE๋ ๋ฐ์ดํฐ๋ง ์ญ์ ํจ
- https://developerking.tistory.com/6
- https://ko.wikipedia.org/wiki/SQL
- https://namu.wiki/w/SQL/%EB%AC%B8%EB%B2%95
- https://dev.mysql.com/doc/refman/8.0/en/preface.html
- https://docs.oracle.com/cd/B14117_01/index.htm
- http://www.mysqlkorea.com/sub.html?mcode=manual&scode=01&lang=k
- https://velog.io/@codepark_kr/Oracle-%EC%9E%85%EB%AC%B8-%EC%8B%A4%EC%A0%846-Join1-ANSI-Standard-%EC%9E%91%EC%84%B1%EC%A4%91-%EC%9E%84%EC%8B%9C%EC%A0%80%EC%9E%A5
- https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

