PostgreSQL - 문법

안녕하세요, 미래의 데이터베이스 마법사 여러분! 오늘 우리는 PostgreSQL 문법의 마법의 세상으로 뛰어들어 보겠습니다. 프로그래밍에 새로운 사람이라면 걱정하지 마세요 - 이 모험을 안내해 드릴 친절한 안내자가 여러분입니다. 그러면 가상의魔杖(키보드)를 손에 들고 시작해 보겠습니다!

PostgreSQL - Syntax

SQL 문장

PostgreSQL에 대해 구체적으로 이야기하기 전에 SQL 문장에 대해 이야기해 보겠습니다. SQL, 즉 구조화된 질의어는 데이터베이스의 마법서와 같습니다. 이는 우리가 데이터베이스와 소통하고 우리의 명령을 수행하게 만드는 언어입니다.

기본 구조

SQL 문장은 일반적으로 다음과 같은 구조를 따릅니다:

COMMAND action_to_perform
[ON object]
[WHERE conditions];

이를 간단히 설명하자면:

  1. COMMAND: 당신이 원하는 작업(예: SELECT, INSERT, UPDATE 등)
  2. action_to_perform: 명령어를 통해 수행할 작업
  3. ON object: 선택 사항으로, 당신이 작업하고 있는 데이터베이스 오브젝트를 지정
  4. WHERE conditions: 선택 사항으로, 특정 조건을 설정하여 필터링

예시

간단한 예시를 보겠습니다:

SELECT first_name, last_name
FROM employees
WHERE department = 'IT';

이 마법... 즉, 문장에서:

  • SELECT는 우리의 명령어
  • first_name, last_name는 우리가 가져오고자 하는 것
  • FROM employees는 우리가 데이터를 가져올 테이블을 지정
  • WHERE department = 'IT'는 우리의 조건으로, IT 부서 직원을 필터링

PostgreSQL SQL 명령어

이제 기본 사항을 다루었으므로 PostgreSQL의 특정 명령어를 살펴보겠습니다. 이를 SQL 마법서의 다양한 마법으로 생각해 보세요!

데이터 정의어 (DDL) 명령어

이 명령어는 데이터베이스 오브젝트의 구조를 정의하고 수정하는 데 사용됩니다.

명령어 설명 예시
CREATE 새로운 데이터베이스 오브젝트 생성 CREATE TABLE students (id INT, name VARCHAR(50));
ALTER 기존 데이터베이스 오브젝트 수정 ALTER TABLE students ADD COLUMN age INT;
DROP 데이터베이스 오브젝트 삭제 DROP TABLE students;
TRUNCATE 테이블의 모든 데이터 제거 TRUNCATE TABLE students;

CREATE 명령어의 더 상세한 예시를 보겠습니다:

CREATE TABLE wizards (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
house VARCHAR(50),
wand_type VARCHAR(50),
enrollment_date DATE
);

이는 'wizards'라는 테이블을 생성하고 id, name, house, wand type, 등록 날짜라는 열을 포함합니다. SERIAL 유형의 id는 새로운 항목이 추가될 때 자동으로 증가합니다.

데이터 조작어 (DML) 명령어

이 명령어는 테이블 내의 데이터를 처리하는 데 사용됩니다.

명령어 설명 예시
SELECT 하나 이상의 테이블에서 데이터 검색 SELECT * FROM wizards;
INSERT 테이블에 새로운 데이터 추가 INSERT INTO wizards (name, house) VALUES ('Harry Potter', 'Gryffindor');
UPDATE 테이블의 기존 데이터 수정 UPDATE wizards SET house = 'Slytherin' WHERE name = 'Draco Malfoy';
DELETE 테이블에서 데이터 제거 DELETE FROM wizards WHERE name = 'Voldemort';

SELECT 문장의 더 복잡한 예시를 보겠습니다:

SELECT w.name, w.house, s.subject
FROM wizards w
JOIN subjects s ON w.id = s.wizard_id
WHERE w.house = 'Ravenclaw'
ORDER BY w.name;

이 쿼리는 다음을 수행합니다:

  1. 마법사의 이름과 house, 그리고 그들의 과목을 선택
  2. wizards 테이블과 subjects 테이블을 결합
  3. Ravenclaw 학생들만 필터링
  4. 마법사의 이름으로 결과 정렬

데이터 제어어 (DCL) 명령어

이 명령어는 데이터베이스에 대한 접근 및 권한을 제어하는 데 사용됩니다.

명령어 설명 예시
GRANT 사용자에게 특정 권한 부여 GRANT SELECT ON wizards TO student_user;
REVOKE 사용자로부터 특정 권한 회수 REVOKE INSERT ON wizards FROM student_user;

트랜잭션 제어 명령어

이 명령어는 트랜잭션을 관리하는 데 사용됩니다 - 함께 실행되어야 하는 SQL 문장 그룹.

명령어 설명 예시
BEGIN 트랜잭션 시작 BEGIN;
COMMIT 트랜잭션의 변경 사항 저장 COMMIT;
ROLLBACK 트랜잭션의 변경 사항 취소 ROLLBACK;

이를 실제에서 어떻게 사용할 수 있는지 보겠습니다:

BEGIN;
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
COMMIT;

이 트랜잭션은 계좌 1에서 100단위를 계좌 2로 이체합니다. 이 과정의 어떤 부분이 실패하면 ROLLBACK을 사용하여 모든 변경 사항을 취소할 수 있습니다.

유틸리티 명령어

PostgreSQL은 몇 가지 유용한 유틸리티 명령어도 제공합니다:

명령어 설명 예시
EXPLAIN 문장의 실행 계획 표시 EXPLAIN SELECT * FROM wizards;
VACUUM 가비지 수거하고 선택적으로 데이터베이스 분석 VACUUM wizards;

EXPLAIN 명령어는 특히 유용합니다. 이는 쿼리 계획을 표시하여 쿼리를 최적화하는 데 도움을 줍니다.

EXPLAIN SELECT * FROM wizards WHERE house = 'Hufflepuff';

이는 쿼리 계획을 표시하여 PostgreSQL이 쿼리를 어떻게 처리하는지 이해하는 데 도움을 줍니다.

그리고 여러분, 젊은 SQL 제자 여러분! 우리는 PostgreSQL의 기본 문법과 명령어를 다루었습니다. SQL을 마스터하는 것은 연습이 필요합니다. 두려워하지 말고 다양한 명령어를 실험해 보세요. 언제쯤이면 복잡한 쿼리를 쉽게 호출할 수 있을 것입니다!

다음 번에는 데이터베이스 설계와 고급 질의 기술에 대해 더 깊이 탐구해 보겠습니다. 그리까지, 여러분의 쿼리가 빠르고 결과가 풍부하길 바랍니다!

Credits: Image by storyset