자주 사용하는 SQL 기본 문법 총정리
SQL에 대해서 많이들 들어보셨을 것이라 생각합니다.
관계형 데이터베이스를 사용하면 빠질 수 없는 것이 바로 SQL에 대한 공부인데요.
이번 포스팅에서는 SQL의 기본 개념과 자주 사용하는 구문들에 대해서 알아보겠습니다.
절차적 vs 비절차적 언어
SQL에 대해 알아보기 전에 먼저 절차적 vs 비절차적 언어의 개념에 대해서 학습해야 합니다.
절차적 언어는 원하는 결과 Data를 얻기 위해서 어떤 연산을 수행해야 할지에 대한
처리 방법 및 절차를 작성해야 합니다.
비절차적 언어는 어떤 Data를 원하는지만 작성하면 됩니다.
다시 말하면, 비절차적 언어는 ‘무엇을 해야 하는지’ 를 정의하고 ‘어떻게’ 수행할지를 명시하지 않는 언어입니다.
반면, 절차적 언어는 ‘어떻게’ 해야 하는지까지 명시합니다.
잘 생각해보면 우리는 ‘원하는 Data가 이것이다’ 까지만 명시하고
SQL Query의 실제 실행과 최적화는 데이터베이스 엔진이 알아서 처리합니다.
바로 이 점이 SQL의 비절차적 특징이라고 말할 수 있으며,
C언어와 같은 프로그래밍 언어와 차이점을 보인다고 할 수 있습니다.
SQL
그렇다면 SQL은 과연 무엇일까요?
SQL은 Structured Query Language를 줄인 말로,
관계형 데이터베이스에 정보를 저장하고 처리하기 위한 언어를 말합니다.
NoSQL에서도 SQL과 유사한 Query 언어나 SQL을 기반으로 한 시스템을 제공하는 경우가 있기는 하지만,
주로 관계형 데이터베이스에서 사용되므로 RDB를 기준으로 설명해보겠습니다.
SQL의 실행 과정
우리가 작성한 SQL은 어떤 과정을 통해서 실행될까요?
크게 다음과 같이 나눠볼 수 있습니다.
- Parsing and Translation
- Syntax 체크 : ‘문법적 오류’ 가 없는지를 확인
- ex. 사용할 수 없는 Keyword를 사용했는가?
- Semantic 체크 : ‘의미상 오류’ 가 없는지를 확인
- ex1. Table에 존재하지 않는 Column을 사용했는가?
- ex2. 사용하려는 오브젝트에 대한 권한이 없는가?
- 이 과정에서 Parse Tree가 생성됩니다.
- 문장을 Tree 구조로 분석한 것을 Parse Tree라 합니다.
- Syntax 체크 : ‘문법적 오류’ 가 없는지를 확인
- Optimization
- 주어진 Query를 처리할 수 있는 수많은 실행 계획 중에서 가장 효율적인 것을 선택하는 과정
- Evaluation
- 실행해서 결과를 가져오는 과정
DML, DDL, DCL, TCL
목적과 기능에 따라서 크게 4가지로 나눠볼 수 있습니다.
- DML
- Data Manipulation Language
- 데이터베이스에 있는 Data를 검색하거나 어떠한 조작을 가하기 위해 사용
select / insert, update, delete
- DDL
- Data Definition Language
- Table과 같은 Data의 구조를 정의하기 위해 사용
- ‘Table 자체’ 와 관련된 기능들이라 생각!
create, alter, drop, rename
- DCL
- Data Control Language
- DB 접근을 제어하거나, 특정 작업에 대한 권한을 주고 회수할 때 사용
grant, revoke
- TCL
- Transaction Control Language
- Transaction을 제어하기 위해 사용
commit, rollback
참조 무결성과 Cascade
데이터베이스에 저장된 Data들의 정확성, 일관성, 유효성 등을 보장하기 위해 무언가 변경이 일어날 때 이를 제약하기 위한 조건이 바로 무결성 제약 조건이었죠.
그 중 하나가 바로 참조 무결성 이었습니다.
참조 무결성 : foreign key 값은 null이거나 참조하는 테이블의 primary key 값과 동일해야 합니다
- Primary key와 Foreign Key 사이의 관계가 항상 유지되도록 보장합니다.
조금 더 쉽게 말하자면,
하나의 속성이 다른 Table의 속성을 참조하고 있으면 참조한 해당 속성값이 필히 존재해야 한다는 것입니다.
즉, '다른 Table에서 이거 참조하고 있으니까 함부로 변경하거나 삭제할 수 없어' 라는 의미가 되겠죠.
그러면 바꿀 방법이 아예 없는 것일까요? 당연히 이때를 위한 기능이 있겠죠!
바로, Cascade를 사용하는 것입니다.
Cascade
Cascade를 사용하면 해당 값을 참조하고 있는 Record 또한 종속적으로 수정 및 삭제를 가능하게 해줍니다.
- on update cascade
- 어떤 Table의 특정 Record가 변경될 때, 해당 Record를 외래 키로 참조하는 다른 모든 Table의 관련 Record들도 함께 업데이트
- on delete cascade
- 어떤 Table의 특정 Record가 삭제될 때, 해당 Record를 외래 키로 참조하는 다른 모든 Table의 관련 Record들도 함께 삭제
SQL 처리 순서
Query 내에 다양한 Keyword가 들어갈 수 있는데, 기본적인 처리 순서는 다음과 같습니다.
-
from, on, join where group by having select distinct order by limit
- from : Query의 대상이 되는 Table 확인
- on : Join 조건 확인
- join : Table Join
- where : Data 추출 조건 확인
- group by : 특정 Column에 대해 그룹화
- having : 그룹화 이후 Data 추출 조건
- select : 조회할 Column 선택
- distinct : 중복 제거
- order by : 순서 정렬
- limit : 결과 제한
이것으로 이번 SQL의 기초에 대한 포스팅을 마치겠습니다.