이 게시글은 이틀 동안 DataCamp의 Introduction to SQL 코스의 내용을 제가 기억할 수 있도록 정리한 것으로, 아주 기초적인 내용으로 구성되어 있습니다. - 패스트캠퍼스의 SQL 강의 내용이 추가되어 있습니다.
DISTINCT
SELECT문을 통해 데이터를 조회할 때 중복되는 데이터를 제거하고 가장 첫번째 행만 출력될 수 있게 한다.
SELECT DISTINCT title FROM films;
여러 개의 컬럼을 조회할 때는 ','를 구분자로 하여 컬럼명을 나열할 수 있다.
SELECT DISTINCT title, release_year FROM films;
DISTINCT ON(PostgreSQL 고유 문법)
여러 개의 컬럼을 조회하는데 해당 컬럼만 중복값을 제외하여 조회하고 싶을 때 사용한다. 어찌보면 그냥 DISTINCT 키워드를 사용하는 것과 같은 의미가 아니냐고 할 수 있다. 아래의 실습 내용을 가지고 설명하겠다.
현재 PostgreSQL에서 제공하는 샘플 데이터베이스 dvdrental에 t1 테이블을 생성하여 데이터 조회를 하는 실습을 진행중에 있다. t1테이블의 생성문과 데이터는 이와 같다.
CREATE TABLE T1(ID SERIAL NOT NULL PRIMARY KEY, BCOLOR VARCHAR, FCOLOR VARCHAR);
아래의 쿼리문을 보자.
SELECT DISTINCT bcolor, fcolor
FROM t1;
해당 쿼리의 결과는 아래와 같다.
아래의 쿼리를 실행해보자.
SELECT DISTINCT ON(bcolor)bcolor, fcolor
FROM t1;
해당 쿼리의 결과는 아래와 같다.
bcolor 컬럼에서 중복값들이 제거되어 하나의 값들만 나오게 된다. 이 때 자동으로 오름차순 정렬되어 blue, green, red의 순서로 조회되게 된다. fcolor 컬럼의 값들은 bcolor값이 각 'blue', 'green', 'red'인 행들을 나열했을 때, 각 첫번째 행들의 fcolor 컬럼 값이 모두 'red'였기 때문에 전부 'red'값이 조회된다.
ORDER BY
SQL에서는 ORDER BY 키워드를 이용해 하나 혹은 여러 개의 컬럼을 기준으로 삼아 결과를 오름차순/내림차순으로 정렬할 수 있다. 기본적으로 ORDER BY는 오름차순(ASC)으로 정렬하나, 내림차순으로 정렬하고 싶을 경우에는 DESC 키워드를 사용할 수 있다. 예를 들어 아래의 쿼리는 영화들의 제목을 개봉연도를 기준으로 내림차순 정렬한 결과를 나타낼 수 있다.
SELECT title FROM films ORDER BY release_year DESC;
*텍스트 데이터를 정렬할 때에는 알파벳 순서대로 정렬한다. 따라서 오름차순의 경우 A-Z순으로 정렬된다.
하나의 컬럼을 기준으로 정렬하기
ex. 2000년과 2012년에 개봉한 영화들의 제목을 개봉연도를 기준으로 정렬
SELECT title FROM films WHERE release_year IN (2000, 2012) ORDER BY release_year;
ex. 2015년에 개봉한 영화를 제외한 모든 영화들의 정보를 상영시간을 기준으로 정렬
SELECT *
FROM films
WHERE release_year <> 2015
ORDER BY duration;
ex. 'M'으로 시작하는 영화들을의 제목과 수익을 영화 제목을 기준으로 정렬
SELECT title, gross FROM films WHERE title LIKE 'M%' ORDER BY title;
여러 개의 컬럼을 기준으로 정렬하기
정렬 기준으로 삼을 컬럼의 컬럼명을 여러 개 명시할 때에는 ','를 그 구분자로 삼고, 컬럼이 나열된 순서대로 정렬된다. 또한 각 기준을 가지고 정렬함에 있어서 ASC, DESC 키워드를 가지고 정렬 순서를 바꿀 수 있다. 예를 들어 아래 쿼리를 통해서는 사람들의 생년월일과 이름을 생년월일, 이름을 기준으로 정렬할 수 있다.
SELECT birthdate, name FROM people ORDER BY birthdate, name;
ex. 사람들의 생년월일과 이름을 생년월일, 이름을 기준으로 정렬하되, 생년월일은 오름차순, 이름은 내림차순으로 정렬
SELECT birthdate, name FROM people ORDER BY birthdate [ASC], name DESC;
'Database > PostgreSQL' 카테고리의 다른 글
SQL) OUTER JOIN (0) | 2021.05.11 |
---|---|
SQL) INNER JOIN, CASE문, INTO (0) | 2021.05.01 |
SQL) GROUP BY절, HAVING절 - 그룹화하기 (0) | 2021.04.30 |
SQL) 산술연산자, 집계 함수, AS(Alias), BETWEEN (0) | 2021.04.30 |
SQL) LIKE, NOT LIKE 연산자 (0) | 2021.04.30 |