[DB] SQL 개념과 기본 문법 정리

김엄지·2024년 5월 23일
0

Database

목록 보기
3/5

SQL이란?

SQL(Structured Query Language)은 관계형 데이터베이스에서 데이터를 정의, 조회, 수정, 삭제하는 다양한 작업을 수행할 수 있는 표준 언어이다. 여러 가지 명령어로 구성되어 있고, 크게 네 가지 주요 부분으로 나눌 수 있다.

각 RDBMS(MySQL, PostgreSQL, SQLite 등) 간에는 기본적인 SQL 사용에서는 큰 차이가 없지만, 세부적인 구현과 고유한 확장 기능에서는 다소 차이가 있을 수 있다. 후반부에서 살짝 정리해보자.

DDL (Data Definition Language): DB 구조 정의

  • CREATE: 테이블, 인덱스, 데이터베이스 등을 생성
  • ALTER: 기존 데이터베이스 객체를 수정
  • DROP: 데이터베이스 객체를 삭제

DML (Data Manipulation Language): DB 내의 데이터 조작

  • SELECT: 데이터를 조회
  • INSERT: 데이터를 삽입
  • UPDATE: 데이터를 수정
  • DELETE: 데이터를 삭제

DCL (Data Control Language): DB 대한 접근 권한 제어

  • GRANT: 사용자에게 권한 부여
  • REVOKE: 사용자로부터 권한 회수
GRANT SELECT ON employees TO some_user;

TCL (Transaction Control Language): 트랜잭션을 관리

  • COMMIT: 트랜잭션을 영구적으로 저장
  • ROLLBACK: 트랜잭션을 취소

Query(쿼리)

쿼리는 데이터베이스에서 데이터를 검색하거나 조작하기 위해 작성된 SQL 명령이다. 데이터베이스에 대한 특정 작업을 수행하기 위해 사용되고, 대부분의 경우, "쿼리"라는 용어는 데이터를 조회하는 SELECT 명령문을 의미하지만, 다른 DML, DDL, DCL 및 TCL 명령어도 쿼리에 포함될 수 있다고 한다.

1. CREATE: 데이터베이스 객체 생성

새로운 데이터베이스 객체(테이블, 인덱스 등)를 생성할 때 사용한다.

CREATE TABLE burgers (
	id SERIAL PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    price INT,
    gram INT,
    kcal INT,
    protein INT
);

2. INSERT: 데이터 삽입

테이블에 새 데이터를 삽입할 때 사용한다.

기본 구조

INSERT INTO 테이블 (필드이름1, 필드이름2)
VALUES (1,2)

예시 코드

INSERT INTO burgers (name, price, gram, kcal, protein)
VALUES ('Cheese Burger', 5000, 150, 300, 20);

3. SELECT: 데이터 조회

테이블에서 데이터를 조회할 때 사용한다.

기본 구조

SELECT 필드이름 FROM 테이블

여러 필드 조회하는 경우

SELECT 필드이름1, 필드이름2 FROM 테이블

모든 필드 조회하는 경우

SELECT * FROM 테이블

중복된 데이터를 없애고 조회하는 경우

SELECT DISTINCT 필드이름 FROM 테이블

조건식을 적용하는 경우

SELECT * 
FROM 테이블 
WHERE 필드이름 =0

여러 조건식을 적용하는 경우

SELECT * 
FROM 테이블 
WHERE 필드이름1 = 0
AND 필드이름2 = 0

정렬 기준이 여러개인 경우

SELECT 필드이름
FROM 테이블
ORDER BY 필드이름1, 필드이름2 DESC, 필드이름3 ASC

내부조인한 결과를 출력하는 경우

SELECT 테이블1.필드이름
FROM 테이블1, 테이블2
WHERE 테이블1.필드이름 = 테이블2.필드이름

별칭을 이용해 코드 간소화하는 경우(위 코드와 동일)

SELECT A.필드이름
FROM 테이블1 A, 테이블2 B
WHERE A.필드이름 = B.필드이름

