SlideShare a Scribd company logo
PostgreSQL로 배우는 SQL
기초
PgDAY 2018 Seoul
PostgreSQL 설치
PostgreSQL은 다음과같은 운영체제용으로배포되고있습니다.
- Windows
- Linux (RPM Based, DEB Based, Source Compile)
- Mac OSX
SQL의 종류
DDL (Data Definition Language)
DML(Data Manipulation Language)
그리고DCL(Data Control Language)
DDL
테이블과같은 데이터구조를정의하는데사용하는명령어와그들의실행 구조
주요 SQL 명령
CREATE, ALTER, DROP, RENAME, TRUNCATE
DML
데이터베이스에들어있는데이터를조회하고조작하는명령
주요 명령어
SELECT, INSERT, UPDATE, DELETE
DCL
데이터베이스에접근하고객체들을사용하도록권한을주고 회수하는명령어
주요 명령어
GRANT
REVOKE
TCL
논리적인작업의단위를묶어서DML에 의해 조작된결과를작업 단위(트랜잭션) 별로 제어하는명령어
주요 명령어
COMMIT
ROLLBACK
SAVEPOINT
SQL 표준
각 데이터베이스별로조금씩다른 SQL 문장을일원화하기위해 표준화가일부 이루어져있음
SQL-92가 ISO 9075로 메이저개정되어있고 SQL:2011 까지 이루어져있고 대부분의데이터베이스가
SQL-92를 호환한다고볼 수 있음
DDL Create Table
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ]
table_name ( [
{ column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
| table_constraint
| LIKE source_table [ like_option ... ] }
[, ... ]
] )
[ INHERITS ( parent_table [, ... ] ) ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]
전국 공원 정보 CREATE
create table korea_park(
no INT GENERATED ALWAYS AS IDENTITY,
manage_no varchar(20),
park_name varchar(100),
park_type varchar(50),
park_addr_road varchar(200),
park_lat double,
park_long double,
park_area double,
insert_date timestamp
)
CREATE INDEX
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name [ USING
method ]
( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS {
FIRST | LAST } ] [, ...] )
[ WITH ( storage_parameter = value [, ... ] ) ]
[ TABLESPACE tablespace_name ]
[ WHERE predicate ]
CREATE INDEX
create unique index park_name_unique on
korea_park;
create index idx_lat_long on korea_park
(park_lat, park_long);
제약 조건 추가
ALTER TABLE korea_park add CONSTRAINT korea_park_primary_constraint
check(char_length(park_name) > 0);
제약조건 - 주 키
ALTER TABLE korea_park add primary key(manage_no);
제약조건 - 외부키
ALTER TABLE distributors ADD CONSTRAINT diskless FOREIGN
KEY (address) REFERENCES addresses (address);
테이블 컬럼 특징
데이터 타입
NULL
NOT NULL
DEFAULT
번호 자동 증가(SQL 표준)
INT GENERATED ALWAYS AS IDENTITY
CREATE TABLE color (
color_id INT GENERATED BY DEFAULT AS IDENTITY
(START WITH 10 INCREMENT BY 10),
color_name VARCHAR NOT NULL
);
데이터 입력
1) insert
- into, select
2) select into
3) copy
4) create table as
insert into
INSERT INTO table_name [ AS alias ] [ ( column_name [, ...] ) ]
{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [,
...] | query }
[ ON CONFLICT [ conflict_target ] conflict_action ]
[ RETURNING * | output_expression [ [ AS ] output_name ] [, ...]
]
insert into
insert into korea_park (manage_no, park_name, park_type,
park_addr_road, park_lat, park_long, park_area) values (
'201811-221930', 'PG마당', '수변공원', 'PG시 PG구 PG동 1번지',
51.516510, 9.919632, now())
insert select
insert into korea_park2 select * from
korea_park where park_type='수변공원'
select into
select * from into korea_park3 from korea_park
where park_type = '수변공원'
copy
COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | PROGRAM 'command' | STDIN }
[ [ WITH ] ( option [, ...] ) ]
COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }
TO { 'filename' | PROGRAM 'command' | STDOUT }
[ [ WITH ] ( option [, ...] ) ]
url: https://www.postgresql.org/docs/9.6/static/sql-copy.html
copy 실전
copy korea_park (manage_no, park_name, park_type,
park_addr_road, park_lat, park_long, park_area) from
'test2.csv' with format csv DELIMITER ','
create table as
create table korea_park4 as select * from korea_park
데이터 조회
[ WITH [ RECURSIVE ] with_query [, ...] ]
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
* | expression [ [ AS ] output_name ] [, ...]
INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY expression [, ...] ]
[ HAVING condition [, ...] ]
[ WINDOW window_name AS ( window_definition ) [, ...] ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
[ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]
데이터 조회 실전
select * from korea_park where park_type = '어린이공원'
select count(*) from korea_park where park_type = '근린공원'
select part_type, count(park_type) from korea_park group by
park_type
데이터 조회 실전
select * from korea_park limit 10 offset 0;
select * from korea_park order by park_type asc
window 함수
row_number, rank 등과 같은 함수가 window 함수에 속합니다.
추가적인 함수는
https://www.postgresql.org/docs/9.6/static/functions-window.
html 에서 살펴볼 수 있습니다.
JOIN
SQL의 조인은 기본적으로 테이블과 테이블의 행을 서로 묶는데 사용합니다. 조인의
가장 기본적인 형태는 카테시안 조인으로 조인 조건을 지정하지 않는 조인을
일컫습니다.
no name created
1 jiho 201
2 postgres 202
no article_no content
3 1 c01
4 1 c02
1 jiho 201 3 1 c01
1 jiho 201 3 1 c02
2 postgres 202 3 1 c01
2 postgres 202 3 1 c02
LEFT JOIN
테이블 조인시 왼쪽 테이블의 행이 우선시
되는 조인
RIGHT JOIN
테이블 조인시 오른쪽 테이블의 행이 우선시
되는 조인
ANSI JOIN(INNER JOIN)
테이블 조인시 테이블간의
조인 조건이 서로
일치하는 것만 뽑는 조인
EXPLAIN
쿼리가 데이터베이스에서
실행될때 실행 비용 등을
알아보기 위해 사용합니다.
보통 쿼리 최적화를 위해
사용합니다.
EXPLAIN SELECT * FROM korea_park
WHERE park_type = '근린공원';
ALTER TABLE
ALTER TABLE은 테이블의 정의에 변경사항을 가하기 위해
사용하는 DDL 문입니다.
주요 기능은 아래와 같습니다.
테이블 제약사항 추가/수정/삭제
테이블 컬럼의 추가/이름 변경/데이터 타입 변경/컬럼 제거
테이블 이름 변경
alter table korea_park rename to
south_korea_park;
테이블 컬럼 추가
alter table korea_park add column park_city
varchar(20);
테이블 컬럼 이름 변경
alter table korea_park rename park_city to
city_park;
alter table south_korea_park rename to
korea_park;
테이블 컬럼 타입 변경
alter table korea_park alter column city_park
type integer;
테이블 컬럼 제거
alter table korea_park drop column city_park;
insert 충돌을 해결하기
테이블에 데이터 입력시 이미 있는 레코드를 추가하면 레코드
충돌로 데이터가 입력되지 않습니다. conflict 옵션을 사용하면
데이터 충돌시 해결책을 제시할 수 있습니다.
insert into korea_park(manage_no, park_name, park_type)
values ('29170-00001', '문화근린공원', '근린공원')
insert 충돌시 아무것도 안하기
insert into korea_park(manage_no, park_name,
park_type) values ('29170-00001', '문화근린공원',
'근린공원') on conflict (manage_no) do nothing;
데이터 충돌시 데이터 덮어쓰기
insert into korea_park(manage_no, park_name,
park_type) values ('29170-00001', '문화근린공원',
'어린이공원') on conflict (manage_no) do update
set park_type=excluded.park_type;
데이터 변경
update korea_park set park_name = 'MBC
어린이공원' where manage_no = '29170-00001'
update시 다른 테이블과 조인
UPDATE employees SET sales_count =
sales_count + 1 FROM accounts
WHERE accounts.name = 'Acme Corporation'
AND employees.id = accounts.sales_person;
데이터 삭제
delete from korea_park where
manage_no='29170-00001';
데이터 삭제 시 다른 테이블과 조인하기
DELETE FROM films USING producers
WHERE producer_id = producers.id AND
producers.name = 'foo';
역할 생성과 제거
create role reader1 login password 'reader1';
create role reader2 login password 'reader2';
권한 부여
grant select (park_name, park_addr_road) on
korea_park to reader1;
grant select (park_name, park_lat, park_long)
on korea_park to reader2;
권한 제거
revoke select (park_name, park_addr_road) on
korea_park from reader1;
revoke select (park_name, park_lat, park_long)
on korea_park from reader2;
truncate
truncate는 테이블의 모든 행을 한 번에 지우는 명령입니다.
TRUNCATE korea_park;
truncate korea_park RESTART IDENTITY;
트랜잭션
데이터베이스 조작의 일관성을 보장하기 위한 행동 묶음을
트랜잭션이라고 부릅니다
begin transaction;
commit;
rollback;
end;
트랜잭션
트랜잭션이 시작된 이후 에러가 발생하면 에러가 발생한 이후의
SQL 문장은 유효한 SQL 문장이라고 해도 실행되지 않습니다.
PostgreSQL 데이터 타입
bigint, boolean
character, character varying
date, integer
json, numeric
text
timestamp
vacuum
1) 변경 또는 삭제된 자료들이 차지 하고 있는 디스크 공간을 다시 사용하기 위한 디스크
공간 확보 작업이 필요하다.
2) PostgreSQL 쿼리 실행 계획기가 사용할 자료 통계 정보를 갱신할 필요가 있다.
3) 인덱스 전용 검색 성능을 향상하는데 이용하는 실자료 지도(visibility map, vm) 정보를
갱신하는 작업이 필요하다.
4) 트랜잭션 ID 겹침이나, 다중 트랙잭션 ID 겹침 상황으로 오래된 자료가 손실 될
가능성을 방지해야할 필요가 있다.
베이큠 작업의 실행
-- DB 전체 풀 실행
vacuum full analyze;
-- DB 전체 간단하게 실행
vacuum verbose analyze;
-- 해당 테이블만 간단하게 실행
vacuum analyse [테이블 명];
-- 특정 테이블만 풀 실행
vacuum full [테이블명];
PostgreSQL Management Tool
● PgAdmin 4
● Datagrip
● DBeaver
● RazorSQL
● Aqua Data Studio
● SQLDeveloper
DDL Drop Table
DROP TABLE korea_park;
끝!
지금까지들어주셔서감사합니다.

