데이터베이스 ( DB )란?
일정한 체계 속에서 추출되어 저장된 데이터의 집합
데이터는 테이블 ( 표 )안에 저장된다.
이 테이블의 집합을 데이터베이스라고 이야기 한다.
데이터베이스를 어떻게 사용하나?
바로 DBMS ( 데이터베이스 관리 시스템 )
DataBase Management System
을 통하여 DB에 접근해서 사용한다.
데이터를 조회하거나 삽입, 삭제 같은 일을 할 수 있다.
데이터베이스는 MySQL, MSSQL, Oracle, MariaDB, Postgre 같은 엄청 많은 종류가 있는데
각각 조금씩 다른 명령어로 어떤 DB를 다루는지에 따라 달라진다.
따라서 알아야 할 것도 전체적인 틀은 같지만 조금씩 달라진다.
다르다고 하는 세세한 내용은 조금씩 알아가기로 하고,
우선은 기본적인 SQL( DBMS에서 사용하는 언어 )을
알아보자
이렇게 '고객'이라는 이름의 테이블이 있으면
| 고객ID | 이름 | 전화번호 | 이메일 | 가입일 |
|---|---|---|---|---|
| 001 | 김민수 | 010-1234-5678 | minsu.kim@email.com | 2023-01-15 |
| 002 | 이지영 | 010-2345-6789 | jiyeong.lee@email.com | 2022-05-22 |
| 003 | 박상훈 | 010-3456-7890 | sanghun.park@email.com | 2021-08-30 |
| 004 | 최유진 | 010-4567-8901 | yujin.choi@email.com | 2024-03-01 |
행 - Row ( 하나의 개체 ( 사용자 ) 를 나타내는 데이터의 집합 )
열 - Column ( 같은 종류의 데이터 집합 )

이 정의는 잘 알아둬야 한다.
( + 참고
가끔 데이터에 NULL이 보일건데 이건 데이터가 들어가 있지 않은 것,
프로그램을 짤 때 null과 헷갈리는 0이나 ""( 빈 문자열 ) 인지에 따라서 프로그램 작동 방식이 달라진다. null과는 엄연히 다른 것 )
DML은 Data Manipulation Language의 약자로 데이터를 조작하기 위해 나온 언어로
DB를 사용한다면 가장 자주 사용하는 언어이다.
select [ 조회 할 컬럼 이름 ]
from [ 조회 할 테이블 이름 ] - DB이름.테이블이름 의 형식으로 작성해도 된다.
( 기본은 그냥 테이블 이름 + DB를 기본으로 정하기 위해서는 use DB이름;)
where [ 조건식 ] - 간단한 비교식, 포함하는 데이터 이름 같은게 들어감
( having )
order by [ 컬럼 이름을 기준으로 정렬 ]
( group by )
의 순서를 지켜야 하고,
select * from table_name;
-- 데이터 조회 예시
select * from 고객;
insert into table_name ( column_name1, column_name2, ... ) values (
data1,
data2,
...
);
-- 데이터 삽입 예시
insert into 고객 (고객ID, 이름, 전화번호, 이메일) values (
'001',
'김민수',
'010-1234-5678',
'minsu.kim@email.com'
);
update table_name
set column_name1 = data_1
where condition;
-- 데이터 수정 예시
update 고객
set 전화번호 = '010-1111-2222'
where 고객ID = '001';
delete from table_name
where condition;
-- 데이터 삭제 예시
DELETE FROM 고객
WHERE 고객ID = '001';
ALTER TABLE 테이블명
ADD 컬럼명 데이터타입 [제약조건];
ALTER TABLE 테이블명
ALTER COLUMN 컬럼명 새_데이터타입 [제약조건];
ALTER TABLE 테이블명
DROP COLUMN 컬럼명;
컬럼 이름 변경 (sp_rename 사용)
EXEC sp_rename '테이블명.기존컬럼명', '새컬럼명', 'COLUMN';
SELECT
COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '테이블이름';
ALTER TABLE 테이블명
ADD CONSTRAINT PK_이름 PRIMARY KEY (컬럼명1, 컬럼명2);
ALTER TABLE 자식테이블
ADD CONSTRAINT FK_이름 FOREIGN KEY (자식컬럼)
REFERENCES 부모테이블(부모컬럼);
예시
ALTER TABLE childTable
ADD CONSTRAINT FK_child_parent FOREIGN KEY (aaa_id)
REFERENCES parentTable(aaa_id);
ALTER TABLE 테이블명
ADD CONSTRAINT UQ_이름 UNIQUE (컬럼명);
ALTER TABLE 테이블명
ADD CONSTRAINT CHK_제약조건_이름 CHECK (조건식);
기본값(Default) 제약조건 추가
ALTER table timeTable
add constraint Insert_Time_제약조건_이름 DEFAULT FORMAT(GETDATE(), 'yyyyMMddHHmmss') for 시간저장할컬럼이름;
DB 컬럼을 생성할 때는 제약조건 이름을 지어주지 않지만( 자동 생성 )
추가로 제약조건을 설정해 주려면 이름을 지어주고 'for 컬럼이름'을 하면 된다.
ADD CONSTRAINT DF_이름 DEFAULT 기본값 FOR 컬럼명;
ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건이름;
CREATE INDEX IX_이름 ON 테이블명(컬럼명);
DROP INDEX 테이블명.인덱스이름;
Insert 한 후에는 꼭 Commit 하기..
where 조건식
정렬