[SQL] 인프런 Do it! SQL 입문 정리 (1) - 데이터베이스와 SQL 기초
안녕하세요 진자이입니다 :) BOAZ 2023 하계 스터디로 SQL을 공부하게 되면서 SQL을 처음부터 다시 공부하게 되었습니다. 공부한 내용을 정리하며 복기도 하고, 많은 분들에게 도움이 되었으면 하는 마음으로 SQL 기초에 대한 내용을 기록하려고 합니다.
DB? DBMS?
데이터가 저장된 순수한 저장공간 = DB | 저장하고 관리하기 위한 시스템 = DBMS (단, 별반 차이가 크지는 않다.)
DATABASE(DB)
- 논리적으로 연관된 데이터를 모아 일정한 형태로 저장해 놓은 것
- 응용 시스템들이 공용(shared)로 사용하기 위해 통합(integrated), 저장(stored)한 데이터 집합을 의미
Database Management System(DBMS)
- 데이터베이스 관리 프로그램으로, 데이터 입력, 수정, 삭제 등의 기능을 제공
DBMS 장점 : ISOS & R1C3
ISOS
- Integrated Data : 데이터 중복 최소화
- Stored Dta : 컴퓨터가 접근할 수 있는 매체에 저장된 데이터
- Operatational Data : 조직의 고유한 업무를 수행하는데 필요한 데이터
- Shared Data : 여러 응용 시스템이 공동으로 소유하고 유지하는 데이터
R1C3
- Real Time Accessibility : 사용자 질이의 실시간 처리해 응답
- Continuous Evolution : 삽입/삭제/수정 작업을 통한 최신의 데이터를 동적으로 유지
- Concurrent Sharing : 목적이 다른 여러 사용자가 동시에 데이터를 공유
- Content Reference : 데이터베이스에 있는 데이터를 참조할 때 레코드나 주소나 위치가 아닌 사용자가 요구하는 데이터 내용으로 참조
데이터베이스 종류
계층형 데이터베이스
- 부모와 자식이 트리 관계를 가지는 구조
- 부모는 여러 자식 레코드를 가짐
- 데이터 중복이 발생하기 쉬우며 상하 종속관계로 인해 수정이 어려움
- 현재는 거의 사용되지 않음!
네트워크형 데이터베이스
- 데이터를 노드로 표현한 모델
- 노드는 네트워크 상에 있으며 서로 대등한 관계
- 계층형의 단점인 중복, 상하 관계 운영
- 구조가 복잡하고 종속성 문제가 발생하여 거의 사용되지 않음!
키-값 데이터베이스
- NoSQL의 한 종류로 키-값을 일대일 대응한 데이터 저장
- 데이터 중복이 발생하지만, 스키마가 저장되지 않는 비정형 데이터 저장에 유리
관계형 데이터베이스
→ 엑셀에 데이터를 입력할 때 행 단위로 데이터가 입력이 되고, 열은 목적에 맞게 작성하는 것과 유사
- 데이터를 열과 행으로 구성하여 테이블로 정리
- 고유키로 각 행을 식별
- 데이터는 행 단위로 저장되며 각 항목의 속성은 열이라 표현
- 테이블간의 관계를 이용하여 데이터를 저장
- ORACLE, MySQL, SQL Server, MariaDB, PostgreSQL, SQLite 등
- (↔ Non Relational Database) reids, hbase, mongodb 등
SQL이란? Structure Query Language!
데이터베이스에서 데이터 조작과 데이터 정의를 하기 위해 사용하는 언어로, 사용자는 데이터베이스에 데이터를 입력/조회/수정하기위해 SQL을 사용한다.
SQL을 배워야 하는 이유?
- 대부분의 데이터는 SQL방식의 DB에 저장되어 있다.
- 그 데이터를 뽑기 위해선 SQL 문법에 맞게 컴퓨터에 명령을 내려야 한다
- 데이터 분석의 시작은 데이터 추출이다.
- SQL 방식이 아니라도 SQL 언어와 유사한 방식을 사용한다!
Do it! SQL에서 실습할 수 있는 내용 예시
- 오늘 10%이상 급등한 종목은?
- COVID로 주가 폭락 시 회복까지 걸린 기간은?
- 배당이 높은 주식은?
DDL & DCL & TCL
DDL
데이터 정의어(DDL; Data Definition Language)
CREATE, ALTER, DROP, RENAME이 해당되며 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 그러한 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어들을 DDL이라고 부른다.
-- 테이블 생성 기본
CREATE TABLE 테이블명(
칼럼명1 CHAR(7) NOT NULL,
칼럼명2 VARCHAR(20) NOT NULL);
-- ORACLE PK 제약조건 생성하기/추가하기
-- 1번 방법
CREATE TABLE 테이블명 ~,
CONSTRAINT 테이블명_PK PRIMARY KEY (컬럼명);
-- 2번 방법
ALTER TABLE 테이블명 ADD CONSTRAINT 테이블명_PK PRIMARY KEY (컬럼명);
-- 구조 확인
DESCRIBE 테이블명;
-- 칼럼 추가/삭제
ALTER TABLE PLAYER ADD(ADDRESS VARCHAR2(80));
ALTER TABLE PLAYER DROP COLUMN ADDRESS;
-- 칼럼 수정
ALTER TABLE TEAM_TEMP MODIFY
(ORIG_YYYY VARCHAR2(8) DEFALUT '20020129' NOT NULL);
-- 칼럼명 변경데이터유형 디폴트값 제약조건변경
-- 칼럼명 변경
RENAME COLUMN TEAM_ID TO T_ID;
-- ORACLE 칼럼 정의 변경 (괄호로 여러 개 동시 수정이 가능)
ALTER TABLE
MODIFY COLUMN
(PLAYER_ID VARCHAR(2) [NOT NULL],
(PLAYER_NAME VARCHAR(4) [NOT NULL]);
-- SQL SERVER 칼럼 정의 변경 (여러 개 동시 수정이 불가능)
ALTER TABLE PLAYER
ALTER COLUMN PLAYER_ID VARCHER(2) [NOT NULL];
ALTER COLUMN PLAYER_NAME VARCHER(4) [NOT NULL];
--제약조건 추가/삭제
ADD CONSTRAINT 조건명 조건 (칼럼명);
DROP CONSTRAINT 조건명;
-- 테이블명 변경
RENAME PLAYER TO PLAYER_BACKUP;
-- 테이블 삭제
DROP TABLE PLAYER;
-- 테이블 데이터 삭제(롤백불가)
TRUNCATE TABLE PLAYER;
DML
데이터 조작어(DML; Data Manipulation Language)
- SELECT : 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어. (=RETRIEVE)
- INSERT, UPDATE, DELETE : 데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류의 명령어들을 말한다. 예를들어 데이터를 테이블에 새로운 행을 집어넣거나, 원하지 않는 데이터를 삭제하거나 수정하는 것들의 명령어를 일컫는다.
-- 입력
INSERT INTO PLAYER (PLAYER) VALUES ('PJS');
-- 테이블명 컬럼리스트 VALUE리스트
-- 수정
UPDATE PLAYER SET BACK_NO = 60;
-- 수정될칼럼명 새로운 값
-- 삭제
DELETE FROM PLAYER; -- 사용자 COMMIT으로, 로그를 쌓아 COMMIT 전 ROLLBACK이 가능하다
TRUNCATE TABLE PLAYER; -- AUTO COMMIT으로, 로그를 쌓지 않아 ROLLBACK이 불가능하다.
-- 테이블 스키마 구조는 유지한 채로 모든 ROW를 삭제
DROP TABLLE PLAYER; -- AUTO COMMIT으로, ROLLBACK이 불가능하다.
-- 테이블구조마저 완전히 삭제한다.
-- 조회
SELECT PLAYER_ID FROM PLAYER;
SELECT PALYER AS '선수명' FROM PLAYER;
-- 합성 연산자(문자와 문자를 연결)
SELECT HEIGHT||'cm' FROM PLAYER;
TCL
트랜잭션 제어어(TCL; Transaction Control Language)라고 하며 commit, rollback : 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 트랜잭션(작업단위) 별로 제어하는 명령어를 일컫는다.
트랜잭션이란? 밀접히 관련되어 분리될 수 없는 1개 이상의 DB 조작(전부 적용 OR 전부 취소). 논리적 연산단위
- 트랜잭션의 대상O : DML문(INSERT, DELETE), SELECT FOR UPDATE
- 트랜잭션의 대상X : SELECT
- COMMIT : 올바르게 반영된 데이터를 DB에 반영
- ROLLBACK : 트랜잭션 시작 이전의 상태로 되돌림; COMMIT 되지 않은 모든 트랜잭션을 롤백
- SAVEPOINT : 저장 지점으로, 롤백 시 트랜잭션의 일부만 저장 시점으로 돌아간다.
SAVE TRANSACTION SVTR1;
SAVEPOINT SVPT1;
ROLLBACK TO SVPT1;
COMMIT;