데이터 베이스 명령어 구조
테이터 타입제약조건CREATE TABLE buy ( num INT AUTO_INCREMENT PRIMARY KEY, mem_id CHAR(8) NOT NULL, prod_name CHAR(6) NOT NULL, group_name CHAR(4) NULL UNIQUE, price INT NOT NULL check(price > 1000), amount INT NULL default 1 , FOREIGN KEY(mem_id)
docs.google.com
DDL (데이터 정의어)
데이터베이스의 구조(스키마)를 정의, 변경, 삭제하는 데 사용되는 명령어들입니다.
| 명령어 | 설명 | 내용 (예시 SQL) | 일반 형식 / 핵심 구조 |
| CREATE DATABASE | 새로운 데이터베이스 생성 | CREATE DATABASE market_db; | CREATE DATABASE [데이터베이스명]; |
| DROP DATABASE | 기존 데이터베이스 삭제 (내부 데이터 포함) | DROP DATABASE market_db; | DROP DATABASE [데이터베이스명]; |
| USE | 작업할 데이터베이스 선택 | USE market_db; | USE [데이터베이스명]; |
| CREATE TABLE | 새로운 테이블 생성 (컬럼, 타입, 제약조건 정의) | CREATE TABLE member ( member_id CHAR(8) NOT NULL PRIMARY KEY, member_name VARCHAR(10) ); | CREATE TABLE [테이블명] ( [컬럼명1] [타입] [제약조건], [컬럼명2] [타입] [제약조건], ...); |
| DROP TABLE | 기존 테이블 삭제 (내부 데이터 포함) | DROP TABLE member; | DROP TABLE [테이블명]; |
| ALTER TABLE ... ADD COLUMN |
기존 테이블에 새로운 컬럼(열) 추가 | ALTER TABLE member ADD email CHAR(30) NULL UNIQUE; | ALTER TABLE [테이블명] ADD [새컬럼명] [타입] [제약조건]; |
| ALTER TABLE ... ADD CONSTRAINT PRIMARY KEY |
기존 테이블에 기본 키(Primary Key) 제약조건 추가 | ALTER TABLE member ADD CONSTRAINT PK_member PRIMARY KEY(mem_id); | ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건이름] PRIMARY KEY([컬럼명]); |
| ALTER TABLE ... ADD CONSTRAINT FOREIGN KEY |
기존 테이블에 외래 키(Foreign Key) 제약조건 추가 | ALTER TABLE buy ADD CONSTRAINT FK_buy_member FOREIGN KEY(mem_id) REFERENCES member(mem_id); | ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건이름] FOREIGN KEY([컬럼명]) REFERENCES [참조테이블명]([참조컬럼명]); |
| ALTER TABLE ... ADD CONSTRAINT CHECK |
기존 테이블에 체크(Check) 제약조건 추가 | ALTER TABLE member ADD CONSTRAINT CK_member_phone CHECK(phone1 IN('02','055')); | ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건이름] CHECK([조건식]); |
| ALTER TABLE ... ALTER COLUMN ... SET DEFAULT |
기존 테이블 컬럼의 기본값 설정 또는 변경 | ALTER TABLE member ALTER COLUMN phone1 SET DEFAULT '02'; | ALTER TABLE [테이블명] ALTER COLUMN [컬럼명] SET DEFAULT [기본값]; |
테이블 생성시 참고
| 데이터 타입 (설명) | SQL 데이터 타입 예시 | 주로 함께 사용되는 제약조건 (예시) |
| 정수형 (소수점 없는 숫자) | INT, BIGINT | PRIMARY KEY, AUTO_INCREMENT (또는 IDENTITY), NOT NULL, UNIQUE |
| 실수형 (소수점 있는 숫자) | FLOAT, DOUBLE | NOT NULL, CHECK, DEFAULT |
| 정적 문자형 (고정 길이 문자열) | CHAR(n) | NOT NULL, UNIQUE, DEFAULT, PRIMARY KEY (ID로 사용 시) |
| 동적 문자형 (가변 길이 문자열) | VARCHAR(n) | NOT NULL, UNIQUE, DEFAULT |
| 날짜 (년, 월, 일) | DATE | NOT NULL, DEFAULT, CHECK |
| 시간 (시, 분, 초) | TIME | NOT NULL, DEFAULT, CHECK |
| 날짜시간 (년, 월, 일, 시, 분, 초) | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP |
일반적인 SQL 제약조건 종류 (어떤 데이터 타입에도 적용 가능성 있음):
- PRIMARY KEY: 테이블의 각 행을 고유하게 식별. (주로 INT + AUTO_INCREMENT 조합으로 많이 사용)
- FOREIGN KEY: 다른 테이블의 기본 키를 참조하여 테이블 간의 관계를 설정.
- UNIQUE: 해당 컬럼의 모든 값이 고유해야 함 (NULL 값은 DBMS에 따라 여러 개 허용될 수 있음).
- NOT NULL: 해당 컬럼에 반드시 값이 있어야 함 (NULL 허용 안 함).
- CHECK: 컬럼에 저장될 수 있는 값의 조건을 정의.
- DEFAULT: 값을 명시적으로 지정하지 않았을 때 자동으로 입력될 기본값을 설정.
AUTO_INCREMENT에 대한 부연 설명:
AUTO_INCREMENT는 CREATE TABLE 예시에서 보셨듯이 INT 타입의 num 컬럼에 PRIMARY KEY와 함께 사용되어 자동으로 번호가 매겨지도록 하는 역할
CREATE TABLE buy (
num INT AUTO_INCREMENT PRIMARY KEY, -- 이 부분!
-- ... 나머지 컬럼들
);
CREATE TABLE [만들고_싶은_테이블의_이름] ( -- 예: CREATE TABLE orders (
/* 첫 번째 컬럼 정의 */
[첫_번째_컬럼의_이름] [데이터_타입] [이_컬럼만의_특별한_규칙1] [규칙2] ... ,
-- 예시 SQL: order_id INT AUTO_INCREMENT PRIMARY KEY,
-- 설명: 'order_id'라는 이름의 컬럼.
-- 데이터 타입은 정수(INT).
-- 새로운 주문이 추가될 때마다 자동으로 번호가 증가 (AUTO_INCREMENT).
-- 이 테이블의 각 주문을 고유하게 식별하는 기본 키 (PRIMARY KEY).
/* 두 번째 컬럼 정의 */
[두_번째_컬럼의_이름] [데이터_타입] [이_컬럼만의_특별한_규칙1] [규칙2] ... ,
-- 예시 SQL: customer_id CHAR(8) NOT NULL,
-- 설명: 'customer_id'라는 이름의 컬럼.
-- 데이터 타입은 고정 길이 8자리의 문자열(CHAR(8)).
-- 주문한 고객의 ID이며, 반드시 값이 있어야 함 (NOT NULL).
/* 세 번째 컬럼 정의 */
[세_번째_컬럼의_이름] [데이터_타입] [이_컬럼만의_특별한_규칙1] [규칙2] ... ,
-- 예시 SQL: product_name VARCHAR(100) NOT NULL,
-- 설명: 'product_name'이라는 이름의 컬럼.
-- 데이터 타입은 최대 100글자까지 저장 가능한 가변 길이 문자열(VARCHAR(100)).
-- 주문된 상품의 이름이며, 반드시 값이 있어야 함 (NOT NULL).
/* 네 번째 컬럼 정의 */
[네_번째_컬럼의_이름] [데이터_타입] [이_컬럼만의_특별한_규칙1] [규칙2] ... ,
-- 예시 SQL: shipping_address VARCHAR(255) NULL,
-- 설명: 'shipping_address'라는 이름의 컬럼.
-- 데이터 타입은 최대 255글자까지 저장 가능한 가변 길이 문자열(VARCHAR(255)).
-- 배송지 주소이며, 값이 없어도 됨 (NULL) - 예를 들어 매장 직접 수령의 경우.
/* 다섯 번째 컬럼 정의 */
[다섯_번째_컬럼의_이름] [데이터_타입] [이_컬럼만의_특별한_규칙1] [규칙2] ... ,
-- 예시 SQL: order_date DATE NOT NULL DEFAULT (CURRENT_DATE),
-- 설명: 'order_date'라는 이름의 컬럼.
-- 데이터 타입은 날짜(DATE).
-- 주문 날짜이며, 반드시 값이 있어야 함 (NOT NULL).
-- 만약 주문 날짜를 명시하지 않으면, 현재 날짜가 자동으로 입력됨 (DEFAULT (CURRENT_DATE)).
-- (참고: DBMS에 따라 CURRENT_DATE 또는 다른 함수를 사용)
/* 여섯 번째 컬럼 정의 */
[여섯_번째_컬럼의_이름] [데이터_타입] [이_컬럼만의_특별한_규칙1] [규칙2] ... ,
-- 예시 SQL: quantity INT NOT NULL CHECK (quantity > 0),
-- 설명: 'quantity'라는 이름의 컬럼.
-- 데이터 타입은 정수(INT).
-- 주문 수량이며, 반드시 값이 있어야 함 (NOT NULL).
-- 수량은 항상 0보다 커야 한다는 조건 (CHECK (quantity > 0)).
/* 테이블 전체에 적용되는 규칙 (외래 키 설정) */
FOREIGN KEY ([이_테이블의_어떤_컬럼]) REFERENCES [다른_테이블_이름]([다른_테이블의_대표키_컬럼])
-- 예시 SQL: FOREIGN KEY (customer_id) REFERENCES customer(customer_id)
-- 설명: 이 테이블('orders')의 'customer_id' 컬럼은 'customer' 테이블의 'customer_id' 컬럼 값을 참조.
-- 즉, 'customer' 테이블에 실제로 존재하는 고객의 ID만 'orders' 테이블에 입력 가능.
-- (데이터의 일관성과 무결성을 보장)
);
- CREATE TABLE [만들고_싶은_테이블의_이름]:
- 새로운 테이블을 만들겠다고 선언하고, 그 테이블의 이름을 지정합니다.
- ( ... ):
- 괄호 안에는 테이블을 구성하는 컬럼들의 정의와 테이블 전체에 적용될 제약 조건들이 들어갑니다. 각 컬럼 정의는 쉼표(,)로 구분합니다.
- [컬럼의_이름]:
- 테이블의 각 열(세로줄)에 붙이는 이름입니다. 데이터를 구분하는 기준이 됩니다. (예: product_id, member_id, product_name)
- [데이터_타입]:
- 해당 컬럼에 어떤 종류의 데이터(숫자, 문자, 날짜 등)를 저장할지 지정합니다. (예: INT, CHAR(8), VARCHAR(50), DATE)
- [이_컬럼만의_특별한_규칙들] (컬럼 레벨 제약 조건):
- 각 컬럼에 개별적으로 적용할 수 있는 규칙들입니다. 여러 개를 함께 쓸 수 있습니다.
- AUTO_INCREMENT: (주로 숫자 타입에 사용) 새로운 데이터가 추가될 때마다 자동으로 숫자가 1씩 증가합니다. 기본 키(PRIMARY KEY)에 많이 사용됩니다.
- PRIMARY KEY: 이 컬럼이 테이블의 대표 키(기본 키)임을 나타냅니다. 이 컬럼의 값은 각 행을 고유하게 식별하며, NULL이거나 중복될 수 없습니다.
- NOT NULL: 이 컬럼에는 반드시 값이 있어야 합니다. 비워둘 수 없습니다.
- NULL: 이 컬럼은 값을 비워둬도 괜찮습니다. (명시하지 않으면 기본적으로 NULL 허용인 경우가 많음)
- UNIQUE: 이 컬럼의 값은 테이블 내에서 중복될 수 없습니다. (단, NULL 값은 DBMS에 따라 여러 개 허용될 수 있음)
- CHECK(조건식): 이 컬럼에 들어갈 수 있는 값의 조건을 지정합니다. (예: CHECK(price > 0)는 가격이 0보다 커야 한다는 의미)
- DEFAULT 기본값: 데이터를 입력할 때 이 컬럼에 값을 명시적으로 주지 않으면, 여기에 지정된 기본값이 자동으로 들어갑니다. (예: DEFAULT 0는 값을 안 넣으면 0이 들어감)
- 각 컬럼에 개별적으로 적용할 수 있는 규칙들입니다. 여러 개를 함께 쓸 수 있습니다.
- FOREIGN KEY([이_테이블의_어떤_컬럼]) REFERENCES [다른_테이블_이름]([다른_테이블의_대표키_컬럼]) (테이블 레벨 제약 조건):
- 테이블의 특정 컬럼이 다른 테이블의 기본 키를 참조하도록 설정하여 테이블 간의 관계를 맺어줍니다. 데이터의 일관성과 무결성을 유지하는 데 중요합니다.
DML (데이터 조작어)
테이블의 데이터를 삽입, 조회, 수정, 삭제하는 데 사용되는 명령어들입니다.
| 구분 | 명령어 | 설명 (무엇을 하는가?) | 내용 (예시 SQL) | 일반 형식 / 핵심 구조 |
| 입력 | INSERT INTO ... VALUES | 테이블에 새로운 행(데이터)을 직접 값으로 입력 | member VALUES("TWC","트와이스",9,"서울","02","11111111",167,"2015.10.19"); | INSERT INTO [테이블명] ([컬럼1],...) VALUES ([값1],...); (컬럼명 생략 시 모든 컬럼 순서대로) |
| INSERT INTO ... SELECT | 다른 테이블에서 조회(SELECT)한 결과를 새로운 행으로 입력 | city_popul SELECT Name, population FROM world.city; | INSERT INTO [테이블명] ([대상컬럼1],...) SELECT [소스컬럼1],... FROM [소스테이블명] WHERE [조건]; | |
| 출력 | SELECT * | 테이블의 모든 컬럼(*) 데이터를 조회 | FROM member; | SELECT * FROM [테이블명]; |
| SELECT [column(s)] | 테이블에서 지정한 컬럼(들)의 데이터를 조회 | mem_name FROM member; | SELECT [컬럼명1], [컬럼명2],... FROM [테이블명]; | |
| (여러 컬럼 조회 예시) | addr, debut_date, mem_name FROM member; | SELECT [컬럼명1], [컬럼명2],... FROM [테이블명]; | ||
| SELECT * FROM ... WHERE | WHERE 절의 조건을 만족하는 행의 모든 컬럼 데이터를 조회 | member WHERE mem_name="블랙핑크"; | SELECT * FROM [테이블명] WHERE [조건식]; (아래 WHERE 구문 조건식 표 참고) | |
| (숫자 조건 예시) | member WHERE mem_number=4; | SELECT * FROM [테이블명] WHERE [컬럼명] = [숫자값]; | ||
| (비교 연산자 예시) | member WHERE height<=162; | SELECT * FROM [테이블명] WHERE [컬럼명] <= [값]; | ||
| (AND 연산자 예시) | member WHERE height>=165 AND mem_number>6; | SELECT * FROM [테이블명] WHERE [컬럼1] >= [값1] AND [컬럼2] > [값2]; | ||
| (OR 연산자 예시) | member WHERE height>=165 OR mem_number>6; | SELECT * FROM [테이블명] WHERE [컬럼1] >= [값1] OR [컬럼2] > [값2]; | ||
| (AND를 이용한 범위 조건 예시) | member WHERE height>= 163 AND height<=165; | SELECT * FROM [테이블명] WHERE [컬럼명] >= [값1] AND [컬럼명] <= [값2]; | ||
| (BETWEEN을 이용한 범위 조건 예시) | member WHERE height BETWEEN 163 AND 165; | SELECT * FROM [테이블명] WHERE [컬럼명] BETWEEN [값1] AND [값2]; | ||
| (OR를 이용한 다중 조건 예시) | member WHERE addr="경기" OR addr="경남" OR addr="전남"; | SELECT * FROM [테이블명] WHERE [컬럼명]=[값1] OR [컬럼명]=[값2] OR [컬럼명]=[값3]; | ||
| (IN을 이용한 다중 조건 예시) | member WHERE addr IN("경기","경남","전남"); | SELECT * FROM [테이블명] WHERE [컬럼명] IN ([값1], [값2], [값3]); | ||
| (LIKE를 이용한 패턴 매칭 예시 - 시작 문자) | member WHERE mem_name LIKE "우%"; | SELECT * FROM [테이블명] WHERE [컬럼명] LIKE '[시작문자]%'; | ||
| (LIKE를 이용한 패턴 매칭 예시 - 특정 위치 문자) | member WHERE mem_name LIKE "__핑크"; | SELECT * FROM [테이블명] WHERE [컬럼명] LIKE '__[끝문자패턴]'; (_는 한 글자 와일드카드) | ||
| SELECT ... ORDER BY |
조회된 결과를 특정 컬럼 기준으로 정렬 (ASC: 오름차순, DESC: 내림차순) | mem_id, mem_name, debut_date, height FROM member ORDER BY height DESC; | `SELECT [컬럼리스트] FROM [테이블명] ORDER BY [정렬기준컬럼] [ASC | |
| (다중 컬럼 정렬 예시) | mem_id, mem_name, debut_date, height FROM member ORDER BY height DESC, debut_date ASC; | `SELECT [컬럼리스트] FROM [테이블명] ORDER BY [컬럼1] [DESC | ||
| SELECT ... LIMIT | 조회된 결과 중 상위 N개의 행만 반환 | mem_id, mem_name, debut_date, height FROM member LIMIT 3; | SELECT [컬럼리스트] FROM [테이블명] LIMIT [개수]; | |
| (ORDER BY 와 함께 사용, 특정 순서의 상위 N개) | mem_id, mem_name, debut_date, height FROM member ORDER BY debut_date LIMIT 3; | SELECT [컬럼리스트] FROM [테이블명] ORDER BY [정렬기준컬럼] LIMIT [개수]; | ||
| (특정 시작점부터 N개의 행만 반환 - 페이징 시 사용) | mem_name, height FROM member ORDER BY height DESC LIMIT 3,2; | SELECT [컬럼리스트] FROM [테이블명] ORDER BY [정렬기준컬럼] DESC LIMIT [시작행(0부터)],[개수]; (또는 OFFSET) | ||
| SELECT DISTINCT |
조회된 결과에서 지정한 컬럼의 중복된 값을 제거하고 표시 | addr FROM member; | SELECT DISTINCT [컬럼명] FROM [테이블명]; | |
| SELECT ... GROUP BY |
지정한 컬럼을 기준으로 데이터를 그룹화하고, 각 그룹에 대해 집계 함수 적용 | mem_id, SUM(amount) FROM buy GROUP BY mem_id; | SELECT [그룹화컬럼], [집계함수]([집계대상컬럼]) FROM [테이블명] GROUP BY [그룹화컬럼]; | |
| (계산된 값을 집계하는 예시) | mem_id, SUM(price*amount) FROM buy GROUP BY mem_id; | SELECT [그룹화컬럼], SUM([컬럼1]*[컬럼2]) FROM [테이블명] GROUP BY [그룹화컬럼]; | ||
| SELECT AVG(...) | 지정한 컬럼의 평균값을 계산 (GROUP BY 없이 전체 평균) | AVG(amount) FROM buy; | SELECT AVG([컬럼명]) FROM [테이블명]; | |
| SELECT COUNT(*) | 테이블의 전체 행의 개수를 반환 | COUNT(*) FROM buy; | SELECT COUNT(*) FROM [테이블명]; | |
| SELECT COUNT(column) | 지정한 컬럼에서 NULL이 아닌 값의 개수를 반환 | COUNT(phone1) FROM buy; | SELECT COUNT([컬럼명]) FROM [테이블명]; | |
| SELECT ... GROUP BY ... HAVING |
GROUP BY로 그룹화된 결과에 대해 조건을 적용하여 필터링 | mem_id, SUM(price*amount) FROM buy GROUP BY mem_id HAVING SUM(price*amount) > 1000; | SELECT [그룹화컬럼], [집계함수]([컬럼]) FROM [테이블명] GROUP BY [그룹화컬럼] HAVING [그룹에대한조건]; | |
| (HAVING과 ORDER BY 함께 사용 예시) | mem_id, SUM(price*amount) FROM buy GROUP BY mem_id HAVING SUM(price*amount) > 1000 ORDER BY SUM(price*amount) DESC; | ... HAVING [그룹조건] ORDER BY [정렬기준]; | ||
| SELECT CAST(...) | 표현식의 데이터 타입을 명시적으로 변환 (ANSI 표준) | CAST(AVG(price) AS DECIMAL(10,2)) FROM buy; | SELECT CAST([표현식] AS [새로운데이터타입]) FROM [테이블명]; | |
| SELECT CONVERT(...) |
표현식의 데이터 타입을 명시적으로 변환 (DBMS별 함수) | CONVERT(AVG(price), DECIMAL(10,2)) FROM buy; | SELECT CONVERT([표현식], [새로운데이터타입]) FROM [테이블명]; | |
| 수정 | UPDATE ... SET ... WHERE |
WHERE 절의 조건을 만족하는 행의 데이터를 수정 | city_popul SET city_name = '서울' WHERE city_name='Seoul'; | UPDATE [테이블명] SET [컬럼명] = '[새값]' WHERE [조건식]; |
| (여러 컬럼 동시 수정 예시) | city_popul SET city_name = '서울', population=0 WHERE city_name='Newyork'; | UPDATE [테이블명] SET [컬럼1] = '[새값1]', [컬럼2] = [새값2] WHERE [조건식]; | ||
| (모든 행 데이터 수정 예시 - WHERE 절 없음, 주의!) | city_popul SET population = population / 1000; | UPDATE [테이블명] SET [컬럼명] = [표현식]; | ||
| 삭제 | DELETE FROM ... WHERE | WHERE 절의 조건을 만족하는 행의 데이터를 삭제 | city_popul WHERE city_name LIKE 'New%'; | DELETE FROM [테이블명] WHERE [조건식]; |
WHERE 구문의 조건식
| 조건식 예시 (SQL 부분) | 일반 형식 / 핵심 구조 | 내용 (설명) |
|---|---|---|
mem_name="블랙핑크" |
[컬럼명] = '[문자열값]' |
같다: 컬럼의 값이 지정된 문자열 값과 정확히 일치하는 경우 |
mem_number=4 |
[컬럼명] = [숫자값] |
같다: 컬럼의 값이 지정된 숫자 값과 정확히 일치하는 경우 |
height<=162 |
[컬럼명] <= [숫자값] |
작거나 같다: 컬럼의 값이 지정된 숫자 값보다 작거나 같은 경우 |
height>=165 AND mem_number>6 |
[컬럼1] >= [값1] AND [컬럼2] > [값2] |
그리고 (AND): 두 조건 모두 참일 때 전체 조건이 참 |
height>=165 OR mem_number>6 |
[컬럼1] >= [값1] OR [컬럼2] > [값2] |
또는 (OR): 두 조건 중 하나라도 참일 때 전체 조건이 참 |
height>= 163 AND height<=165 |
[컬럼명] >= [값1] AND [컬럼명] <= [값2] |
범위 (AND 사용): 컬럼의 값이 [값1] 이상이고 [값2] 이하인 경우 |
height BETWEEN 163 AND 165 |
[컬럼명] BETWEEN [값1] AND [값2] |
범위 (BETWEEN 사용): 컬럼의 값이 [값1]과 [값2] 사이인 경우 (양 끝 값 포함) |
addr="경기" OR addr="경남" OR addr="전남" |
[컬럼명] = '[값1]' OR [컬럼명] = '[값2]' OR ... |
여러 OR 조건: 컬럼의 값이 여러 값 중 하나와 일치하는지 확인 (아래 IN과 비교) |
addr IN("경기","경남","전남") |
[컬럼명] IN ('[값1]', '[값2]', '[값3]', ...) |
포함 여부 (IN): 컬럼의 값이 괄호 안 목록의 값들 중 어느 하나라도 일치하는 경우 (여러 OR 조건을 간결하게 표현) |
mem_name LIKE "우%" |
[컬럼명] LIKE '[시작문자]%' |
패턴 일치 (LIKE): "우"로 시작하는 모든 문자열 (%는 0개 이상의 문자) |
mem_name LIKE "__핑크" |
[컬럼명] LIKE '__[패턴]' |
패턴 일치 (LIKE): 앞 두 글자는 아무거나 오고 "핑크"로 끝나는 문자열 (_는 정확히 한 글자) |
제미니가 정리한 표2
1. DDL (Data Definition Language) - 데이터 정의어
데이터베이스나 테이블의 구조를 정의, 변경, 삭제하는 명령어입니다.
| 구분 | 명령어 | 설명 및 예시 |
|---|---|---|
| 데이터베이스 | CREATE DATABASE |
새로운 데이터베이스를 생성합니다. CREATE DATABASE market_db; |
DROP DATABASE |
기존 데이터베이스를 삭제합니다. DROP DATABASE market_db; |
|
USE |
사용할 데이터베이스를 지정합니다. USE market_db; |
|
| 테이블 | CREATE TABLE |
새로운 테이블을 생성합니다. (컬럼명, 데이터타입, 제약조건 포함) sql<br>CREATE TABLE member (<br> member_id CHAR(8) NOT NULL PRIMARY KEY,<br> member_name VARCHAR(10)<br>);<br> |
DROP TABLE |
기존 테이블을 삭제합니다. DROP TABLE member; |
|
ALTER TABLE |
기존 테이블의 구조를 변경합니다. • 컬럼 추가: ALTER TABLE member ADD email CHAR(30) NULL UNIQUE; • 제약조건 추가: ALTER TABLE member ADD CONSTRAINT PRIMARY KEY(mem_id); • 기본값 변경: ALTER TABLE member ALTER COLUMN phone1 SET DEFAULT '02'; |
2. 테이블 생성 시 주요 요소 (데이터 타입 및 제약조건)
CREATE TABLE 이나 ALTER TABLE 사용 시 각 컬럼에 적용하는 규칙입니다.
| 구분 | 종류 | 설명 |
|---|---|---|
| 데이터 타입 | INT |
정수형 숫자 |
FLOAT, DOUBLE |
실수형 숫자 | |
CHAR(n) |
고정 길이 문자열 (n: 글자 수) | |
VARCHAR(n) |
가변 길이 문자열 (n: 최대 글자 수) | |
DATE, TIME, DATETIME |
날짜, 시간, 날짜 및 시간 | |
| 제약 조건 | PRIMARY KEY |
기본 키: 테이블의 대표 키. (NULL 값 불허, 중복 값 불허) |
FOREIGN KEY |
외래 키: 다른 테이블의 기본 키를 참조하여 테이블 간의 관계를 설정. | |
AUTO_INCREMENT |
자동 증가: 숫자 타입에만 적용. 데이터 입력 시 자동으로 1씩 증가. | |
UNIQUE |
고유 키: 해당 컬럼의 값은 중복될 수 없음. (NULL 값은 허용) | |
CHECK |
검사: 입력될 수 있는 값의 조건을 지정. (예: CHECK(price > 1000)) |
|
DEFAULT |
기본값: 값을 입력하지 않았을 때 자동으로 들어갈 값을 지정. | |
NOT NULL / NULL |
NULL 허용 여부: NOT NULL은 NULL 값을 허용하지 않음을 의미. |
3. DML (Data Manipulation Language) - 데이터 조작어
테이블 안의 데이터를 입력, 조회, 수정, 삭제하는 명령어입니다.
| 구분 | 명령어 | 설명 및 예시 |
|---|---|---|
| 입력 (INSERT) | INSERT INTO ... VALUES |
테이블에 새로운 행(데이터)을 직접 입력합니다. INSERT INTO member VALUES('TWC', '트와이스', 9, '서울'); |
INSERT INTO ... SELECT |
다른 테이블에서 조회한 데이터를 입력합니다. INSERT INTO city_popul SELECT Name, population FROM world.city; |
|
| 수정 (UPDATE) | UPDATE ... SET ... WHERE |
특정 조건의 행 데이터를 수정합니다. UPDATE city_popul SET city_name = '서울' WHERE city_name = 'Seoul'; |
UPDATE ... SET |
모든 행의 데이터를 수정합니다. (주의해서 사용!) UPDATE city_popul SET population = population / 1000; |
|
| 삭제 (DELETE) | DELETE FROM ... WHERE |
특정 조건의 행 데이터를 삭제합니다. DELETE FROM city_popul WHERE city_name LIKE 'New%'; |
4. SELECT - 데이터 조회 (가장 중요!)
| 구분 | 주요 구문 | 설명 및 예시 |
|---|---|---|
| 기본 조회 | SELECT 컬럼명 FROM 테이블명 |
특정 컬럼의 데이터를 조회합니다. SELECT mem_name, debut_date FROM member; |
SELECT * FROM 테이블명 |
모든 컬럼의 데이터를 조회합니다. SELECT * FROM member; |
|
| 조건 조회 | WHERE 조건식 |
조건에 맞는 데이터만 필터링합니다. (아래 WHERE 조건식 표 참고) SELECT * FROM member WHERE height >= 165 AND mem_number > 6; |
| 정렬 | ORDER BY 컬럼명 [ASC/DESC] |
결과를 특정 컬럼 기준으로 정렬합니다. (ASC: 오름차순, DESC: 내림차순) SELECT * FROM member ORDER BY height DESC, debut_date ASC; |
| 결과 수 제한 | LIMIT 개수 |
상위 N개의 결과만 보여줍니다. SELECT * FROM member ORDER BY debut_date LIMIT 3; |
LIMIT 시작행, 개수 |
특정 위치에서부터 N개의 결과만 보여줍니다. (시작은 0부터) SELECT mem_name, height FROM member ORDER BY height DESC LIMIT 3, 2; (4번째부터 2개) |
|
| 중복 제거 | DISTINCT 컬럼명 |
지정된 컬럼에서 중복된 값을 제거하고 하나씩만 보여줍니다. SELECT DISTINCT addr FROM member; |
| 그룹화 및 집계 | GROUP BY 컬럼명 |
특정 컬럼을 기준으로 데이터를 그룹화하고, 집계 함수를 사용합니다. • SUM(): 합계, AVG(): 평균, COUNT(): 개수 SELECT mem_id, SUM(price*amount) FROM buy GROUP BY mem_id; |
| 그룹 조건 | HAVING 조건식 |
GROUP BY로 생성된 그룹에 대한 조건을 지정합니다. SELECT mem_id, SUM(price*amount) FROM buy GROUP BY mem_id HAVING SUM(price*amount) > 1000; |
| 형 변환 | CAST(값 AS 타입) CONVERT(값, 타입) |
데이터의 타입을 변환합니다. SELECT CAST(AVG(price) AS SIGNED) FROM buy; |
5. WHERE 절 조건 연산자
| 연산자/구문 | 예시 | 의미 |
|---|---|---|
= |
mem_number = 4 |
같다 |
<=, >= |
height <= 162 |
작거나 같다, 크거나 같다 |
AND |
height >= 165 AND mem_number > 6 |
두 조건 모두 만족 (그리고) |
OR |
height >= 165 OR mem_number > 6 |
두 조건 중 하나라도 만족 (또는) |
BETWEEN a AND b |
height BETWEEN 163 AND 165 |
a와 b 사이의 값 (a, b 포함) |
IN (list) |
addr IN ('경기', '경남', '전남') |
리스트에 포함된 값 중 하나와 일치 |
LIKE '패턴' |
mem_name LIKE '우%' |
패턴과 일치하는 문자열 (%: 0개 이상의 문자, _: 1개의 문자) • '우%': '우'로 시작하는 모든 문자열 • '__핑크': 앞 두 글자는 아무거나, '핑크'로 끝나는 문자열 |
'SQL' 카테고리의 다른 글
| *두 번째 시험 예상 문제 (0) | 2025.06.20 |
|---|---|
| 공부용 시험문제 (0) | 2025.06.18 |
| 스토어드 프로시저 (0) | 2025.06.13 |
| [SQL][25.06.12] 176p 내부 조인 ~ 312p (0) | 2025.06.12 |
| 혼공 146p 월드 데이터 복사 (0) | 2025.06.11 |