SQL(1)
2022, Aug 16
Database
- 데이터베이스는 체계화된 데이터의 모임
- 여러 사람이 공유하고 사용할 목적으로 통합 관리되는 정보의 집합
- 논리적으로 연관된(하나 이상의) 자료의 모음, 내용을 구조화 하여 검색과 갱신의 효율화를 꾀한것
- 몇 개의 자료 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고 자료를 구조화하여 기억시켜 놓은 자료의 집합체
데이터베이스로 얻는 장점들
- 데이터 중복 최소화
- 데이터 무결성(정확한 정보를 저장)
- 데이터 일관성
- 데이터 독립성(물리적 / 논리적)
- 데이터 표준화
- 데이터 보안 유지
RDB
관계형 데이터베이스(RDB, Relational Database)
- 서로 관련된 데이터를 저장하고 접근할 수 있는 데이터베이스 유형
- 키(Key)와 값(Value)들의 간단한 관계를 표 형태로 정리한 데이터베이스
스키마(schema)
- 데이터베이스에서 자료의 구조, 표현방법, 관계 등 전반적 명세를 기술한 것
column | datatype |
---|---|
id | INT |
name | TEXT |
address | TEXT |
age | INT |
테이블(table)
- 열(컬럼/필드)과 행(레코드/값)의 모델을 사용해 조직된 데이터 요소들의 집합
id | name | address | age |
---|---|---|---|
1 | 홍길동 | 제주 | 20 |
2 | 김길동 | 서울 | 30 |
3 | 박길동 | 독도 | 40 |
- 행(row) : 실제 데이터가 저장되는 형태
- 기본키(Primary Key) : 각 행(레코드)의 고유 값
- 반드시 설정해야 하며, 데이터베이스 관리 및 관계 설정 시 주요하게 활용 됨(여기서는 id가 PK)
RDBMS
- 관계형 데이터베이스 관리 시스템
- 관계형 모델을 기반으로 하는 데이터베이스 관리시스템을 의미
SQL
SQL(Structured Query Language)
- 관계형 데이터베이스 관리시스템의 데이터 관리를 위해 설계된 특수 목적 프로그래밍 언어
- 데이터베이스 스키마 생성 및 수정
- 자료의 검색 및 관리
- 데이터베이스 객체 접근 조정 관리
분류 | 개념 | 예시 |
---|---|---|
DDL(Data Definition Language) | 관계형 데이터베이스 구조를 정의하기 위한 명령어 | CREATE, DROP, ALTER |
DML(Data Manipulation Language) | 데이터를 저장, 조회, 수정, 삭제 등을 하기 위한 명령어 | INSERT, SELECT, UPDATE, DELETE |
DCL(Data Control Language) | 데이터베이스 사용자의 권한 제어를 위해 사용하는 명령어 | GRANT, REVOKE, COMMIT, ROLLBACK |
명령어(SQLite 기준)
테이블 생성 및 삭제
-- classmates 라는 이름의 테이블 생성
CREATE TABLE classmates (
id INTEGER PRIMARY KEY,
name TEXT
);
-- 테이블 목록 조회
.table
-- 특정 테이블 스키마 조회
.schema classmates
-- 값 추가
INSERT INTO classmates VALUE(1, '조세호');
-- 테이블 조회
SELECT * FROM classmates;
-- 테이블 삭제
DROP TABLE classmates;
필드 제약 조건
- NOT NULL : NULL 값 입력 금지
- UNIQUE : 중복 값 입력 금지(NULL 값은 중복 입력 가능)
- PRIMARY KEY : 테이블에서 반드시 하나. NOT NULL + UNIQUE
- FOREIGN KEY : 외래키, 다른 테이블의 key
- CHECK : 조건으로 설정된 값만 입력 허용
- DEFAULT : 기본 설정 값
CREATE TABLE students (
id INTEGER PRIMATY KEY, -- PK
name TEXT NOT NULL, -- null값이 될 수 없음
age INTEGER DEFAULT 1 CHECK (0 < age) -- 나이는 0보다 큰 값을 확인, 기본은 1
)
INSERT
-
“insert a single row into a table”
-
INSERT INTO 테이블_이름 VALUES (값1, 값2, 값3)
-
INSERT INTO 테이블_이름 (컬럼1, 컬럼2) VALUES (값1, 값2)
INSERT INFO classmates(name, age) VALUES ('홍길동', 23);
SELECT
- “query data from table”
- 테이블에서 데이터를 조회
- SELECT 문은 SQLite에서 가장 기본이 되는 문이며 다양한 절(clause)와 함께 사용
- ORDER BY, DISTINCT, WHERE, LIMIT, GROUP BY
SELECT rowid, name FROM classmates;
LIMIT
- “constrain the number of rows returned by query”
- 쿼리에서 반환되는 행 수를 제한
- 특정 행부터 시작해서 조회하기 위해 OFFSET 키워드와 함께 사용하기도 함
OFFSET : 처음부터 주어진 요소나 지점까지의 차이를 나타내는 정수형
예시
- 문자열 ‘abcdef’ 에서 문자 ‘c’는 시작점 ‘a’에서 2의 OFFSET을 지님
- SELECT * FROM MY_TABLE LIMIT 10 OFFSET 5
- 6번째 행 부터 10개 행을 조회(6번째 행부터 10개를 출력)
- 0부터 시작함
SELECT rowid, name FROM classmates LIMIT 1 OFFSET 2; -- classmates 테이블에서 id, name 컬럼값을 세 번째에 있는 하나만 조회
WHERE
- “specify the search condition for rows returned by the query”
- 쿼리에서 반환된 행에 대한 특정 검색 조건을 지정
SELECT * FROM classmates WHERE address = 'seoul' -- classmates 테이블에서 주소가 서울인 값을 출력
SELECT DISTINCT
- “remove duplicate rows in the result set”
- 조회 결과에서 중복 행을 제거
- DISTINCT 절은 SELECT 키워드 바로 뒤에서 작성해야 함
SELECT DISTINCT age FROM classmates -- age의 중복값 제거