PostgreSQL 10

[PostgreSQL] JOIN ( INNER, LEFT, RIGHT, FULL )

JOIN ( INNER JOIN ) 두 테이블의 교집합 결과를 출력한다. SELECT book.name, author.name FROM ( author ON book ON author.id = book.author_id ); LEFT / RIGHT / FULL OUTER JOIN A LEFT OUTER JOIN B 를 계산했을 때 계산 결과는 다음과 같다. 즉, A 와 B 테이블의 공통된 부분을 출력해주면서, A 내에 공통이 아닌 부분도 함께 출력해주는 것이다. 그럼 테이블 A 만 출력하는 것과 무엇이 다를까 ? 위 그림처럼 A 와 B 를 조인했을 때, A 여집합 부분은 B 와 겹치는 부분이 존재하지 않는다. 그 부분은 NULL 로 채워 출력해주는 것이다. SELECT 테이블1.컬럼1, 테이블1.컬럼2,..

[PostgreSQL] UNION, INTERSECT, EXCEPT

UNION / UNION ALL 쿼리문 결과 row 들을 모두 합쳐서 출력한다. 이 때, UNION ALL 은 중복 상관하지 않고 모두 합쳐서 출려하고 UNION 은 중복 여부를 체크해 출력한다. (SELECT 컬럼명 from 테이블명) UNION (SELECT 컬럼명 from 테이블명); (SELECT 컬럼명 from 테이블명) UNION ALL (SELECT 컬럼명 from 테이블명); INTERSECT / INTERSECT ALL 중복되는 결과를 출력해주는 명령이이다. INTERSECT 를 하면 중복을 제거해서 중복 결과를 출력하고, INTERSECT ALL 은 중복 제거 없이 중복되는 결과를 모두 출력한다. (SELECT 컬럼명 FROM 테이블명) INTERSECT (SELECT 컬럼명 FROM ..

[PostgreSQL] DISTINCT, HAVING

DISTINCT column1 에 있는 값들을 중복을 모두 제거하고 보여준다. SELECT DISTINCT column1 FROM table1; GROUP BY, HAVING GROUP BY 쿼리를 이용해 데이터를 집계하고, 집계된 이후의 데이터 내에서 조건 검색을 할 경우에 HAVING 을 사용한다. 반면 WHERE 는 데이터가 집계되기 이전의 데이터 내에서 조건을 필터링한다는 차이가 있다. ( 쿼리 연산은 FROM - WHERE - GROUP BY - HAVING - SELECT - DISTINCT - ORDER BY - LIMIT 순으로 처리된다. ) SELECT author FROM book WHERE author LIKE 'Kim%' GROUP BY author HAVING count(*) > ..

[PostgreSQL] CASE 함수 / COALSECE 함수 / NULLIF 함수

CASE : 조건문 함수 CASE WHEN condition_1 THEN result_1 WHEN condition_2 THEN result_2 [WHEN ...] [ELSE else_result] END SELECT food_name CASE WHEN rate >= 3 THEN 'good' WHEN rate < 3 THEN 'bad' END menu_grade FROM menu; COALSECE : null 이 아닌 첫번째 매개변수 값을 리턴하는 함수 COALESCE (argument_1, argument_2, …); SELECT food_name, COALESCE (rate, 0) AS new_rate FROM menu NULLIF : 값1과 값2가 같으면 NULL 을 리턴하고, 다르면 값1을 리턴하..

[PostgreSQL] 형변환 / 비교 / 범위 연산자

CAST 명령을 이용한 데이터 형변환 CAST ( 데이터 AS 원하는 데이터 타입 ) SELECT CAST ( '100' AS INTEGER ) :: 을 이용한 데이터 형변환 SELECT 데이터::원하는 데이터 타입 SELECT '100'::INTEGER 비교 연산자 SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 = 값1; SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 IS 값1; 범위 연산자 SELECT 컬럼명 WHERE 테이블명 WHERE 값1

[PostgreSQL] select, update, drop, alter, delete

테이블 내 특정 컬럼, 로우의 데이터 값 변경 UPDATE 테이블명 SET 컬럼명 = 변경 내용 WHERE 로우 조건 RETURNING *; // 수정 내용 조회 테이블 삭제 및 변경 DROP TABLE 테이블명; ALTER TABLE 테이블명 RENAME TO 변경할 테이블명; 데이터 조회 SELECT 컬럼명 AS 조회이름지정 FROM 테이블명 WHERE 조건 LIMIT 출력행수 OFFSET 시작점 ORDER BY (기준컬럼) ASC/DESC; SELECT menu AS mymenu FROM burger WHERE item 1 LIMIT 5 OFFSET 1 ORDER BY DESC; 데이터 삭제 DELETE FROM 테이블명 WHERE 컬럼명 = 조건;

[PostgreSQL] 데이터베이스/테이블 생성, 삭제 및 데이터 삽입

데이터베이스 생성 및 삭제 CREATE DATABASE 데이터베이스명; DROP DATABASE 데이터베이스명; 테이블 생성 및 삭제 CREATE TABLE 테이블명 ( 칼럼명 칼럼속성, ... ); DROP TABLE 테이블명; 테이블에 데이터 삽입 # 데이터 삽입 INSERT INTO 테이블명 VALUES( 칼럼명1 데이터, 칼럼명2 데이터, ... ); # 데이터 삽입 순서 지정시 INSERT INTO 테이블명 ( 칼럼명1, 칼럼명2.. ) VALUES( 칼럼명1 데이터, 칼럼명2 데이터, ... ); # 복수의 데이터 삽입 INSERT INTO 테이블명 VALUES ( 칼럼명1 데이터, 칼럼명2 데이터, ... ), ( 칼럼명1 데이터, 칼럼명2 데이터, ... ), ( 칼럼명1 데이터, 칼럼명2..

[PostgreSQL] 도메인이란 ?

PostgreSQL 에서 도메인이란 "선택적 제약사항"을 가진 데이터 타입 이라고 정의됩니다. 다음은 PostgreSQL 도큐먼트의 시놉시스 입니다. CREATE DOMAIN 도매인이름 AS 데이터타입 [ COLLATE collation ] [ DEFAULT expression ] [ constraint [ ... ] ] where constraint is: [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK (expression) } COLLATE : 데이터베이스 정렬 순서 결정 DAFAULT : 디폴트 값이 있다면 어떻게 할 것인지 constraint : NOT NULL | NULL | CHECK (expression) 값을 이용해 도메인 내용을 정의..

[PostgreSQL] 모두를 위한 PostgreSQL 2장 예제 풀이

모두를 위한 PostgreSQL 2장 예제를 풀이하겠습니다. 문제 1. 데이터베이스 만들기 CREATE DATABASE community_board; SQL 실행 후 \l 쉘 명령어를 입력하면 community_board 데이터베이스가 잘 생성됐는지 확인할 수 있습니다. \ㅣ 이제 우리가 만든 데이터베이스에 접속하고, 그 안에 테이블들을 만들어야겠죠. 다음의 쉘 명령어를 사용해 앞에서 생성한 데이터베이스로 이동합니다. \c community_board 명령어를 실행해 데이터베이스로 잘 이동하면 다음의 출력결과를 얻습니다. 접속정보: 데이터베이스="community_board", 사용자="postgres". 문제 2. 유저 테이블 만들기 유저 테이블을 만들어 주었습니다. 이 때, user_pk 는 INTE..