SQL/SQL 기본

SQL 기본(4): 테이블 생성과 제약 조건, 임시 테이블 개념

민서타 2023. 8. 18. 19:10

1. 제약 조건 종류:

  • NOT NULL: NULL값 입력 금지
  • UNIQUE: 중복된 값 입력 금지
  • PRIMARY KEY: NOT NULL + UNIQUE
  • FOREIGN KEY: 다른 테이블의 컬럼을 조회해서 무결성 검사
  • CHECK: 조건으로 설정된 값만 입력 허용

* PRIMARY KEY와 FOREIGN KEY로 지정한 컬럼을 삭제할 수 없음, 자식 테이블 값 입력 불가 / CASCADE 옵션: 삭제O

 

2. 검색한 결과를 다른 테이블에 입력:

  • INSERT [저장 테이블] SELECT 열 FROM [조회 테이블] #이미 생성되어 잇는 테이블에 입력
  • SELECT * INTO [저장 테이블] FROM [조회 테이블] # 테이블이 없는 상태에서 테이블 생성 및 결과입력
  • LOCAL TEMPORARY TABLES, GLOBAL TEMPORARY TABLES(지역, 전역 임시 테이블)은 별도의 공간에 저장

3. 임시 테이블:

  • LOCAL TEMPORARY TABLES, GLOBAL TEMPORARY TABLES(지역, 전역 임시 테이블)은 별도의 공간에 저장
  • 지역 임시 테이블은 생성 시 이름 앞에 #을 붙임 / 세션 종료 시 자동으로 삭제 /
  • DROP문으로 삭제 가능, 동일 세션 공유 가능
  • 전역 임시 테이블은 전체 데이터베이스에서 공유 가능, 생성 시 테이블 이름 앞에 ##을 붙인다.

--데이터베이스 생성
CREATE DATABASE TestDB

--테이블 생성 및 삭제
CREATE TABLE doit_create_table (
col_1 INT,
col_2 NVARCHAR(50),
col_3 DATETIME
)

ALTER TABLE doit_create_table
ADD col_4 INT

ALTER TABLE doit_create_table
ADD col_0 INT

ALTER TABLE doit_create_table
DROP COLUMN col_0

SELECT* FROM doit_create_table

CREATE TABLE doit_create_table_kor(
[이름] NVARCHAR(50),
[성별] NVARCHAR(50)
)
SELECT * FROM doit_create_table_kor

ALTER TABLE doit_create_table_kor
ADD [추가컬럼] NVARCHAR(50)

SELECT * FROM doit_create_table_kor WHERE 추가컬럼 = '네임'

CREATE TABLE doit_dml (
col_1 INT,
col_2 NVARCHAR(50),
col_3 DATETIME
)

--컬럼명 매칭, 데이터 입력
INSERT INTO doit_dml(col_1, col_2, col_3)
VALUES (1, 'DOITSQL', '2022-01-01')
SELECT * FROM doit_dml

--컬럼명 생략해서 데이터 입력
INSERT INTO doit_dml
VALUES (2, N'열이름 생략', '2022-01-02')

--특정 열에만 입력
INSERT INTO doit_dml (col_1, col_2)
VALUES (1, N'col_3 값 생략')

--열 순서 변경해서 입력
INSERT INTO doit_dml(col_2, col_1, col_3)
VALUES (N'컬럼 순서 변경', 3, '2022-01-02')

--여러 값 한 번에 입력
INSERT INTO doit_dml(col_1, col_2, col_3) VALUES (5, 'DOITSQL5', '2022-01-05')
INSERT INTO doit_dml(col_1, col_2, col_3) VALUES (6, 'DOITSQL6', '2022-01-06')

INSERT INTO doit_dml(col_1, col_2, col_3) VALUES 
(7, 'DOITSQL7', '2022-01-07'), (8, 'DOITSQL8', '2022-01-08')

SELECT * FROM doit_dml

UPDATE doit_dml SET col_2 = N'값 수정'
--WHERE col_1 = 1

DELETE doit_dml
WHERE COL_1 = 1

--NULL 삽입하기: 오류 발생
CREATE TABLE doit_notnull(
col1_ INT,
col2_ NVARCHAR(50) NOT NULL)
GO

SELECT * FROM doit_notnull

INSERT INTO doit_notnull (col1_1, col2_) VALUE ('1')

DELETE DOIT

--임의의 아이덴티티 입력 가능 설정, 취소
SET IDENTITY_INSERT TABLE_NAME ON
SET IDENTITY_INSERT TABLE_NAME OFF

DROP TABLE doit_dml, doit_notnull

CREATE TABLE doit_primary(
col1 INT PRIMARY KEY,
col2 NVARCHAR(50)
)

INSERT INTO doit_primary VALUES (1, '1')
INSERT INTO doit_primary VALUES (1, '2')

DELETE doit_primary

CREATE TABLE doit_unique(
col1 INT PRIMARY KEY,
col2 NVARCHAR(50) UNIQUE,
col3 NVARCHAR(50))

INSERT INTO doit_unique VALUES (1, '1', '1')
INSERT INTO doit_unique VALUES (2, '1', '2') --UNIQUE 조건 위반
INSERT INTO doit_unique VALUES (2, '2', '2')
INSERT INTO doit_unique VALUES (3, '3', '2')
SELECT * FROM doit_unique

DROP TABLE doit_unique

CREATE TABLE doit_parent (col_1 INT PRIMARY KEY);
CREATE TABLE doit_child (col_1 INT);
ALTER TABLE doit_child
ADD FOREIGN KEY (col_1) REFERENCES doit_parent(col_1);

INSERT INTO doit_child VALUES (1)
INSERT INTO doit_parent VALUES (1)

SELECT * FROM doit_parent


CREATE TABLE doit_stock(
date datetime,
[open] FLOAT,
[high] FLOAT,
[low] FLOAT,
[close] FLOAT,
[adj_close] FLOAT,
volume bigint,)

INSERT doit_stock ( [open], [high], [low], [close], [adj_close], volume)
SELECT [open], [high], [low], [close], [adj_close], volume FROM DoItSQL.dbo.stock
WHERE symbol = 'MSFT'
and date >= '2021-01-01' and date < '2021-02-01';


--데이터 확인
SELECT * FROM doit_stock;
DROP TABLE doit_stock

SELECT * INTO doit_stock2 FROM DoItSQL.dbo.stock
WHERE symbol = 'MSFT'
and date >= '2021-01-01' and date < '2021-02-01';


--데이터 확인
SELECT * FROM doit_stock2;

DROP TABLE doit_stock2

SELECT 
IDENTITY(INT, 1, 1) AS NUM,
symbol
INTO doit_nasdaq_company
FROM DoItSQL.DBO.nasdaq_company
SELECT * FROM doit_nasdaq_company
DROP TABLE doit_nasdaq_company



--지역 임시 테이블은 본인만 사용 가능
CREATE TABLE #local_temp(
num INT)
GO

INSERT INTO #local_temp VALUES (1)
SELECT * FROM #local_temp
DROP TABLE #local_temp

--전역 임시 테이블
CREATE TABLE ##global_temp(
num INT)
GO

INSERT INTO ##global_temp VALUES (1)
SELECT * FROM ##global_temp
DROP TABLE ##global_temp

 

반응형