์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Absolute
- AGI
- ai
- AI agents
- AI engineer
- AI researcher
- ajax
- algorithm
- Algorithms
- aliases
- Array ๊ฐ์ฒด
- ASI
- bayes' theorem
- Bit
- Blur
- BOM
- bootstrap
- canva
- challenges
- ChatGPT
- Today
- In Total
A Joyful AI Research Journey๐ณ๐
[50] 230310 SQL Ch. 6 ๋ฐ์ดํฐ๋ฒ ์ด์ค์ SQL: 25๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด, 26๊ฐ ํ ์ด๋ธ ์์ฑ, ์ญ์ , ๋ณ๊ฒฝ, 27๊ฐ ์ ์ฝ, 28๊ฐ ์ธ๋ฑ์ค ๊ตฌ์กฐ, 29๊ฐ ์ธ๋ฑ์ค ์์ฑ๊ณผ ์ญ์ , 30๊ฐ ๋ทฐ ์์ฑ๊ณผ ์ญ์ [K-๋์งํธ ํธ๋ ์ด๋ 50์ผ] ๋ณธ๋ฌธ
[50] 230310 SQL Ch. 6 ๋ฐ์ดํฐ๋ฒ ์ด์ค์ SQL: 25๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด, 26๊ฐ ํ ์ด๋ธ ์์ฑ, ์ญ์ , ๋ณ๊ฒฝ, 27๊ฐ ์ ์ฝ, 28๊ฐ ์ธ๋ฑ์ค ๊ตฌ์กฐ, 29๊ฐ ์ธ๋ฑ์ค ์์ฑ๊ณผ ์ญ์ , 30๊ฐ ๋ทฐ ์์ฑ๊ณผ ์ญ์ [K-๋์งํธ ํธ๋ ์ด๋ 50์ผ]
yjyuwisely 2023. 3. 10. 12:50230310 Fri 50th class
Ch. 6 ๋ฐ์ดํฐ๋ฒ ์ด์ค์ SQL
์ง๋: p. 245 (27.3 ์ ์ฝ ์ญ์ ) ~ (๊ต์ฌ: SQL ์ฒซ๊ฑธ์, ์ ์: ์์ฌ์ด ์์ธ ์)
MySQL Workbench Manual: https://dev.mysql.com/doc/workbench/en/
MySQL ํํ ๋ฆฌ์ผ: https://www.tutorialspoint.com/mysql/
SQLD ์์ฝ pdf: https://yurimac.tistory.com/40
์ฑ
์์ฝ (9p) pdf: https://brunch.co.kr/@ydy702/10
์ค๋ ๋ฐฐ์ด ๊ฒ ์ค ๊ธฐ์ตํ ๊ฒ์ ์ ๋ฆฌํ๋ค.
๋ชฐ๋๋ ๊ฒ
VARCHAR Datatype
The VARCHAR datatype is synonymous with the VARCHAR2 datatype. To avoid possible changes in behavior, always use the VARCHAR2 datatype to store variable-length character strings.
๊ฒฐ๋ก : varchar2๋ก ์ฐ๋ ๊ฒ ๋ซ๋ค.
์ฐธ๊ณ : https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1824
A query in a database is a request for information from a database management system (DBMS), which is the software program that maintains data. Users can make a query to retrieve data or change information in a database, such as adding or removing data.
์ฟผ๋ฆฌ๋ ์น ์๋ฒ์ ํน์ ํ ์ ๋ณด๋ฅผ ๋ณด์ฌ๋ฌ๋ผ๋ ์น ํด๋ผ์ด์ธํธ ์์ฒญ(์ฃผ๋ก ๋ฌธ์์ด์ ๊ธฐ๋ฐ์ผ๋ก ํ ์์ฒญ)์ ์ํ ์ฒ๋ฆฌ์ด๋ค.
Ch. 6 ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด ์์ฑ๊ณผ ์ญ์
์ฑ ์ ๋ชฉ์ฐจ
__25๊ฐ__๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด
1. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด
2. ์คํค๋ง
__26๊ฐ__ํ ์ด๋ธ ์์ฑ, ์ญ์ , ๋ณ๊ฒฝ
1. ํ ์ด๋ธ ์์ฑ
2. ํ ์ด๋ธ ์ญ์
3. ํ ์ด๋ธ ๋ณ๊ฒฝ
4. ALTER TABLE๋ก ํ ์ด๋ธ ๊ด๋ฆฌ
__27๊ฐ__์ ์ฝ
1. ํ ์ด๋ธ ์์ฑ์ ์ ์ฝ ์ ์
2. ์ ์ฝ ์ถ๊ฐ
3. ์ ์ฝ ์ญ์
4. ๊ธฐ๋ณธํค
__28๊ฐ__์ธ๋ฑ์ค ๊ตฌ์กฐ
1. ์ธ๋ฑ์ค
2. ๊ฒ์์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ
3. ์ ์ผ์ฑ
__29๊ฐ__์ธ๋ฑ์ค ์์ฑ๊ณผ ์ญ์
1. ์ธ๋ฑ์ค ์์ฑ
2. ์ธ๋ฑ์ค ์ญ์
3. EXPLAIN
4. ์ต์ ํ
__30๊ฐ__๋ทฐ ์์ฑ๊ณผ ์ญ์
1. ๋ทฐ
2. ๋ทฐ ์์ฑ๊ณผ ์ญ์
3. ๋ทฐ์ ์ฝ์
25๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด
25.1 ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด: ํ
์ด๋ธ์ด๋ ๋ทฐ, ์ธ๋ฑ์ค ๋ฑ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ์ ์ํ๋ ๋ชจ๋ ๊ฒ
์ฌ๊ธฐ์ ๊ฐ์ฒด = ๋ฐ์ดํธ๋ฒ ์ด์ค ๊ฐ์ฒด
๊ฐ์ฒด: ์ค์ฒด๋ฅผ ๊ฐ์ง๋ ์ด๋ค ๊ฒ ex) ํ
์ด๋ธ
์ด๋ฆ ์ ์ฝ ์ฌํญ(๋ช
๋ช
๊ท์น)
- [ํฌ์ธํธ] ์๋ฏธ์๋ ์ด๋ฆX
- ๊ธฐ์กด ์ด๋ฆ์ด๋ ์์ฝ์ด์ ์ค๋ณตX
- ์ซ์๋ก ์์X
- ์ธ๋์ค์ฝ์ด(_) ์ธ์ ๊ธฐํธ ํ์ฉX
- ํ๊ธ์ ์ฌ์ฉํ ๋๋ " "๋๋ธ์ฟผํธ๋ก ๋๋ฌ์ผ๋ค.
- ์์คํ
์ด ํ์ฉํ๋ ๊ธธ์ด ์ด๊ณผX
25.2 ์คํค๋ง
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด๋ ์คํค๋ง๋ผ๋ ๊ทธ๋ฆ์์ ๋ง๋ค์ด์ง๋ค.
๊ฐ์ฒด์ ์ด๋ฆ์ด ๊ฐ์๋ ์คํค๋ง๊ฐ ์๋ก ๋ค๋ฅด๋ฉด ์๊ด ์๋ค. (๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด = ์คํค๋ง ๊ฐ์ฒด)
The database schema is the structure of a database described in a formal language supported by the database management system.
์คํค๋ง ์ค๊ณ: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ
์ด๋ธ์ ์์ฑํด์ ๊ตฌ์ถํด๋๊ฐ๋ ์์
์คํค๋ง ์์
ex) MySQL: CREATE DATABASE ๋ช
๋ น์ผ๋ก ์์ฑํ '๋ฐ์ดํฐ๋ฒ ์ด์ค'(์ ์ฅ์ฅ์น ๋ด์ ์ ๋ฆฌ๋์ด ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์งํฉ)
Oracle: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์๊ฐ ๊ณ์ธต์ ์คํค๋ง
๋ค์์คํ์ด์ค(namespace): ์ด๋ฆ์ด ์ถฉ๋ํ์ง ์๋๋ก ๊ธฐ๋ฅํ๋ ๊ฒ
ex) ์คํค๋ง, ํ
์ด๋ธ
26๊ฐ ํ ์ด๋ธ ์์ฑ, ์ญ์ , ๋ณ๊ฒฝ
Ctrl + Enter๋ก ์คํ => SCHEMAS์์ ์๋ก๊ณ ์นจ ๋๋ฆ
๋ฐ์ดํฐ ์ ํ
- CHAR(s): ๊ณ ์ ๊ธธ์ด ๋ฌธ์์ด ์ ๋ณด, ์ต๋ ๊ธธ์ด๋งํผ ๊ณต๊ฐ ์ฑ์ ‘AA’ = ‘AA ’
- VARCHAR(s) : ๊ฐ๋ณ ๊ธธ์ด ๋ฌธ์์ด ์ ๋ณด, ํ ๋น๋ ๋ณ์ ๊ฐ์ ๋ฐ์ดํธ๋ง ์ ์ฉ ‘AA’ != ‘AA’
- NUMBER: ์ ์, ์ค์ ๋ฑ ์ซ์ ์ ๋ณด
- DATE: ๋ ์ง์ ์๊ฐ ์ ๋ณด
no | a | b | newcol |
1 | 10ABC | 2014-01-01 | NULL |
2 | 20ABC | 2014-01-02 | NULL |
26.1 ํ ์ด๋ธ ์์ฑ CREATE TABLE ํ ์ด๋ธ๋ช
ํ
์ด๋ธ ์์ฑ
create table ํ
์ด๋ธ๋ช
(
์ด ์ ์1,
์ด ์ ์2,
.....
)
create table sample62(
no,
a,
b,
newcol
)
์ด ์ ์
์ด๋ช
์๋ฃํ [DEFAULT ๊ธฐ๋ณธ๊ฐ] [NULL|NOT NULL]
ํ
์ด๋ธ ์์ฑ
create table ํ
์ด๋ธ๋ช
(
์ด์ด๋ฆ1 ์๋ฃํ [๊ธฐ๋ณธ๊ฐ] [NULL|NOT NULL],
์ด์ด๋ฆ2 ์๋ฃํ [๊ธฐ๋ณธ๊ฐ] [NULL|NOT NULL],
.....
)
create table sample62(
no INTEGER NOT NULL,
a varchar(30),
b,
newcol
)
26.2 ํ ์ด๋ธ ์ญ์ DROP TABLE ํ ์ด๋ธ๋ช
ํ ์ด๋ธ๊ณผ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ํจ๊ป ์ญ์ ํ๋ค.
DROP TABLE ํ
์ด๋ธ๋ช
SQL ๋ช ๋ น์ ๊ฒฝ์ฐ ์ฌํ์ธ ๋ฉ์์ง๊ฐ ํ์๋์ง ์์ผ๋ ์ ์คํ๊ฒ DROP TABLE์ ์คํํ๋ค.
- ๋ฐ์ดํฐ ํ ์ญ์
TRUNCATE TABLE ํ
์ด๋ธ๋ช
TRUNCATE TABLE removes all rows from a table, but the table structure and its columns, constraints, indexes, and so on remain. To remove the table definition in addition to its data, use the DROP TABLE statement.
26.3 ํ
์ด๋ธ ๋ณ๊ฒฝ
ALTER TABLE ํ
์ด๋ธ๋ช
ADD ์ด ์ ์ (INTERGER)
ALTER TABLE ํ
์ด๋ธ๋ช
MODIFY ์ด ์ ์ (VARCHAR(20))
ALTER TABLE ํ
์ด๋ธ๋ช
CHANGE ๊ธฐ์กด์ด์ด๋ฆ ์ ๊ท์ด๋ช
์ ๊ท์๋ฃํ
ALTER TABLE ํ
์ด๋ธ๋ช
DROP ์ด๋ช
์ด ๊ตฌ์ฑ์ ๋ณ๊ฒฝํ๋ค. (CREATE TABLE ์ฌ์ฉ์ด ์๋๋ค.)
ex) ์ด์ ์ถ๊ฐํ๊ฑฐ๋ ๋ฐ์ดํฐ ์ต๋๊ธธ์ด๋ฅผ ๋ณ๊ฒฝํ๋ค.
- ์ด ์ถ๊ฐ, ์ญ์ , ๋ณ๊ฒฝ
- ์ ์ฝ ์ถ๊ฐ, ์ญ์
ALTER TABLE ํ
์ด๋ธ๋ช
๋ณ๊ฒฝ๋ช
๋ น
ALTER TABLE ํ
์ด๋ธ๋ช
ADD ์ด ์ ์ -- ์ด ์ถ๊ฐ
ALTER TABLE ํ
์ด๋ธ๋ช
MODIFY ์ด ์ ์ -- ์ด ์์ฑ ๋ณ๊ฒฝ
ALTER TABLE ํ
์ด๋ธ๋ช
CHANGE [๊ธฐ์กด ์ด ์ด๋ฆ][์ ๊ท ์ด ์ ์] -- ์ด ์ด๋ฆ ๋ณ๊ฒฝ
ALTER TABLE ํ
์ด๋ธ๋ช
DROP ์ด๋ช
-- ์ด ์ญ์
create database sample; -- sample ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
use sample; -- ์๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์์ sample ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉ
create table sample62( -- sample62ํ
์ด๋ธ ์์ฑ
no integer not null,
a varchar(30),
b date
);
-- drop table sample62 -- sample62ํ
์ด๋ธ์ ์ญ์
-- ํ
์ด๋ธ ๋ณ๊ฒฝ
alter table sample62 add newcol int; -- newcol์ด์ ์ถ๊ฐ(add)
alter table sample62 modify a varchar(20); -- a์ด์ ๋ฌธ์ ์ต๋ ๊ธธ์ด๋ฅผ 30->20์ผ๋ก ๋ณ๊ฒฝ(modify)
alter table sample62 change newcol c varchar(20); -- newcol์ด์ ์ด๋ฆ์ c์ด๋ก ๋ฐ๊พธ๊ณ , ํ์
์ int->varchar(20) (change)sample62sample62
desc sample62; -- descending order
insert into sample62(no, a,c) values(1, 'abc','def')
26.4 ALTER TABLE๋ก ํ
์ด๋ธ ๊ด๋ฆฌ p. 240
- ์ฉ๋์ด ๋ถ์กฑํ ๊ฒฝ์ฐ ALTER TABLE๋ก ์ด์ ์๋ฃํ๋ง ๋ณ๊ฒฝํด ์ต๋ ๊ธธ์ด ์ฐ์ฅ
๋ฐ์ดํฐ ํ๋์ ํฌ๊ธฐ๋ฅผ ์ต์ ํํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝํ ์ ์๋ค.
ex) ๋ฌธ์์ดํ์ ๊ฒฝ์ฐ ์ต๋๊ธธ์ด๋ฅผ ์ง์ ํ๋๋ฐ, ์ด ์ต๋๊ธธ์ด๋ฅผ ALTER TABLE๋ก ๋๋ฆด ์ ์๋ค.
ALTER TABLE sample MODIFY col VARCHAR(30)
์ต๋๊ธธ์ด๋ฅผ ๋๋ฆฌ๋ ๊ฒฝ์ฐ๋ ๋ง์ง๋ง ์ค์ด๋ ๊ฒฝ์ฐ๋ ๋ณ๋ก ์๋ค.
- ํ ์ด๋ธ์ ALTER TABLE๋ก ์ด ์ถ๊ฐ
ALTER TABLE sample ADD new_col INTEGER
๋ฌธ์ ํ์ด)
create database sample; -- sample ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
use sample;
create table sample631(
a int not null,
b int primary key,
c varchar(30)
);
1. ์๋ sql๋ฌธ์ฅ์ ์คํ์ด ๋์ง ์์ต๋๋ค. ๊ทธ ์ด์ ๋ฅผ ์ ์ด๋ณด์ธ์.
create database sample; -- sample ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
use sample;
create table sample631(
a int not null,
b int primary key,
c varchar(30)
);
insert into sample631(b,c) values(3,'๊ทธ๋ฆฐ์ด');
select * from sample631;
ํด๊ฒฐ: a๋ฅผ ๋ฃ์ด์ ์ด๋ค ๊ฐ์ ์ง์ ํ๋ค.
2. ์๋ sql๋ฌธ์ฅ์ ์คํ์ด ๋์ง ์์ต๋๋ค. ๊ทธ ์ด์ ๋ฅผ ์ ์ด๋ณด์ธ์.
create database sample; -- sample ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
use sample;
create table sample631(
a int not null,
b int primary key,
c varchar(30)
);
insert into sample631(a,b) values(2,2);
select * from sample631;
primary key ํด๋น ํ๋๊ฐ NOT NULL๊ณผ UNIQUE ์ ์ฝ ์กฐ๊ฑด์ ํน์ง์ ๋ชจ๋ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. ex) ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ
2, 2 ์ค๋ณต์ด์ด์ ์ ๋๋ค.
3. ์๋ sql ๋ฌธ์ฅ์ด ์คํ๋๋์ง ์ ๋๋์ง ์์ํด ๋ณด๊ณ , ๊ทธ ์ด์ ๋ฅผ ์ ์ด๋ณด์ธ์
insert into sample631 values(1,3,'๊ทธ๋ฆฐ์ด'); -- ๋๋ค.
insert into sample631 values(1,3); -- ์ ๋๋ค.
๊ดํธ๋ฅผ ์๋ตํ๋ฉด ํ ์ด๋ธ์ ๋ชจ๋ ์ด์ ๋ค ๋ฃ๋๋ค๋ ๋ป์ด๋ค.
27๊ฐ ์ ์ฝ
null | ์ค๋ณต๊ฐ | ||
X | O | not null | ํด๋น ํ๋๋ NULL ๊ฐ์ ์ ์ฅํ ์ ์๊ฒ ๋ฉ๋๋ค. (ํ์ ์ ๋ ฅ) |
O | X | unique (๊ณ ์ ํค) |
ํด๋น ํ๋๋ ์๋ก ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ ธ์ผ๋ง ํฉ๋๋ค. |
X | X | primary key (๊ธฐ๋ณธํค) |
ํด๋น ํ๋๊ฐ NOT NULL๊ณผ UNIQUE ์ ์ฝ ์กฐ๊ฑด์ ํน์ง์ ๋ชจ๋ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. ex) ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ, ํ์๊ฐ์ ํ ๋ ID |
์ ์ฝ์กฐ๊ฑด: ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ ์ ์ง
1. PRIMARY KEY(๊ธฐ๋ณธํค) : UNIQUE & NOT NULL
2. UNIQUE KEY(๊ณ ์ ํค) : ๊ณ ์ ํค ์ ์
3. NOT NULL : NULL ๊ฐ ์
๋ ฅ๊ธ์ง
4. CHECK : ์
๋ ฅ ๊ฐ ๋ฒ์ ์ ํ
5. FOREIGN KEY(์ธ๋ํค) : NULL ๊ฐ๋ฅ ์ฌ๋ฌ ์์ฑ๊ฐ๋ฅ
์ฐธ๊ณ : https://www.w3schools.com/sql/sql_foreignkey.asp
์ ์ฝ ์กฐ๊ฑด(constraint): ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ์งํค๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ ์คํ๋๋ ๊ฒ์ฌ ๊ท์น์ ์๋ฏธํฉ๋๋ค.
์ด๋ฌํ ์ ์ฝ ์กฐ๊ฑด์ CREATE ๋ฌธ์ผ๋ก ํ ์ด๋ธ์ ์์ฑํ ๋๋, ALTER ๋ฌธ์ผ๋ก ํ๋๋ฅผ ์ถ๊ฐํ ๋๋ ์ค์ ํ ์๋ ์์ต๋๋ค.
CREATE TABLE ๋ฌธ์์ ์ฌ์ฉํ ์ ์๋ ์ ์ฝ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. NOT NULL : ํด๋น ํ๋๋ NULL ๊ฐ์ ์ ์ฅํ ์ ์๊ฒ ๋ฉ๋๋ค.
2. UNIQUE : ํด๋น ํ๋๋ ์๋ก ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ ธ์ผ๋ง ํฉ๋๋ค.
3. PRIMARY KEY : ํด๋น ํ๋๊ฐ NOT NULL๊ณผ UNIQUE ์ ์ฝ ์กฐ๊ฑด์ ํน์ง์ ๋ชจ๋ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
4. FOREIGN KEY : ํ๋์ ํ ์ด๋ธ์ ๋ค๋ฅธ ํ ์ด๋ธ์ ์์กดํ๊ฒ ๋ง๋ญ๋๋ค.
5. DEFAULT : ํด๋น ํ๋์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํฉ๋๋ค.
27.1 ํ ์ด๋ธ ์์ฑ ์ ์ ์ฝ ์ ์
27.2 ์ ์ฝ ์ถ๊ฐ
create database sample; -- sample ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
use sample;
create table sample631(
a integer not null,
b integer not null unique,
c varchar(30)
);
insert into sample631 (a,b,c) values(1,1,'์ ์๋ฐ');
select * from sample631;
insert into sample631 (a,b,c) values(1,1,'์ ์๋ฐ'); -- Error Code: 1062. Duplicate entry '1' for key 'sample631.b'
create table sample631(
a int not null,
b int primary key
c varchar(30)
);
create table sample631(
a int not null,
b int,
c varchar(30)
primary key(b) -- ๋์ค์ ์ญ์ ๊ฐ๋ฅํ๋ฏ๋ก ์ด ํํ๋ก ์ด๋ค.
);
create table sample631(
a int not null,
b int,
c varchar(30)
constraint ์ ์ฝ์กฐ๊ฑด๋ช
primary key(b) -- ์ ์ฝ ์ด๋ฆ์ constraint ํค์๋๋ฅผ ์ฌ์ฉํด์ ์ง์ ํ๋ค.
);
- ์ด ์ ์ฝ ์กฐ๊ฑด ์ถ๊ฐ
c ์ด์ NOT NULL ์ ์ฝ์ ์ค์ ํ๋ ์
ALTER TABLE sample631 MODIFY c VARCHAR (30) NOT NULL;
- ํ
์ด๋ธ ์ ์ฝ ์ถ๊ฐ
๊ธฐ๋ณธํค ์ ์ฝ์ ์ถ๊ฐํ๋ ์
ALTER TABLE sample631 ADD CONSTRAINT pkey_sample631 PRIMARY KEY(a);
27.3 ์ ์ฝ ์ญ์ p. 245
create database sample; -- sample ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
use sample;
CREATE TABLE sample631 (
a INT NOT NULL,
b INT PRIMARY KEY,
c VARCHAR(30)
);
insert into sample631 values(1,3,'๊ทธ๋ฆฐ์ด');
SELECT * FROM sample631;
-- c์ด์ not null ์ ์ฝ ์ถ๊ฐ
alter table sample631 modify c varchar(30) not null;
-- c์ด์ not null ์ ์ฝ ์ญ์
alter table sample631 modify c varchar(30);
desc sample631;
-- a์ด์ primary key(๊ธฐ๋ณธํค) ์ ์ฝ ์ถ๊ฐ
alter table sample631 add constraint pkey_sample631 primary key(a);
-- a์ด์ primary key(๊ธฐ๋ณธํค) ์ ์ฝ ์ญ์ (์ ์ฝ์กฐ๊ฑด์ด๋ฆ์ด ์์ ๊ฒฝ์ฐ: pkey_sample631)
alter table sample631 drop constraint pkey_sample631;
-- a์ด์ primary key(๊ธฐ๋ณธํค) ์ ์ฝ ์ญ์ (์ ์ฝ์กฐ๊ฑด์ด๋ฆ์ด ์์ ๊ฒฝ์ฐ)
alter table sample631 drop primary key;
desc sample631;
select * from sample631;
delete from sample631;
27.4 ๊ธฐ๋ณธํค p. 246
๊ธฐ๋ณธํค(primary key): ํด๋น ํ๋๊ฐ NOT NULL๊ณผ UNIQUE(์ค๋ณต๊ฐX) ์ ์ฝ ์กฐ๊ฑด์ ํน์ง์ ๋ชจ๋ ๊ฐ์ง๊ฒ ๋๋ค.
ex) ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ, ํ์๊ฐ์
ํ ๋ ID
๊ธฐ๋ณธํค ์ ์ฝ: ์ด์ ๊ธฐ๋ณธํค๋ก ์ง์ ํด ์ ์ผํ ๊ฐ์ ๊ฐ์ง๋๋ก ํ๋ ๊ตฌ์กฐ, ์ ์ผ์ฑ ์ ์ฝ์ผ๋ก๋ ๋ถ๋ฆฐ๋ค.
[ํฌ์ธํธ] ๊ธฐ๋ณธํค ์ ์ฝ์ด ์ค์ ๋ ์ด์๋ ์ค๋ณต๋ ๊ฐ์ ์ ์ฅํ ์ ์๋ค.
create database sample; -- sample ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
use sample;
-- sample634 ํ
์ด๋ธ ์์ฑ
create table sample634(
-- p๋ผ๋ ์ด๋ฆ์ ์ด์ null๊ฐ์ ํ์ฉํ์ง ์์
p integer not null,
-- a๋ผ๋ ์ด๋ฆ์ ์ต๋ ๋ฌธ์์ด์ 30์ผ๋ก ์ค์
a varchar(30),
-- p์ด์ ๊ธฐ๋ณธํค(์ ์ฝ์กฐ๊ฑด)๋ฅผ ์ค์ ํ๊ณ ๊ทธ ์ ์ฝ์กฐ๊ฑด์ ์ด๋ฆ์ pkey_smaple634๋ก ์ค์
constraint pkey_sample634 primary key(p)
);
insert into sample634 values (1,'์ฒซ์งธ์ค');
insert into sample634 values (2,'๋์งธ์ค');
insert into sample634 values (3,'์
์งธ์ค');
insert into sample634 values (2, '๋ท์งธ์ค');
-- Error Code: 1062. Duplicate entry '2' for key 'sample634.PRIMARY' : p์ด์ ๊ฐ์ด ์ค๋ณต์ด๋ฏ๋ก
update sample634 set p=2 where p=3; -- where: ํํฐ๋ง ์กฐ๊ฑด, ์ด ํํฐ๋ง์ด ์์ผ๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ 2๋ก ๋๋ค.
-- Error Code: 1062. Duplicate entry '2' for key 'sample634.PRIMARY' : p = 2์ธ ์ด์ด ๋ ๊ฐ๋ ์กด์ฌํ๋ฏ๋ก
select * from sample634;
- ๋ณต์์ ์ด๋ก ๊ธฐ๋ณธํค ๊ตฌ์ฑํ๊ธฐ p. 248
= p์ด, a์ด์ ํฉ์ณ์ ๊ธฐ๋ณธํค ๊ตฌ์ฑํ๊ธฐ (์ํผํค)
ํค์ ์ข ๋ฅ (์ ์ฒ๊ธฐ์ ๋์ด, ์ฐธ๊ณ : ์๋๊ณต ์ ์ฒ๊ธฐ ์์ฝ์ ๋ฆฌ 173๋ฒ)
- ํ๋ณดํค(Candidate Key): ๊ธฐ๋ณธํค๊ฐ ๋ ์ ์๋ ์ด ex) ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ, ํ๋ฒ
•๋ฆด๋ ์ด์ ์ ๊ตฌ์ฑํ๋ ์์ฑ๋ค ์ค์์ ํํ์ ์ ์ผํ๊ฒ ์๋ณํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์์ฑ๋ค์ ๋ถ๋ถ์งํฉ, ์ฆ ๊ธฐ๋ณธํค๋ก ์ฌ์ฉํ ์ ์๋ ์์ฑ๋ค์ ๋งํจ
•ํ๋ณดํค๋ ๋ฆด๋ ์ด์ ์ ์๋ ๋ชจ๋ ํํ์ ๋ํด์ ์ ์ผ์ฑ๊ณผ ์ต์์ฑ์ ๋ง์กฑ์์ผ์ผ ํจ
- ๋์ฒดํค(Alternate Key): ๊ธฐ๋ณธํค๋ฅผ ๋์ฒดํ ์ ์๋ ํค ex) ํ๋ฒ
•ํ๋ณดํค๊ฐ ๋ ์ด์์ผ ๋ ๊ธฐ๋ณธํค๋ฅผ ์ ์ธํ ๋๋จธ์ง ํ ๋ณดํค๋ฅผ ์๋ฏธํจ
•๋ณด์กฐํค๋ผ๊ณ ๋ํจ
- ๊ธฐ๋ณธํค: ํ๋์ ์ด๋ก ๊ตฌ์ฑ๋ ์ ์ผ์ฑ์ ๊ฐ์ถ ํค
•ํ๋ณดํค ์ค์์ ํน๋ณํ ์ ์ ๋ ์ฃผํค(Main Key)๋ก ์ค ๋ณต๋ ๊ฐ์ ๊ฐ์ง ์ ์์
•ํ ๋ฆด๋ ์ด์ ์์ ํน์ ํํ์ ์ ์ผํ๊ฒ ๊ตฌ๋ณํ ์ ์๋ ์์ฑ
•๊ธฐ๋ณธํค๋ NULL ๊ฐ์ ๊ฐ์ง ์ ์๋ค. ์ฆ ํํ์์ ๊ธฐ ๋ณธํค๋ก ์ค์ ๋ ์์ฑ์๋ NULL ๊ฐ์ด ์์ด์๋ ์ ๋จ
- ์ํผํค(Super Key): ๋ ๊ฐ ์ด์์ ์ด์ ํฉ์ณ์ ๊ตฌ์ฑ๋ ์ ์ผ์ฑ์ ๊ฐ์ถ ํค
•ํ ๋ฆด๋ ์ด์ ๋ด์ ์๋ ์์ฑ๋ค์ ์งํฉ์ผ๋ก ๊ตฌ์ฑ๋ ํค๋ก์ ๋ฆด๋ ์ด์ ์ ๊ตฌ์ฑํ๋ ๋ชจ๋ ํํ๋ค ์ค ์ํผ ํค๋ก ๊ตฌ์ฑ๋ ์์ฑ์ ์งํฉ๊ณผ ๋์ผํ ๊ฐ์ ๋ํ๋์ง ์์
•์ํผํค๋ ๋ฆด๋ ์ด์ ์ ๊ตฌ์ฑํ๋ ๋ชจ๋ ํํ์ ๋ํด ์ ์ผ์ฑ์ ๋ง์กฑ์ํค์ง๋ง, ์ต์์ฑ์ ๋ง์กฑ์ํค์ง ๋ชปํจ
- ์ธ๋ํค(Foreign Key)
•๋ค๋ฅธ ๋ฆด๋ ์ด์ ์ ๊ธฐ๋ณธํค๋ฅผ ์ฐธ์กฐํ๋ ์์ฑ ๋๋ ์์ฑ๋ค์ ์งํฉ์ ์๋ฏธํจ
•ํ ๋ฆด๋ ์ด์ ์ ์ํ ์์ฑ A์ ์ฐธ์กฐ ๋ฆด๋ ์ด์ ์ ๊ธฐ๋ณธ ํค์ธ B๊ฐ ๋์ผํ ๋๋ฉ์ธ ์์์ ์ ์๋์์ ๋์ ์์ฑ A๋ฅผ ์ธ๋ํค๋ผ๊ณ ํจ
์์ ) a์ด๊ณผ b์ด๋ก ์ด๋ฃจ์ด์ง ๊ธฐ๋ณธํค
create table sample635(
a int not null,
b int not null,
constraint skey_sample635 primary key(a,b)
);
desc sample635;
insert into sample635 values(1,1);
insert into sample635 values(1,2);
insert into sample635 values(1,3);
insert into sample635 values(2,1);
insert into sample635 values(2,2);
select * from sample635;
๊ฒฐ๊ณผ)
a | b |
1 | 1 |
1 | 2 |
1 | 3 |
2 | 1 |
2 | 2 |
2๊ฐ ๋ฌถ์์ผ๋ก ํ๋จํ๋ค. (1,1), (1,2), (1,3), (2,1), (2,2)
28๊ฐ ์ธ๋ฑ์ค ๊ตฌ์กฐ
28.1 ์ธ๋ฑ์ค
์ธ๋ฑ์ค: ํ ์ด๋ธ์ ๋ถ์ฌ์ง ์์ธ
28.2 ๊ฒ์์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ฑ์ค์ ์ฐ์ด๋ ๋ํ์ ์ธ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ
ex) ์ด์ง ํธ๋ฆฌ(binary tree), ํด์
์ด์งํ์(binary search): ์งํฉ์ ๋ฐ์ผ๋ก ๋๋์ด ์กฐ์ฌํ๋ ๊ฒ์๋ฐฉ๋ฒ
[ํฌ์ธํธ] ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ๋๋ ์ด์ง ํ์์ด ๋น ๋ฅด๋ค!
์ด์งํธ๋ฆฌ(binary tree): ํ ์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ํ ์ด๋ธ ๋ฐ์ดํฐ์ ๋ณ๊ฐ๋ก ์ธ๋ฑ์ค์ฉ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ์ฅ์น์ ๋ง๋ค์ด์ง๋ฉฐ ์ด์ง ํธ๋ฆฌ๋ผ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์์ฑ๋๋ค.
28.3 ์ ์ผ์ฑ
Point: ์ด์ง ํธ๋ฆฌ์๋ ์ค๋ณตํ๋ ๊ฐ์ ๋ฑ๋กํ ์ ์๋ค.
29๊ฐ ์ธ๋ฑ์ค ์์ฑ๊ณผ ์ญ์ p. 257
CREATE INDEX
DROP INDEX
-- ์ธ๋ฑ์ค ์์ฑ
-- sample62 ํ
์ด๋ธ์ no ์ด์ isample65๋ผ๋ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ๋ค.
create index isample65 on sample62(no);
select * from sample62; #index๋ฅผ ์ ํ ์ฌ์ฉํ๊ณ ์์ง ์์.
-- explain ์ธ๋ฑ์ค ์ฌ์ฉ ์ฌ๋ถ ์กฐํ
-- possible_keys์ด, key์ด์ด null์ด๋ฉด index๋ฅผ ์ฌ์ฉํ๊ณ ์์ง ์๋ค๋ ๊ฑฐ์.
explain select * from sample62;
select * from sample62 where a='abc'; -- index์ฌ์ฉํด์ ๊ฒ์
explain select * from sample62 where a='abc';
desc sample62;
29.1 ์ธ๋ฑ์ค ์์ฑ
๋ฌธ๋ฒ
CREATE INDEX ์ธ๋ฑ์ค๋ช
ON ํ
์ด๋ธ๋ช
(์ด๋ช
1, ์ด๋ช
2, ...)
์์ ) ์ธ๋ฑ์ค ์์ฑํ๊ธฐ
-- sample62 ํ
์ด๋ธ์ no ์ด์ isample65๋ผ๋ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ๋ค.
CREATE INDEX isample65 ON sample62(no);
29.2 ์ธ๋ฑ์ค ์ญ์
๋ฌธ๋ฒ
-- DROP INDEX (์คํค๋ง ๊ฐ์ฒด์ ๊ฒฝ์ฐ)
DROP INDEX ์ธ๋ฑ์ค๋ช
-- DROP INDEX(ํ
์ด๋ธ ๋ด ๊ฐ์ฒด์ ๊ฒฝ์ฐ)
DROP INDEX ์ธ๋ฑ์ค๋ช
ON ํ
์ด๋ธ๋ช
์์ ) ์ธ๋ฑ์ค ์ญ์ ํ๊ธฐ
DROP INDEX isample65 ON sample62;
๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ค๊ณ ๊ฐ์ ํ๋ค.
CREATE INDEX isample65 ON sample62(a);
WHERE ๊ตฌ์ a ์ด์ ๋ํ ์กฐ๊ฑด์์ ์ง์ ํ ๊ฒฝ์ฐ SELECT ๋ช ๋ น์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด ๋น ๋ฅด๊ฒ ๊ฒ์ํ ์ ์๋ค. ๊ทธ๋ฌ๋ WHERE ๊ตฌ์ ์กฐ๊ฑด์์ a ์ด์ด ์ ํ ์ฌ์ฉ๋์ง ์์ผ๋ฉด SELECT ๋ช ๋ น์ isample62๋ผ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
SELECT * FROM sample62 WHERE a = 'a';
29.3 EXPLAIN
์ค์ ๋ก ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด ๊ฒ์ํ๋์ง๋ฅผ ํ์ธํ๋ค.
๋ฌธ๋ฒ
EXPLAIN SQL ๋ช
๋ น
์์) EXPLAIN์ผ๋ก ์ธ๋ฑ์ค ์ฌ์ฉ ํ์ธํ๊ธฐ1 (MySQL)
EXPLAIN SELECT * FROM sample62 WHERE a = 'a';
29.4 ์ต์ ํ
์คํ๊ณํ์์๋ ์ธ๋ฑ์ค์ ์ ๋ฌด๋ฟ๋ง ์๋๋ผ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ์ง ์ฌ๋ถ์ ๋ํด์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด๋ถ์ ์ต์ ํ ์ฒ๋ฆฌ๋ฅผ ํตํด ํ๋จ๋๋ค.
30๊ฐ ๋ทฐ ์์ฑ๊ณผ ์ญ์ p. 263
CREATE DATABASE ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช
CREATE TABLE ํ ์ด๋ธ๋ช
CREATE INDEX ์ธ๋ฑ์ค๋ช
CREATE VIEW ๋ทฐ๋ช AS SELECT์
SELECT * FROM ํ ์ด๋ธ๋ช
์๋ธ์ฟผ๋ฆฌ = ์ฟผ๋ฆฌ ์์ ์ฟผ๋ฆฌ๋ฅผ ๋ฃ์
SELECT (SELECT * FROM ํ ์ด๋ธ๋ช ) FROM ํ ์ด๋ธ๋ช - ์๋ธ์ฟผ๋ฆฌ (์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ)
SELECT * FROM (SELECT * FROM ํ ์ด๋ธ๋ช ) A - ์๋ธ์ฟผ๋ฆฌ (์ธ๋ผ์ธ ๋ทฐ)
SELECT * FROM ํ ์ด๋ธ๋ช WHERE A = (SELECT * FROM ํ ์ด๋ธ๋ช ) - ์๋ธ์ฟผ๋ฆฌ (์ค์ฒฉ ์๋ธ์ฟผ๋ฆฌ - WHERE ์)
30.1 ๋ทฐ
๋ทฐ : ํ
์ด๋ธ์ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฐ๋ฉด, ๋ทฐ๋ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค.
๊ฐ์ํ
์ด๋ธ์ด๋ผ๊ณ ๋ ํจ.
์คํ ์์ ์ SQL ์ฌ์์ฑํ์ฌ ์ํ๋จ.
์ฟผ๋ฆฌ๋ฅผ ๋จ์ํํ๊ธฐ ์ํด ๋ทฐ๋ฅผ ์ด๋ค.
๋ฌธ๋ฒ
CREATE VIEW ๋ทฐ๋ช
AS SELECT ๋ช
๋ น
DROP VIEW ๋ทฐ๋ช
SELECT * FROM sample635;
-- CREATE VIEW AS
CREATE VIEW sample_view_365 AS SELECT * FROM sample635;
SELECT * FROM V1
#์๋ ์ฒซ ๋ฌธ๋จ ์ฝ๋๋ ๊ฐ๋ค. SELECT์ ์ ๋จ์ํ์ํจ๋ค.
SELECT *
FROM (SELECT *
FROM TB1
WHERE col1 = (SELECT * FROM TB2 WHERE col2 = 'b')
AND col3 = 'c'
ORDER BY c1
GROUP BY c1
HAVING c4 >= 100
)
CREATE VIEW V1 AS
SELECT *
FROM (SELECT *
FROM TB1
WHERE col1 = (SELECT * FROM TB2 WHERE col2 = 'b')
AND col3 = 'c'
ORDER BY c1
GROUP BY c1
HAVING c4 >= 100
)
Point: ๋ทฐ๋ SELECT ๋ช ๋ น์ ๊ธฐ๋กํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด๋ค.
Point: ๋ทฐ๋ ์์ฑํ๋ ๊ฒ์ผ๋ก ๋ณต์กํ SELECT ๋ช ๋ น์ ๊ฐ๋ตํ๊ฒ ํํํ ์ ์๋ค.
30.2 ๋ทฐ ์์ฑ๊ณผ ์ญ์
- ๋ทฐ์ ์์ฑ
CREATE VIEW ๋ทฐ๋ช
AS SELECT ๋ช
๋ น
์์ ) ๋ทฐ ์์ฑํ๊ธฐ
CREATE VIEW sample_veiw_67 AS SELECT * FROM sample54;
SELECT * FROM sample_view_67;
CREATE VIEW์์ ์ด ์ง์ ํ๊ธฐ
CREATE VIEW ๋ทฐ๋ช
(์ด๋ช
1, ์ด๋ช
2, ...) AS SELECT ๋ช
๋ น
์์ ) ์ด์ ์ง์ ํด ๋ทฐ ์์ฑํ๊ธฐ
CREATE VIEW sample_view_672(n, v, v2) AS
SELECT no, a, a*2 FROM sample54;
SELECT * FROM sample_view_672 WHERE n = 1;
- ๋ทฐ ์ญ์
DROP VIEW ๋ทฐ๋ช
์์ ) ๋ทฐ ์ญ์ ํ๊ธฐ
DROP VIEW sample_view_67;
30.3 ๋ทฐ์ ์ฝ์
- ๋จธ๋ฆฌํฐ์ผ๋ผ์ด์ฆ๋ ๋ทฐ (Materialized View)
๋ฐ์ดํฐ๋ฅผ ์ผ์์ ์ผ๋ก ์ ์ฅํด ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ํ
์ด๋ธ์ฒ๋ผ ์ ์ฅ์ฅ์น์ ์ ์ฅํด๋๊ณ ์ฌ์ฉํ๋ค.
๋จ์ : MySQL์์๋ ์ฌ์ฉX
Oracle, DB2์์๋ง ์ฌ์ฉO
- ํจ์ ํ
์ด๋ธ
๋ถ๋ชจ ์ฟผ๋ฆฌ์ ์ด๋ค ์์ผ๋ก๋ ์ฐ๊ด๋ ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ์๋ ๋ทฐ์ SELECT ๋ช
๋ น์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ์ด๋ฅผ ํจ์ ํ
์ด๋ธ์ ์ฌ์ฉํ์ฌ ํํผํ ์ ์๋ค.