SQL 기본
기본 구조 : 데이터 베이스 - 테이블 -필드 - 레코드
DDL : 테이블 생성, 수정, 삭생
- CREATE(생성), ALTER(구조), DROP(데이터베이스 내에서 삭제)
DML : 데이터 삽입, 조회, 업데이트, 삭제
- INSERT(삽입), SELECT(조회), UPDATE(수정), DELETE(테이블 내에서 삭제)
DCL_TCL :
- DCL : GRANT(특정 권한 부여), REVOKE(권한 제거)
- TCL : COMMIT(트랜잭션의 변경 사항 확정), ROLLBACK(변경 사항 취소)
기본 쿼리 (SELECT, FROM, WHERE)
- SELECT : 데이터 조회
- FROM : 조회할 테이블 지정
- WHERE : 특정 조건에 맞는 데이터 조회
필터링 쿼리 (ORDER BY, GROUP BY, HAVING)
- ORDER BY : 특정 순서로 정렬
- GROUP BY : 특정 열의 값에 따라 데이터를 그룹화
- HAVING : 그룹화된 결과에 조건을 적용
SQL 기초 함수 및 연산자
문자열 함수 : 텍스트 데이터를 처리하는데 사용
- CONCAT : 문자열 결합
- SUBSTRING : 문자열의 일부를 추출
- TRIM : 문자열의 앞뒤 공백을 제거
- LOWER : 문자열을 소문자로 변환
- UPPER : 문자열을 대문자로 변환
수치 함수 : 숫자 데이터 처리하는데 사용
- ROUND : 숫자를 반올림
- ABS : 절댓값 변환
- SUM : 합계
- AVG : 평균값
- COUNT : 행의 수
연산자
- 논리연산자 : AND, OR, NOT 조건을 결합하거나 부정
- 비교연산자 : =, <, > 값들을 비교
- BETWEEN : 사이
- LIKE : %에 따라 앞, 뒤, 가운데를 포함한 값 조회
- IN : 해당 내용에 속한 값 조회
중급 SQL
SQL JOIN : 두 개 이상의 테이블을 연결하여 데이터 검색
- INNER JOIN : 두 테이블에서 일치하는 행만 반환
ON 절을 사용하여 두 테이블 간의 연결 조건 지정
- LEFT OUTER JOIN :왼쪽 테이블의 모든 행과 오른 쪽 테이블에 일치하는 행 을 반환
왼쪽 테이블 기준 / 일치하지 않는 경우 NULL 처리
- RIGHT OUTER JOIN : 오른쪽 테이블 기준
LEFT와 같음
- FULL OUTER JOIN : 두 테이블의 모든 행을 반환
전체 데이터 결합 / 일치하지 않는 행 NULL 처리
- CROSS JOIN : 두 테이블 간 가능한 모든 조합을 생성
모든 조합 생성 / 크로스 프로덕트 : 두 테이블의 행 수를 곱한 만큼 조합을 포함
SQL 복잡한 쿼리
SUBQUERY : SQL 쿼리 내에 포함된 다른 쿼리
데이터 필터링, 복잡한 집계, 데이터 변환 등을 수행
- 메인 쿼리 안에 포함되어 있는 또 다른 쿼리
- 단일 행 반환 서브쿼리/ 다중 행 반환 서브쿼리
- SELECT, FROM, WHERE 절 등에서 사용
- 데이터 필터링, 복잡한 집계, 데이터 조인 등에 활용
Conditional Logic : 특정 조건에 따라 다른 결과를 출력, 데이터 처리
- CASE 구문은 조건부 로직을 구현하는 데 사용
- 데이터 분류, 새로운 계산된 컬럼 생성, 데이터 변환
Set Operations : 집합연산, 여러 쿼리 결과를 결합
- UNION : 두 개 이상의 쿼리를 결합, 중복 제거한 단일 결과 집합 생성
- INTERSECT : 두 쿼리 결과 중 공통 요소만 선택해 새로운 결과 집합 생성
- EXCEPT : 첫 번째 쿼리 결과에서 두 번째 쿼리 결과를 제외한 요소들로 구성된 결과 집합 생성
SQL 윈도우 함수 : 데이터를 특정 범위(윈도우) 내에서 그룹화하고 각 그룹에 대한 계산을 수행하는 SQL의 고급 기능
- OVER
윈도우 함수가 작동하는 행의 집합 또는 윈도우를 정의
ex. AVG(eee) OVER(ORDER BY aaa, ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
- ORDER BY aaa : aaa 기준으로 정렬
- 로우에서 앞으로 1 뒤로 1 사이의 ROWS
- PARTITION BY
데이터를 특정 칼럼의 값에 따라 여러 파티션으로 나눔
ex. SUM(eee) OVER(PARTITON BY ddd)
ddd별로 합산된 eee
- ROW_NUMBER, RANK, DENSE_RANK
- ROW_NUMBER() : 각 파티션 내에 고유한 순서를 할당
- RANK () : 동일한 값을 가진 항목에 동일 순위를 부여, 다음 순위 건너뜀
- DENSE_RANK () : 동일한 값을 가진 항목에 동일 순위 부여, 순위 건너뛰지 X
- LEAD, LAC
- LEAD () : 현재 행으로부터 지정된 수만큼 이후의 행을 참조
- LAG () : 현재 행으로부터 지정된 수만큼 이전 행을 참조
SQL 데이터 관리
트랜잭션 관리 : 데이터베이스에서 데이터의 일관성과 정확성을 유지하는 중요한 역할
- BEGIN TRANSACTION : 트랜잭션 시작 알림
- COMMIT : 트랜잭션 내의 모든 변경 사항을 데이터베이스에 영구적으로 적용
- ROLLBACK : 모든 변경사항 취소, 트랜잭션 시작 전의 상태로 되돌림
- TRANSACTION ISOLATION LEVEL : 다른 트랜잭션과의 격리 수준 설정
VIEWS
데이터베이스에서 하나 이상의 테이블로부터 파생된 가상 테이블
데이터 효율적 관리, 복잡한 쿼리 단순화 / 코드 테스트
- 가상테이블 : 실제 데이터를 저장하지 않는 가상 테이블
- 재사용 가능 : 뷰를 통해 정의한 쿼리는 여러번 재사용할 수 있음
- 보안 : 특정 데이터만을 사용자에게 노출시킬 수 있음
- 단순화 : 복잡한 쿼리를 뷰로 정의하여 간단하게 만들 수 있음
INDEXING
데이터베이스에서 데이터의 검색 속도 향상시키는 중요한 기능
- 데이터 접근 속도 향상 : 특정 조건에 맞는 데이터 빠르게 검색
- 검색 및 정렬 최적화 : 특정 컬럼에 대한 정렬 연산이 효율적으로 수행
- 성능상의 비용 : 인덱스는 저장공간을 차지, 데이터 삽입이나 수정 시 추가 연산 필요
SQL 최적화
성능 분석 및 튜닝 : SQL 쿼리 효율성 증가, 실행 시간 단축, 리소스 사용 최적화
- 쿼리 최적화 : 쿼리의 성능을 개선하여 더 빠른 응답 시간과 효율적인 리소스 사용을 달성
- 인덱스 사용 : 적절한 인덱스 사용하여 데이터 검색 속도를 향상
- 성능 분석 도구 : Explain 등의 도구 사용하여 쿼리 실행 계획 분석, 평가
SQL 공부
쿼리 작성 요령
- 명확하고 간결한 쿼리 : 불필요한 데이터 검색, 목적에 맞는 데이터만 선택
- 적절한 명ㅁ여 규칙 사용 : 테이블과 컬럼에 명확한 이름 사용하여 쿼리의 이해 도움
- 주석 사용 : 쿼리의 목적과 구조를 설명하여 다른 사용자의 이해와 수정 용이하게 함
- 복잡한 쿼리의 단계적 구성 : 큰 쿼리를 여러 단계로 나누어 작성하여 복잡성 줄이고 가독성 높임