Study

[PostgreSQL] 쿼리문 공부 노트

Devailean 2021. 3. 17. 15:10

데이터베이스에 연결하기

 

psql -h localhost -p 5432 -U suyong test 

-> Suyong 이라는 owner의 test 테이블로 가기

 

또는 psql에서 \c 데이터베이스 이름

 

테이블 만들기

CREATE TABLE 테이블이름 (

id INT,

first_name VARVHAR(50),

…..

);

 

데이터 넣기

INSERT INTO 테이블이름(

fisrt_name,

last_name,

gender,

date_of_birth)

VALUES (‘Anne’, ‘Smith’, ‘FEMALE’, DATE ’1988-01-09’);

 

 

SELECT * FROM person;

-> person 테이블의 모든 열(*) 나열

 

SELECT * FROM person ORDER BY [열 이름] ASC(or DESC);

-> 테이블 순서

 

SELECT DISTINCT country_of_birth FROM person ORDER BY country_of_birth;

-> person 테이블의 country_of_birth열 중복 제외하고 오름차순

 

WHERE - 데이터 필터링

SELECT * FROM person WHERE gender = 'Male' ; -> 성별이 MALE인 튜플만 고름

-> AND OR 비교(<.=.etc) 도 사용 가능

 

SELECT * FROM person LIMIT 10;

-> 10개 항목만 표시

 

SELECT * FROM person OFFSET 10 LIMIT 20;

-> 11번째 항목부터 20까지

 

SELECT * FROM person OFFSET 10 FETCH FIRST 20 ROW ONLY;

-> 11부터 시작해서 20개 항목

 

SELECT * FROM person WHERE country_of_birth = 'Brazil'

OR country_of_birth = 'China'

OR country_of_birth = 'Sweden';

 

위에거는 

SELECT * FROM person

WHERE country_of_birth IN (‘China’, ‘Sweden’, ‘Brazil’);

이랑 똑같음

 

 

SELECT * FROM person

WHERE date_of_birth

BETWEEN DATE '2000-01-01' AND '2015-05-05';

-> 말 그대로임

 

SELECT * FROM person

WHERE email LIKE '%.com';

이메일이 .com 꼴인 데이터 모두 가져옴 / %은 anything 이란 말

WHERE email LIKE ‘______%.com';

이면 _ 갯수만큼 아무거나


Group By

 

SELECT country_of_birth, COUNT(*)  FROM person GROUP BY country_of_birth;

-> 나라별 사람 수 구하는 문

 

HAVING

SELECT country_of_birth, COUNT(*)  FROM person GROUP BY country_of_birth HAVING COUNT(*) > 5  ORDER BY country_of_birth;

HAVING 문은 GROUP BY 바로 뒤에 나와야 함

HAVING COUNT(*) >5  이면 카운트 수가 5 이상인 항목만 나옴

 

Postgre 홈페이지에서 aggregate functions 검색하면 됨

 








Deleting Records with Foreign Keys.

 

외래 키 연결이 되어있는 레코드를 지우려면 먼저 연결을 끊어주고 지워야 함

/Foreign key Constraint를 violate하므로/

 

따라서

 

사람과 연결되어 있는 차를 지우려면

먼저 사람을 지우고 나서 차를 지우거나 해야 함

차만 지우려면

사람의 외래키를 null 변경해주고 차를 지움

 


CSV 만들기

 

\copy (SELECT * FROM person LEFT JOIN car ON car.id = person.car_id) TO '/Users/suyong/Desktop/results.csv' DELIMITER ',' CSV HEADER;

 

Copy 괄호 안에 출력할 쿼리문 넣음

 

ALTER SEQUENCE person_id_seq RESTART WITH 10;

-> 시퀀스 순서 난리났을 때 고치는 거