Backend
home
🕔

2024. 9. 12 (SQL)

생성일
2025/01/24 05:52
태그
SQL(Structured Query Language)
DDL (데이터 정의어): ALTER, CREATE, DROP
DML (데이터 조작어): SELECT, INSERT, UPDATE, DELETE
DCL (데이터 제어어[TCL]): GRANT, REVOKE, COMMIT, ROLLBACK
RDBMS(관계형 데이터베이스) : MySQL, OracleDB, MSSQL, MariaDB, PostgreSQL, DB2
RDBMS 특징
고정된 행과 열로 구성되어 정형적인 데이터 처리가 편함
데이터의 무결성과 일관성을 보장
복잡한 관계 표현에 적합 (외래키를 통한 조인)
SQL문 사용
SQL에서 테이블의 모든 데이터를 조회하기
SELECT * FROM 테이블명;
SQL에서 특정 열(job)의 중복된 값을 제거하기 위해서는
SELECT DISTINCT job FROM 테이블명;
특정 조건을 만족하는 데이터만 조회하기 위해서는
WHERE 절 사용
WHERE 절에서 조건을 만족하는 첫번째 행만 조회하기 위해서는
LIMIT
LIKE 연산자 사용할 때, 와일드카드로 단일 문자를 대체하는 것
_
서브쿼리
동일한 테이블에 대한 SELECT문과 DELETE 명령어는 동시에 수행될 수 없다.
데이터의 일관성을 지킬 수 없으니, 제약 조건에 위배됨
두 개 이상의 조건을 모두 만족하는 데이터 조회 시 사용되는 논리 연산자
AND
→ SELECT user.userId, SUM(age) 나이합계
FROM user u JOIN order o ON u.id = o.customerId
WHERE 나이합계 > 10
GROUP BY u.userId
문자열을 결합하는 함수는…?
CONCAT
서브쿼리란..?
서브쿼리는 메인쿼리와 서브쿼리로 구성된다.
서브쿼리는 괄호로 묶어서 사용한다.
서브쿼리의 안에서는 ORDER BY 사용 불가능하다.
SELECT 절에서 사용되는 서브쿼리는 서브쿼리가 먼저 수행된 후에, 그 결과가 메인쿼리에서 이용된다.
서브쿼리 결과가 다중 행인 경우에는 ANY, ALL, IN, 비교 연산자 사용이 가능하다.
다중 행인 경우 다중행 연산자(ANY, ALL, IN) 사용이 가능하다.
JOIN 연산
INNER JOIN
두 테이블의 모든 행 교차? ⇒ x
한 테이블의 데이터가 있어도 결과가 안 나온다.
조인 조건에 만족하는 행만 반환한다.
FULL JOIN
CROSS JOIN
OUTER JOIN
제약조건
Primary Key (기본키) 열에 대해서는 자동으로 인덱스가 생성된다.
NULL이 아닌 정보를 조회하려면…?
IS NOT NULL
실행 순서
FROM → WHERE → SELECT → ORDER BY
HAVING 절 언제 사용?
GROUP BY 결과의 “조건”을 적용하기 위해서!
테이블의 구조와 속성을 조회하는 명령어
desc
TABLE
SELECT AVG(IFNULL(score, 0)) AS 평균 FROM score;
CASE 문
CASE 문은 여러 개의 WHEN 절을 가질 수 있다.
데이터베이스의 트랜잭션이 안전하게 수행되는 것을 보장하기 위한 4가지 성질
ACID
A(Atomicity) - 원자성
트랜잭션은 모두 실행되거나 실행되지 않음(두 가지 상태)
C (Consistency) - 일관성
트랜잭션 전후에 데이터는 일관되어야 한다.
I (Isolation) - 격리성
트랜잭션은 독립적이라 하나의 트랜잭션 실행 중 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
D (Durability) - 영속성
결과가 시스템이 정상인 경우에만 저장되고, 비정상일 경우 롤백하는 것을 말한다.
데이터베이스 모델링 설계 3단계
개념적 설계
논리적 설계
물리적 설계
정규화
“이상현상" 이 있는 릴레이션(테이블) 분리하여 이상현상을 제거하는 작업
제1정규화 : 테이블 컬럼의 값들이 “원자값” (하나의 값만 갖도록)
제2정규화 : 제1정규화 만족 + 완전 함수 종속을 만족하도록 테이블을 분리
제3정규화 : 제2정규화 + 모든 결정자가 후보키 집합에 속해 있도록 테이블을 분리