반응형
'그림으로 배우는 데이터베이스' 책을 공부하며 정리했다.

목표 |
▶ SQL 문법 익히기
내용 정리 |
SQL 기본 구조
SELECT | 컬렴명 | FROM | 테이블명 | WHERE | 조건 | ; |
항목 | 값 | 항목 | 값 | 항목 | 값 | ; |
(예시 문장이다. 무조건 위 구조가 기본인 것은 아니다.)
▶ 항목-값이 쌍으로 이루어진 구조이다.
데이터베이스 관리
▶ 생성 (CREATE)
→ CREATE DATABASE 데이터베이스명;
예) CREATE DATABASE database_a;
▶ 삭제 (DROP)
→ DROP DATABASE 데이터베이스명;
예) DROP DATABASE database_a;
▶ 표시 (SHOW)
→ 생성된 데이터베이스들의 목록 확인
→ SHOW DATABASES;
▶ 선택 (USE)
→ 해당 데이터베이스에서 작업을 하겠다.
→ USE 데이터베이스명;
예) USE database_a;
테이블 관리
▶ 생성 (CREATE)
→ CREATE TABLE 테이블명 (컬럼명 데이터타입, 컬렴명 데이터타입, ...);
예) CREATE TABLE menus (id INT, name VARCHAR(20));
▶ 삭제 (DROP)
→ DROP TABLE 테이블명;
예) DROP TABLE menus;
▶ 표시 (SHOW)
→ 생성된 테이블들의 목록 확인
→ SHOW TABLES
??
테이블 생성 시 무조건 컬럼정보도 넣어줘야하나?
테이블 생성 후 컬럼 추가/삭제/변경은 안 되나?
레코드 관리
▶ 삽입 (INSERT INTO)
→ INSERT INTO 테이블명 (컬럼명, 컬럼명, ...) VALUES (값1, 값2, ...);
예) INSERT INTO numes (id, name) VALUES (1, '카레');
→ 이때, 데이터타입을 잘 맞춰주어야한다. (오류 발생 혹은 의도치 않은 값이 반환 될 수 있다.)
▶ 검색 (SELECT)
→ SELECT 컬렴명 FROM 테이블명;
예) SELECT name FROM menus;
→ 모든 데이터 검색하기 (별(*)을 사용한다.)
예) SELECT * FROM menus;
→ 여러 컬럼 검색하기 (쉼표(,)로 구분한다.)
예) SELECT id, name FROM menus;
WHERE
▶ 검색 조건을 지정하여 조건에 맞는 데이터만 조회하도록 한다.
▶ 'if'의 느낌?
① =
예) SELECT * FROM users WHERE age = 20;
→ age의 값이 20인 데이터만 취득
② AND
예) SELECT * FROM users WHERE name = '홍길동' AND age = 20;
→ name의 값이 '홍길동'이고 age의 값이 20인 데이터만 취득
③ OR
예) SELECT * FROM users WHERE name = '홍길동' OR age = 20;
→ name의 값이 '홍길동'이거나 age의 값이 20인 데이터만 취득
★ AND, OR를 조합하여 좀 더 복잡하게 사용할 수도 있다.
④ 연산자 (!=, >, >=, <, <=)
⑤ BETWEEN
예) SELECT * FROM users WHERE age BETWEEN 21 AND 25;
→ age의 값이 21 ~ 25 사이인 데이터만 취득
⑥ IN, NOT IN
예) SELECT * FROM users WHERE age IN (21, 30);
→ age의 값이 21이나 30에 해당하는 데이터 취득
예) SELECT * FROM users WHERE age NOT IN (21, 30);
→ age의 값이 21이나 30에 해당하지 않는 데이터 취득
⑦ LIKE
예) SELECT * FROM users WHERE name LIKE '홍%';
→ name의 값이 '홍'으로 시작하는 데이터만 취득
★ '홍%' : 시작단어 // '%홍' : 끝단어 // '%홍%' : 해당 단어 포함
★ _ 의 의미
⑧ IS NULL, IS NOT NULL
예) SELECT * FROM users WHERE age IS NULL;
→ age의 데이터 중 NULL값을 가지는 데이터 조회
데이터 관리
▶ 갱신 (UPDATE)
→ UPDATE 테이블명 SET 갱신할내용 (WHERE 조건)
예) UPDATE menus SET name = '스튜' WHERE id = 1;
예) UPDATE users SET status = 1 WHERE age >= 30;
▶ 삭제 (DELETE)
→ DELETE FROM 테이블명 WHERE 조건; (☆)
예) DELETE FROM menus WHERE id = 1;
★ 데이터베이스 및 테이블 삭제 시 'DROP' 명령어 사용
예) DROP DATABASE dabatase_a;
예) DROP TABLE table_a;
★ 데이터 삭제 전, 해당 쿼리문을 SELECT로 확인한 후 DELETE 해주면 부주의한 사고를 예방할 수 있다.
??
데이터 삭제 시 조건이 무조건 있어야하나?
▶ 정렬 (ORDER BY)
→ ORDER BY 정렬기준컬럼
→ 기본옵션은 오름차순(ASC)이다. 내림차순(DESC)는 명시해주면 된다.
예) SELECT * FROM users ORDER BY age (ASC); * 생략가능
예) SELECT * FROM users ORDER BY age DESC;
▶ LIMIT, OFFSET
예) SELECT * FROM users LIMIT 2;
→ 상위 2개의 데이터만 취득
예) SELECT * FROM users LIMIT 2 OFFSET 2;
→ 인덱스 2(3행 째) 데이터 부터 2개의 데이터만 취득
→ 아래의 표에 적용하면 유리, 맹구 레코드가 출력된다.
★ 레코드는 0부터 시작한다. 인덱스를 생각하면 된다. (↓ 아래 표 참고)
예) 그래서 OFFSET 2는 인덱스 2번 즉, 3번째 행이다.
▶ COUNT
→ 레코드의 건수를 카운트 한다.
→ SELECT COUNT(컬럼명 or *) FROM 테이블명;
예) SELECT COUNT(*) FROM users;
→ 조건문(WHERE)과 조합하여 사용할 수 있다.
예) SELECT COUNT(name) FROM users WHERE age > 20;
▶ MIN, MAX
→ 데이터의 최소, 최대값을 구한다.
→ SELECT MIN(컬럼명) FROM 테이블명;
예) SELECT MIN(age) FROM users;
→ SELECT MAX(컬럼명) FROM 테이블명;
예) SELECT MAX(age) FROM users;
▶ SUM, AVG
→ 데이터의 합, 평균을 구한다.
→ SELECT SUM(컬럼명) FROM 테이블명;
예) SELECT SUM(age) FROM users;
→ SELECT AVG(컬럼명) FROM 테이블명;
예) SELECT AVG(age) FROM users;
▶ GROUP BY
→ 값이 동일한 레코드를 그룹으로 묶어서 출력한다.
→ COUNT, MIN, MAX, SUM, AVG 등을 조합하여 사용할 수 있다.
→ SELECT 컬럼명 FROM 테이블명 GROUP BY 컬럼명;
예) SELECT author FROM Books GROUP BY author;
▶ HAVING
→ 그룹화된 후의 결과로 부터 필요한 데이터만 추려서 취득 (일종의 조건문 WHERE과 유사)
→ SELECT ~ GROUP BY 컬럼명 HAVING 조건;
예) SELECT author, COUNT(*) FROM Books GROUP BY author HAVING COUNT(*) >= 2;
★ WHERE vs. HAVING
- WHERE : 그룹화 전 수행
- HAVING : 그룹화 후 수행
예) SELECT author, COUNT(*) FROM Books
WHERE ranking >= 10
GROUP BY author
HAVING COUNT(*) >= 2;
테이블 결합 (JOIN)
▶ 개념
→ 2 개 이상의 테이블을 결합해서 한 번에 데이터를 얻는 것이다.
→ 관계형 데이터베이스의 경우, 밀접한 데이터들끼리 테이블화되어있고
각 테이블마다 연결 되어있다. (연결이 되지 않는 경우도 있다.)
→ 이때, 연결(관계)을 위해서는 공통되는 키(Key)를 가지고 있다.
▶ 종류
① 내부결합 (☆)
ⓐ INNER JOIN
② 외부결합
ⓐ LEFT JOIN
ⓑ RIGHT JOIN
??
INNER JOIN과 그냥 Join의 차이?
★ 실습 ★
※ SQL 작성해보기
반응형
'Backend > Database' 카테고리의 다른 글
[DB스터디] 2_데이터의 보존 형식 (0) | 2025.02.04 |
---|---|
[DB스터디] 1_데이터베이스의 기본 (0) | 2025.02.03 |
댓글