More Related Content

PPT
09 Managing Dependencies
PDF
MERGE SQL Statement: Lesser Known Facets
PDF
Porting a Streaming Pipeline from Scala to Rust
PPTX
PLSQL Tutorial
PPT
Subqueries -Oracle DataBase
PPTX
Turnbasedgame
PPT
Google mock for dummies
PDF
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
09 Managing Dependencies
MERGE SQL Statement: Lesser Known Facets
Porting a Streaming Pipeline from Scala to Rust
PLSQL Tutorial
Subqueries -Oracle DataBase
Turnbasedgame
Google mock for dummies
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL

What's hot (9)

PPTX
SCCM を用いた OS 展開
PDF
MySQLと正規形のはなし
PDF
Redux Sagas - React Alicante
PPTX
NDC 11 자이언트 서버의 비밀
PDF
PDF
DPDK Acceleration with Arkville
PPT
Build Your Own CMS with Apache Sling
PDF
MySQLのバックアップ運用について色々
PPTX
An Intro into webpack
SCCM を用いた OS 展開
MySQLと正規形のはなし
Redux Sagas - React Alicante
NDC 11 자이언트 서버의 비밀
DPDK Acceleration with Arkville
Build Your Own CMS with Apache Sling
MySQLのバックアップ運用について色々
An Intro into webpack
Ad

