데이터베이스에 새 테이블 생성
CREATE TABLE table_name (
column_1 data_type constraints,
column_2 data_type constraints,
column_3 data_type constraints
);
기존 테이블의 구조 변경(수정)
ALTER TABLE ~ RENAME
: 테이블 명 변경ALTER TABLE ~ RENAME COLUMN ~
: 컬럼 명 변경ALTER TABLE ~ ADD COLUMN ~
: 새 컬럼 추가ALTER TABLE ~ DROP COLUMN ~
: 컬럼 삭제단 컬럼이 다른 부분에서 참조되거나, PK, UNIQUE 제약조건이 있는 경우 삭제 불가
ALTER TABLE table_name RENAME TO new_table_name;
ALTER TABLE new_table_name RENAME COLUMN name TO last_name;
ALTER TABLE new_table_name ADD COLUMN address TEXT NOT NULL;
ALTER TABLE new_table_name DROP COLUMN address;
데이터베이스에서 테이블 제거
DROP TABLE table_name;
데이터 조작(CRUD)
INSERT, SELECT, UPDATE, DELETE
특정 테이블에서 데이터를 조회하기 위해 사용
SELECT column1, column2 FROM table_name;
SELECT * FROM table_name; # asterisk(*)를 통해 모든 컬럼을 가져올 수 있음
SELECT rowid, column FROM table_name; # rowid 출력
SELECT column FROM table_name ORDER BY column2 ASC; # column 오름차순 정렬
# EX)
SELECT name, age FROM user ORDER BY age ASC; # 나이 오름차순 정렬
SELECT column1, column2 FROM table_name ORDER BY column1 ASC, column2 DESC;
예를 들어
name | grage | age |
---|---|---|
김민우 | 4학년 | 23 |
이민우 | 4학년 | 25 |
SELECT name, grade, age FROM students ORDER BY grade ASC, age DESC;
와 같이 작성 가능하고,김민우 4학년 23세
이민우 4학년 25세
가 출력된다.SELECT DISTINCT column FROM table_name;
SELECT DISTINCT column1, column2 FROM table_name ORDER BY column2;
# 위의 경우 각 컬럼에서 중복을 제거하는 것이 아닌, 두 컬럼을 하나의 집합으로 보고 중복 제거
WHERE ~ <비교연산자>
: 비교연산자를 통해 특정 조건의 데이터만 추출하여 조회SELECT * FROM table_name WHERE column IS NULL; # column가 NULL인 값 찾기
WHERE ~ LIKE
: 패턴이 조건과 일치하는 데이터만 추출하여 조회(대소문자 구별X)두 개의 와일드 카드(Wildcards)를 통해 패턴 구성
- ~% (percent) : 0개 이상의 문자가 올 수 있음을 의미
- ‘영%’ → ‘영’, ‘영미’, ‘영미리’
- ‘%영’ → ‘일영’, ‘웅엉영’, ‘안됑애애영’
- ‘%영%’ → ‘서울영화관’, ‘영’
- ~ (underscore) : 단일(1개) 문자가 있음을 의미
- ‘영’ → ‘일영’, ‘한영’, ‘미영’
- ‘영’ → ‘김영환’, ‘이영환’
- ‘2__%’ → 2로 시작하며 최소 3자리 이상의 패턴
SELECT DISTINCT column FROM table_name WHERE column > 10;
SELECT DISTINCT column FROM table_name WHERE column LIKE '%호%';
WHERE ~ IN
값이 목록에 존재하는 경우 조회
NOT IN
연산자를 사용하면, 목록에 존재하지 않는 경우 조회
SELECT DISTINCT column FROM table_name WHERE column IN (a, b, c);
SELECT DISTINCT column FROM table_name WHERE column NOT IN (a, b, c);
WHERE ~ BETWEEN ~ AND ~
값이 특정 범위 내에 있는 경우 조회
NOT BETWEEN
연산자를 사용하면, 범위 내에 있지 않은 경우 조회
SELECT DISTINCT column FROM table_name WHERE column BETWEEN 10 AND 30;
SELECT DISTINCT column FROM table_name WHERE column NOT BETWEEN 10 AND 30;
OFFSET
을 이용하면, 특정 위치에서부터 제한된 행 수 만큼 출력할 수 있음SELECT DISTINCT column FROM table_name LIMIT 10; # 10개의 행만 출력
SELECT DISTINCT column FROM table_name LIMIT 10 OFFSET 50; # 10번 부터 10개의 행을 출력
Aggregate Function
- 집계 함수. 각 집합에 대한 계산을 수행하고 단일 값을 반환
- AVG()
, COUNT()
, MAX()
, MIN()
, SUM()
을 제공
SELECT COUNT(*) FROM table_name; # 테이블의 전체 행 수 조회
SELECT AVG(age) FROM users WHERE age > 19; # 19세 이상의 사람들의 평균 나이 조회
SELECT AVG(*) AS average FROM table_name; # AS 키워드를 통해 컬럼명을 임시로 변경 가능
만약 컬럼 목록을 생략하는 경우, 모든 컬럼에 대한 삽입 값을 지정해야 함.
삽입할 값 목록의 값 개수는 컬럼 목록의 컬럼 개수와 같아야 함
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
# 단일 행 추가
INSERT INTO users (name, age, address) VALUES ('홍길동', 23, '서울');
INSERT INTO users VALUES ('홍길동', 23, '서울');
# 여러 행 추가
INSERT INTO users
VALUES
('홍길동', 23, '서울'),
('홍길순', 24, '부산'),
('홍길자', 21, '대전'),
('홍말자', 22, '광주');
UPDATE table_name
SET column1 = new_value1,
column2 = new_value2
WHERE
search_condition;
UPDATE users
SET name = '홍길동',
age = 23
WHERE
rowid = 3;
DELETE FROM table_name
WHERE search_condition;
UPDATE FROM users WHERE rowid = 5; # rowid 5번 데이터 삭제
UPDATE FROM users WHERE name LIKE '%영%'; # 이름에 '영'이 포함되는 데이터 삭제
UPDATE FROM users; # 테이블의 모든 데이터 삭제