DevYoon
[DB] SQL 본문
SQL
1️⃣ SQL
1️⃣-1️⃣ SQL이란?
- 관계형 데이터베이스 관리시스템의 데이터 관리를 위해 설계된 프로그래밍 언어
1️⃣-2️⃣ 분류
- DDL
- 데이터 정의 언어(Data Definition Language)
- 관계형 데이터베이스 구조(테이블, 스키마)를 정의하기 위한 명령어
- CREATE, DROP, ALTER
- DML
- 데이터 조작 언어(Data Manipulation Language)
- 데이터를 저장, 조회, 수정, 삭제 등을 하기 위한 명령어
- INSERT(삽입), SELECT(조회), UPDATE(갱신), DELETE(삭제) (시험에 나옴)
- DCL
- 데이터 제어 언어(Data Control Language)
- 데이터베이스 사용자의 권한 제어를 위해 사용하는 명령어
- GRANT, REVOKE, COMMIT, ROLLBACK
2️⃣ 테이블 생성 및 삭제
2️⃣-1️⃣ 데이터 베이스 생성하기
sqlite3 tutorial.sqlite3
sqlite > .database
. 은 sqlite 프로그램의 기능을 실행
2️⃣-2️⃣ csv 파일을 테이블로 만들기
sqlite> .mode csv
sqlite> .import <파일명>.csv <name>
sqlite> .tables
2️⃣-3️⃣SELECT
SELECT * FROM <name>;
;까지 하나의 명령(SQL Query)로 간주
➡️ SELECT문은 특정 테이블의 레코드(행) 정보를 반환
*️⃣ 쿼리문 특징
- SELECT 필드명 from 테이블명;
- 쿼리문 대소문자 구분 X
- 여러 줄로 작성해도 ;을 기준으로 하나의 문장으로 인식함
- DML, DDL, DCL 등이 있음
*️⃣ 터미널 view 변경
- .headers on ➡️ SELECT * FROM {name};
id,first_name,last_name,age,country,phone 1,"길동","홍",600,"충청도",010-0000-0000
- .mode column ➡️ SELECT * FROM {name};
id first_name last_name age country phone -- ---------- --------- --- ------- ------------- 1 길동 홍 600 충청도 010-0000-0000
2️⃣-4️⃣ 테이블 생성
CREATE TABLE <테이블명> (
id INTEGER PRIMARY KEY,
name TEXT
);
2️⃣-5️⃣ 테이블 제거
DROP TABLE <테이블명>;
3️⃣ CRUD
3️⃣-1️⃣ CREATE
- INSERT
- 특정 테이블에 단일 행 삽입(생성)
INSERT INTO 테이블명 (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...)
- 특정 테이블에 단일 행 삽입(생성)
- 공백으로 비워두지 않기 ➡️ NOT NULL 설정
CREATE TABLE classmates ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INT NOT NULL, address TEXT NOT NULL );
3️⃣-2️⃣ READ
- SELECT
SELECT [컬럼명] FROM [테이블명];
- 테이블에서 데이터를 조회
- 다양한 절(Clause)과 함께 사용
- ex) ORDER BY, DISTINCT, WHERE, LIMIT, GROUP BY 등
- LIMIT
- 가져올 개수
- SELECT [컬럼명] FROM [테이블명] LIMIT 숫자
- ex) LIMIT 1 ➡️ 1개 가져옴
- OFFSET
- 시작 위치
- SELECT [컬럼명] FROM [테이블명] OFFSET 숫자
- 0부터 시작
- ex) OFFSET 1 ➡️ 시작점으로부터 1 offset, 2번부터 가져옴
WHERE
SELECT 컬럼1, 컬럼2, ... FROM 테이블명 WHERE 조건;
- 쿼리에서 반환된 행에 대한 특정 검색 조건을 지정
- DISTINCT
SELECT DISTINCT 컬럼명 FROM 테이블명;
- 조회 결과에서 중복 행을 제거
- DELETE
DELETE FROM 테이블명 WHERE 조건;
- 테이블에서 행을 제거
- ex) id가 5인 레코드를 제거하시오
DELETE FROM 테이블명 WHERE rowid=5;
- 지워진 id는 재사용함
- id 재사용 방지 ➡️ id INTEGER PRIMARY KEY AUTOINCREMENT
- DB는 한 번 지우면 정말 끝🥲
➡️ 지워버리기보다는 isVisible Numeric / isVisible boolen 속성을 통해 관리
- UPDATE
UPDATE 테이블명 SET 컬럼1=값1, 컬럼2=값2, ... WHERE 조건;
- 기존 행의 데이터를 수정
- SET clause에서 테이블의 각 열에 대해 새로운 값을 설정
- 조건은 고유한 값인 PK(rowid)를 기준으로 수정
*️⃣ 정리
구문 | 예시 | |
---|---|---|
C | INSERT | INSERT INTO 테이블명 (컬럼1, 컬럼2...) VALUES (값1, 값2...); |
R | SELECT | SELECT * FROM 테이블명 WHERE 조건; |
U | UPDATE | UPDATE 테이블명 SET 컬럼1=값1, 컬럼2=값2... WHERE 조건; |
D | DELETE | DELETE FROM 테이블명 WHERE 조건; |
4️⃣ WHERE
4️⃣-1️⃣ TABLE users 생성
CREATE TABLE users(
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
age INTEGER NOT NULL,
country TEXT NOT NULL,
phone TEXT NOT NULL,
balance INTEGER NOT NULL
);
4️⃣-2️⃣ csv 파일 정보를 테이블에 적용하기
sqlite> .mode csv
sqlite> .import users.csv users
sqlite> .tables
*️⃣ 30살 이상만 조회하기
SELECT * FROM users WHERE age >= 30;
*️⃣ 나이가 30살 이상이고, 성이 '김'인 사람의 나이와 성만 조회
SELECT age, last_name FROM users WHERE age >= 30 AND last_name='김';
5️⃣ Aggregate Functions
- Aggregate Function이란?
- 값 집합에 대한 계산을 수행하고 단일 값을 반환
- 여러 행으로부터 하나의 결과값을 반환하는 함수
- SELECT 구문에서만 사용
- 종류
- COUNT
- 그룹의 항목 수를 가져옴
SELECT COUNT(컬럼) FROM 테이블명;
- 그룹의 항목 수를 가져옴
- AVG
- 모든 값의 평균을 계산
SELECT AVG(컬럼) FROM 테이블명;
- 모든 값의 평균을 계산
- MAX
- 그룹에 있는 모든 값의 최대값 가져옴
SELECT MAX(컬럼) FROM 테이블명;
- 그룹에 있는 모든 값의 최대값 가져옴
- MIN
- 그룹에 있는 모든 값의 최소값 가져옴
SELECT MIN(컬럼) FROM 테이블명;
- 그룹에 있는 모든 값의 최소값 가져옴
- SUM
- 모든 값의 합을 계산
SELECT SUM(컬럼) FROM 테이블명;
- 모든 값의 합을 계산
- COUNT
6️⃣ LIKE
- LIKE란?
- 패턴 일치를 기반으로 데이터를 조회하는 방법
SELECT * FROM 테이블 WHERE 컬럼 LIKE '와일드카드패턴';
- 패턴 일치를 기반으로 데이터를 조회하는 방법
- 패턴 구성을 위한 wildcards
- % (percent sign)
- 0개 이상의 문자
- 이 자리에 문자열이 존재할 수도 있다.
- _ (underscore)
- 임의의 단일 문자
- 이 자리에 반드시 문자열이 존재한다.
ex) 2% ➡️ 2로 시작하는 값 ....... 2살, 20대 모두 나옴
2_ ➡️ 2로 시작하면서 두자리인 값 ....... 20대만 나옴
Wildcards 뜻 2% 2로 시작하는 값 %2 2로 끝나는 값 %2% 2가 들어가는 값 _2% 아무 값이 하나 있고 두번째가 2로 시작하는 값 1____ 1로 시작하고 총 4자리인 값 2_%_% 2로 시작하고 적어도 3자리인 값 2__% 2로 시작하고 적어도 3자리인 값
- % (percent sign)
7️⃣ ORDER BY & GROUP BY
7️⃣-1️⃣ ORDER BY
- ORDER BY란?
- 조회 결과 집합을 정렬
- SELECT문에 추가하여 사용
- 정렬 순서를 위한 2개의 키워드 제공
SELECT * FROM 테이블명 ORDER BY 컬럼 ASC; SELECT * FROM 테이블명 ORDER BY 컬럼1, 컬럼2, DESC;
- ASC 오름차순
- DESC 내림차순
- ex) 계좌 잔액 순으로 내림차순 정렬하여 성과 이름을 10개만 조회
select first_name, last_name from users order by balance desc limit 10;
7️⃣-2️⃣ GROUP BY
- GROUP BY란?
SELECT 컬럼1, aggregate_function(컬럼2), FROM 테이블명 GROUP BY 컬럼1, 컬럼2
- 행 집합에서 요약 행 집합을 만듦
- SELECT문의 옵션절
- 선택된 행 그룹을 하나 이상의 열 값으로 요약행으로 만듦
- 문장에 WHERE 절이 포함된 경우 반드시 그 뒤에 작성해야 함
- ex) 각 성이 몇 명씩 있는지 조회
SELECT last_name, COUNT(*), FROM users GROUP BY last_name;
- 컬럼명 바꿔서 조회 ➡️ AS 활용
SELECT last_name, COUNT(*) AS name_count FROM users GROUP BY last_name;
8️⃣ ALTER TABLE
- 기능
- TABLE 이름 변경
ALTER TABLE 테이블명 RENAME TO 새로운 테이블명;
- 테이블에 새로운 컬럼 추가
ALTER TABLE 테이블명 ADD COLUMN 컬럼명 NOT NULL DEFAULT '기본값';
- 컬럼명 수정
ALTER TABLE 테이블명 RENAME COLUMN 기존 컬럼명 TO 새로운 컬럼명;
- TABLE 이름 변경