...

4. UPDATE: 데이터 수정

테이블의 기존 데이터를 수정할 때 사용된다.

기본 구조

UPDATE 테이블 SET 필드이름1 =1, 필드이름2 =2
WHERE 조건문

예시 코드

UPDATE burgers
SET price = 5500
WHERE name = 'Cheese Burger';

5. DELETE: 데이터 삭제

테이블에서 데이터를 삭제할 때 사용된다.

기본 구조

DELETE FROM 테이블
WHERE 조건문

예시 코드

DELETE FROM burgers
WHERE price > 6000;

6. ALTER: 테이블 구조 수정

기존 테이블의 구조를 변경할 때(컬럼 추가, 삭제, 변경 등) 사용된다.

ALTER TABLE burgers
ADD COLUMN description TEXT;

7. DROP: 데이터베이스 객체 삭제

데이터베이스 객체를 완전히 제거할 때 사용된다.

DROP TABLE burgers;

RDBMS간의 차이점은?

관계형 데이터베이스들은 대부분 SQL을 기반으로 하지만, 각 시스템마다 SQL 구현에 약간의 차이가 있다. 이러한 차이는 주로 확장 기능, 특정 구문 및 함수에서 나타난다.

  • 데이터 타입
  • 함수 및 연산자
  • 제약 조건 및 인덱스
  • 조인 및 하위 쿼리
  • 특수 기능 및 확장 기능

1. 데이터 타입

예시: 날짜와 시간 데이터 타입

  • MySQL: DATETIME, TIMESTAMP
  • PostgreSQL: TIMESTAMP, TIMESTAMPTZ (time zone 포함)
  • SQL Server: DATETIME, SMALLDATETIME, DATETIME2

각 시스템마다 지원하는 데이터 타입이 다를 수 있으며, 일부 데이터 타입은 특정 시스템에서만 지원됩니다.

2. 함수 및 연산자

예시: 문자열 함수

  • MySQL: CONCAT(), SUBSTRING()
  • PostgreSQL: CONCAT(), SUBSTRING(), || (문자열 결합 연산자)
  • SQL Server: CONCAT(), SUBSTRING(), + (문자열 결합 연산자)

함수 이름과 사용 방법이 다를 수 있습니다. 예를 들어, 문자열을 결합할 때 사용하는 연산자가 시스템마다 다를 수 있습니다.

3. 제약 조건 및 인덱스

예시: 자동 증가(primary key)

  • MySQL: AUTO_INCREMENT
  • PostgreSQL: SERIAL, BIGSERIAL
  • SQL Server: IDENTITY

기본 키의 자동 증가 설정 방식이 시스템마다 다릅니다.

4. 조인 및 하위 쿼리

예시: LIMIT와 OFFSET

  • MySQL: LIMIT, OFFSET
  • PostgreSQL: LIMIT, OFFSET
  • SQL Server: TOP, OFFSET-FETCH

결과의 제한과 오프셋을 설정하는 방법도 다를 수 있습니다.

5. 특수 기능 및 확장 기능

예시: JSON 데이터 타입 및 함수

  • MySQL: JSON 데이터 타입, JSON_EXTRACT()
  • PostgreSQL: JSON 데이터 타입, JSONB, ->, ->> 연산자
  • SQL Server: JSON 데이터 타입 없음, JSON_VALUE()

특정 기능(예: JSON 데이터 처리)은 시스템마다 지원하는 방법과 범위가 다를 수 있습니다.

마무리

SQL 기본 문법에 대해서 공부해보았다. 개념 정리만 해서, 다음엔 쿼리문 사용한 예시 코드까지 정리해봐야겠다.
MySQL과 PostgreSQL에 대해 공부해보았으니, SQL Server와 더불어 간단하게 차이점에 대해서 정리해보았다. 나중에 게시판 하나 만들어서 쿼리 작성에 대해 더 실습해봐야겠다. 😊🔥


참고자료

profile
나만의 무언가를 가진 프로그래머가 되자

0개의 댓글