Similar to PostgreSQL로 배우는 SQL 기초 (20)

PDF
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
PPT
7.데이터수정
PPTX
Db활용가이드
PPTX
181215 MS SQL로 알아보는 데이터베이스
PPTX
파이썬 sqlite 이해하기
PDF
제8장 테이블 생성 수정 제거하기
PDF
[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정
PDF
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 2
PDF
데이터베이스 시스템 chapter4_STG박하은
PDF
PostGIS 시작하기
PDF
#23.SQL초보에서 Schema Objects까지_SQL기초교육/오라클교육/국비지원환급교육/재직자교육/구로IT학원추천
PDF
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
PPT
6.테이블만들기
PDF
제9장 데이터 조작과 트랜잭션
PDF
데이터베이스 설계 및 구현 2014-2018년 기말시험 기출문제
PDF
제2장 데이터 조회하기
PPTX
효율적인Sql작성방법 4주차
PPTX
101102 endofdb select.1_rdbms
PDF
일주일만에 끝내는 MySQL
PDF
Hive 입문 발표 자료
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
7.데이터수정
Db활용가이드
181215 MS SQL로 알아보는 데이터베이스
파이썬 sqlite 이해하기
제8장 테이블 생성 수정 제거하기
[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 2
데이터베이스 시스템 chapter4_STG박하은
PostGIS 시작하기
#23.SQL초보에서 Schema Objects까지_SQL기초교육/오라클교육/국비지원환급교육/재직자교육/구로IT학원추천
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
6.테이블만들기
제9장 데이터 조작과 트랜잭션
데이터베이스 설계 및 구현 2014-2018년 기말시험 기출문제
제2장 데이터 조회하기
효율적인Sql작성방법 4주차
101102 endofdb select.1_rdbms
일주일만에 끝내는 MySQL
Hive 입문 발표 자료
Ad

More from Jiho Lee (15)

PDF
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
PPTX
게임으로 배우는 코딩 - 마인크래프를 중심으로
PPTX
개발자, 그 이상 그리고 그 이하
PPTX
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
PDF
암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관
PDF
사물 인터넷과 인공지능이 만나는 세계
PPTX
인간이 아이에게 줄 수 있는 가장 최선의 것
PDF
파이콘 2017 그만퇴근합시다_이지호
PDF
소물 2017 네트워크로 감성 나누기
PDF
10월의 하늘_2016_진도 공공도서관_이지호
PDF
생각과 프로그램 개발 - 10월, 소프트웨어에 물들다
PDF
책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...
PPTX
2016 py con2016_lightingtalk_php to python
ODP
Django와 flask
PDF
라이트닝 토크 2015 파이콘
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
게임으로 배우는 코딩 - 마인크래프를 중심으로
개발자, 그 이상 그리고 그 이하
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관
사물 인터넷과 인공지능이 만나는 세계
인간이 아이에게 줄 수 있는 가장 최선의 것
파이콘 2017 그만퇴근합시다_이지호
소물 2017 네트워크로 감성 나누기
10월의 하늘_2016_진도 공공도서관_이지호
생각과 프로그램 개발 - 10월, 소프트웨어에 물들다
책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...
2016 py con2016_lightingtalk_php to python
Django와 flask
라이트닝 토크 2015 파이콘

PostgreSQL로 배우는 SQL 기초

  • 2. PostgreSQL 설치 PostgreSQL은 다음과같은 운영체제용으로배포되고있습니다. - Windows - Linux (RPM Based, DEB Based, Source Compile) - Mac OSX
  • 3. SQL의 종류 DDL (Data Definition Language) DML(Data Manipulation Language) 그리고DCL(Data Control Language)
  • 7. TCL 논리적인작업의단위를묶어서DML에 의해 조작된결과를작업 단위(트랜잭션) 별로 제어하는명령어 주요 명령어 COMMIT ROLLBACK SAVEPOINT
  • 8. SQL 표준 각 데이터베이스별로조금씩다른 SQL 문장을일원화하기위해 표준화가일부 이루어져있음 SQL-92가 ISO 9075로 메이저개정되어있고 SQL:2011 까지 이루어져있고 대부분의데이터베이스가 SQL-92를 호환한다고볼 수 있음
  • 9. DDL Create Table CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name ( [ { column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option ... ] } [, ... ] ] ) [ INHERITS ( parent_table [, ... ] ) ] [ WITH ( storage_parameter [= value] [, ... ] ) | WITH OIDS | WITHOUT OIDS ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ] [ TABLESPACE tablespace_name ]
  • 10. 전국 공원 정보 CREATE create table korea_park( no INT GENERATED ALWAYS AS IDENTITY, manage_no varchar(20), park_name varchar(100), park_type varchar(50), park_addr_road varchar(200), park_lat double, park_long double, park_area double, insert_date timestamp )
  • 11. CREATE INDEX CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name [ USING method ] ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ) [ WITH ( storage_parameter = value [, ... ] ) ] [ TABLESPACE tablespace_name ] [ WHERE predicate ]
  • 12. CREATE INDEX create unique index park_name_unique on korea_park; create index idx_lat_long on korea_park (park_lat, park_long);
  • 13. 제약 조건 추가 ALTER TABLE korea_park add CONSTRAINT korea_park_primary_constraint check(char_length(park_name) > 0);
  • 14. 제약조건 - 주 키 ALTER TABLE korea_park add primary key(manage_no);
  • 15. 제약조건 - 외부키 ALTER TABLE distributors ADD CONSTRAINT diskless FOREIGN KEY (address) REFERENCES addresses (address);
  • 16. 테이블 컬럼 특징 데이터 타입 NULL NOT NULL DEFAULT
  • 17. 번호 자동 증가(SQL 표준) INT GENERATED ALWAYS AS IDENTITY CREATE TABLE color ( color_id INT GENERATED BY DEFAULT AS IDENTITY (START WITH 10 INCREMENT BY 10), color_name VARCHAR NOT NULL );
  • 18. 데이터 입력 1) insert - into, select 2) select into 3) copy 4) create table as
  • 19. insert into INSERT INTO table_name [ AS alias ] [ ( column_name [, ...] ) ] { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query } [ ON CONFLICT [ conflict_target ] conflict_action ] [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
  • 20. insert into insert into korea_park (manage_no, park_name, park_type, park_addr_road, park_lat, park_long, park_area) values ( '201811-221930', 'PG마당', '수변공원', 'PG시 PG구 PG동 1번지', 51.516510, 9.919632, now())
  • 21. insert select insert into korea_park2 select * from korea_park where park_type='수변공원'
  • 22. select into select * from into korea_park3 from korea_park where park_type = '수변공원'
  • 23. copy COPY table_name [ ( column_name [, ...] ) ] FROM { 'filename' | PROGRAM 'command' | STDIN } [ [ WITH ] ( option [, ...] ) ] COPY { table_name [ ( column_name [, ...] ) ] | ( query ) } TO { 'filename' | PROGRAM 'command' | STDOUT } [ [ WITH ] ( option [, ...] ) ] url: https://www.postgresql.org/docs/9.6/static/sql-copy.html
  • 24. copy 실전 copy korea_park (manage_no, park_name, park_type, park_addr_road, park_lat, park_long, park_area) from 'test2.csv' with format csv DELIMITER ','
  • 25. create table as create table korea_park4 as select * from korea_park
  • 26. 데이터 조회 [ WITH [ RECURSIVE ] with_query [, ...] ] SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | expression [ [ AS ] output_name ] [, ...] INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ WINDOW window_name AS ( window_definition ) [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ] [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]
  • 27. 데이터 조회 실전 select * from korea_park where park_type = '어린이공원' select count(*) from korea_park where park_type = '근린공원' select part_type, count(park_type) from korea_park group by park_type
  • 28. 데이터 조회 실전 select * from korea_park limit 10 offset 0; select * from korea_park order by park_type asc
  • 29. window 함수 row_number, rank 등과 같은 함수가 window 함수에 속합니다. 추가적인 함수는 https://www.postgresql.org/docs/9.6/static/functions-window. html 에서 살펴볼 수 있습니다.
  • 30. JOIN SQL의 조인은 기본적으로 테이블과 테이블의 행을 서로 묶는데 사용합니다. 조인의 가장 기본적인 형태는 카테시안 조인으로 조인 조건을 지정하지 않는 조인을 일컫습니다. no name created 1 jiho 201 2 postgres 202 no article_no content 3 1 c01 4 1 c02 1 jiho 201 3 1 c01 1 jiho 201 3 1 c02 2 postgres 202 3 1 c01 2 postgres 202 3 1 c02
  • 31. LEFT JOIN 테이블 조인시 왼쪽 테이블의 행이 우선시 되는 조인
  • 32. RIGHT JOIN 테이블 조인시 오른쪽 테이블의 행이 우선시 되는 조인
  • 33. ANSI JOIN(INNER JOIN) 테이블 조인시 테이블간의 조인 조건이 서로 일치하는 것만 뽑는 조인
  • 34. EXPLAIN 쿼리가 데이터베이스에서 실행될때 실행 비용 등을 알아보기 위해 사용합니다. 보통 쿼리 최적화를 위해 사용합니다. EXPLAIN SELECT * FROM korea_park WHERE park_type = '근린공원';
  • 35. ALTER TABLE ALTER TABLE은 테이블의 정의에 변경사항을 가하기 위해 사용하는 DDL 문입니다. 주요 기능은 아래와 같습니다. 테이블 제약사항 추가/수정/삭제 테이블 컬럼의 추가/이름 변경/데이터 타입 변경/컬럼 제거
  • 36. 테이블 이름 변경 alter table korea_park rename to south_korea_park;
  • 37. 테이블 컬럼 추가 alter table korea_park add column park_city varchar(20);
  • 38. 테이블 컬럼 이름 변경 alter table korea_park rename park_city to city_park; alter table south_korea_park rename to korea_park;
  • 39. 테이블 컬럼 타입 변경 alter table korea_park alter column city_park type integer;
  • 40. 테이블 컬럼 제거 alter table korea_park drop column city_park;
  • 41. insert 충돌을 해결하기 테이블에 데이터 입력시 이미 있는 레코드를 추가하면 레코드 충돌로 데이터가 입력되지 않습니다. conflict 옵션을 사용하면 데이터 충돌시 해결책을 제시할 수 있습니다. insert into korea_park(manage_no, park_name, park_type) values ('29170-00001', '문화근린공원', '근린공원')
  • 42. insert 충돌시 아무것도 안하기 insert into korea_park(manage_no, park_name, park_type) values ('29170-00001', '문화근린공원', '근린공원') on conflict (manage_no) do nothing;
  • 43. 데이터 충돌시 데이터 덮어쓰기 insert into korea_park(manage_no, park_name, park_type) values ('29170-00001', '문화근린공원', '어린이공원') on conflict (manage_no) do update set park_type=excluded.park_type;
  • 44. 데이터 변경 update korea_park set park_name = 'MBC 어린이공원' where manage_no = '29170-00001'
  • 45. update시 다른 테이블과 조인 UPDATE employees SET sales_count = sales_count + 1 FROM accounts WHERE accounts.name = 'Acme Corporation' AND employees.id = accounts.sales_person;
  • 46. 데이터 삭제 delete from korea_park where manage_no='29170-00001';
  • 47. 데이터 삭제 시 다른 테이블과 조인하기 DELETE FROM films USING producers WHERE producer_id = producers.id AND producers.name = 'foo';
  • 48. 역할 생성과 제거 create role reader1 login password 'reader1'; create role reader2 login password 'reader2';
  • 49. 권한 부여 grant select (park_name, park_addr_road) on korea_park to reader1; grant select (park_name, park_lat, park_long) on korea_park to reader2;
  • 50. 권한 제거 revoke select (park_name, park_addr_road) on korea_park from reader1; revoke select (park_name, park_lat, park_long) on korea_park from reader2;
  • 51. truncate truncate는 테이블의 모든 행을 한 번에 지우는 명령입니다. TRUNCATE korea_park; truncate korea_park RESTART IDENTITY;
  • 52. 트랜잭션 데이터베이스 조작의 일관성을 보장하기 위한 행동 묶음을 트랜잭션이라고 부릅니다 begin transaction; commit; rollback; end;
  • 53. 트랜잭션 트랜잭션이 시작된 이후 에러가 발생하면 에러가 발생한 이후의 SQL 문장은 유효한 SQL 문장이라고 해도 실행되지 않습니다.
  • 54. PostgreSQL 데이터 타입 bigint, boolean character, character varying date, integer json, numeric text timestamp
  • 55. vacuum 1) 변경 또는 삭제된 자료들이 차지 하고 있는 디스크 공간을 다시 사용하기 위한 디스크 공간 확보 작업이 필요하다. 2) PostgreSQL 쿼리 실행 계획기가 사용할 자료 통계 정보를 갱신할 필요가 있다. 3) 인덱스 전용 검색 성능을 향상하는데 이용하는 실자료 지도(visibility map, vm) 정보를 갱신하는 작업이 필요하다. 4) 트랜잭션 ID 겹침이나, 다중 트랙잭션 ID 겹침 상황으로 오래된 자료가 손실 될 가능성을 방지해야할 필요가 있다.
  • 56. 베이큠 작업의 실행 -- DB 전체 풀 실행 vacuum full analyze; -- DB 전체 간단하게 실행 vacuum verbose analyze; -- 해당 테이블만 간단하게 실행 vacuum analyse [테이블 명]; -- 특정 테이블만 풀 실행 vacuum full [테이블명];
  • 57. PostgreSQL Management Tool ● PgAdmin 4 ● Datagrip ● DBeaver ● RazorSQL ● Aqua Data Studio ● SQLDeveloper
  • 58. DDL Drop Table DROP TABLE korea_park;