PostgreSQL - 문법
안녕하세요, 미래의 데이터베이스 마법사 여러분! 오늘 우리는 PostgreSQL 문법의 마법의 세상으로 뛰어들어 보겠습니다. 프로그래밍에 새로운 사람이라면 걱정하지 마세요 - 이 모험을 안내해 드릴 친절한 안내자가 여러분입니다. 그러면 가상의魔杖(키보드)를 손에 들고 시작해 보겠습니다!
SQL 문장
PostgreSQL에 대해 구체적으로 이야기하기 전에 SQL 문장에 대해 이야기해 보겠습니다. SQL, 즉 구조화된 질의어는 데이터베이스의 마법서와 같습니다. 이는 우리가 데이터베이스와 소통하고 우리의 명령을 수행하게 만드는 언어입니다.
기본 구조
SQL 문장은 일반적으로 다음과 같은 구조를 따릅니다:
COMMAND action_to_perform
[ON object]
[WHERE conditions];
이를 간단히 설명하자면:
-
COMMAND
: 당신이 원하는 작업(예: SELECT, INSERT, UPDATE 등) -
action_to_perform
: 명령어를 통해 수행할 작업 -
ON object
: 선택 사항으로, 당신이 작업하고 있는 데이터베이스 오브젝트를 지정 -
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;
이 쿼리는 다음을 수행합니다:
- 마법사의 이름과 house, 그리고 그들의 과목을 선택
- wizards 테이블과 subjects 테이블을 결합
- Ravenclaw 학생들만 필터링
- 마법사의 이름으로 결과 정렬
데이터 제어어 (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