공부한거 정리하는 노트에요

[DB] SQL 문자열 패턴, 범위 검색, 데이터 정렬 및 그룹화

by 구설구설

문자열 패턴

% - SQL wildcard character

SELECT firstname from Author
WHERE firstname like 'R%'

-- 결과 : firstname이 R로 시작하는 작가의 firstname을 반환한다.

패턴의 앞, 뒤, 또는 앞 뒤 모두에 위치해 패턴의 없는 문자를 정의한다.

 

범위 검색

BETWEEN AND

SELECT title, pages
FROM Book
WHERE pages >= 290 AND pages <= 300;

SELECT title, pages
FROM Book
WHERE pages BETWEEN 290 AND 300;

-- 결과: 뒤 쿼리 모두 동일한 결과,
-- 페이지 수가 290 이상 300 이하인 책의 제목과 페이지 수를 반환한다.

주어진 두 값을 포함한 범위를 확인한다.

IN 

SELECT firstname, lastname, country
FROM Author
WHERE country = 'AU' OR country = 'BR';

SELECT firstname, lastname, country
FROM Author
WHERE country IN ('AU', 'BR');

-- 결과: 뒤 쿼리 모두 동일한 결과,
-- country가 'AU'거나 'BR'인 저자의 이름, 성, 국가를 반환한다.

범위로 특정할 수 없는 값들 중 하나를 포함하고 있는지의 여부를 확인한다.

2개 이상의 값들을 제공할 수 있다.

 

데이터 정렬

데이터베이스는 데이터를 보관만 하는 것이 아니라 데이터를 다시 원활히 추출할 수 있어야 한다.

데이터를 질서 있게 추출하기 위해서는 데이터를 추출하는 과정에서 정렬을 할 수 있다.

ORDER BY

SELECT title
FROM Book;
-- 결과:
-- Title
-- ----------------------------------------
-- Getting started with DB2 Express-C
-- Database Fundamentals
-- Getting started with DB2 App Dev
-- Getting started with WAS CE
-- 4 record(s) selected.

정렬을 하지 않는다면 데이터는 정상적으로 나오지만 질서 있어 보이지 않는다.

SELECT title
FROM Book
ORDER BY title;
-- 결과:
-- Title
-- ----------------------------------------
-- Database Fundamentals
-- Getting started with DB2 App Dev
-- Getting started with DB2 Express-C
-- Getting started with WAS CE
-- 4 record(s) selected.
-- 기본적으로 결과는 오름차순으로 정렬됨.

~ORDER BY~를 사용해서 특정 열을 기준으로 오름차순으로 정렬할 수 있다.

DESC

SELECT title
FROM Book
ORDER BY title DESC;
-- 결과:
-- Title
-- ----------------------------------------
-- Getting started with WAS CE
-- Getting started with DB2 Express-C
-- Getting started with DB2 App Dev
-- Database Fundamentals
-- 4 record(s) selected.

~DESC~를 사용해 내림차순으로 정렬할 수 있다.

열 번호로 정렬

SELECT title, pages
FROM Book
ORDER BY 2;
-- 결과:
-- Title                                    Pages
-- ----------------------------------------
-- Getting started with WAS CE              278
-- Getting started with DB2 Express-C       280
-- Getting started with App Dev             298
-- Database Fundamentals                    300
-- 4 record(s) selected.

열 번호를 통해서 정렬할 수 있다.

열 번호 2가 Pages였을 때의 예시로, 오름차순으로 정렬되었다.

 

데이터 그룹화

DISTINCT

SELECT country
FROM Author
ORDER BY 1;
-- 결과:
-- Country
-- ----------------
-- AU
-- BR
-- ...
-- CN
-- CN
-- ...
-- IN
-- IN
-- IN
-- ...
-- RO
-- RO
-- 20 record(s) selected.
-- `country` 열을 기준으로 오름차순 정렬됨.

기존의 ~SELECT~ 문은 중복 데이터가 존재할 수 있다.

SELECT DISTINCT(country)
FROM Author;
-- 결과:
-- Country
-- ----------------
-- AU
-- BR
-- CA
-- CN
-- IN
-- RO
-- 6 record(s) selected.
-- 중복된 값이 제거된 `country` 목록을 반환함.

~SELECT~ 뒤에 ~DISTINCT~를 추가해 중복된 값을 제거할 수 있다.

GROUP

SELECT country, count(country)
FROM Author
GROUP BY country;
-- 결과:
-- Country    2
-- ----------------
-- AU         1
-- BR         1
-- CA         3
-- CN         6
-- IN         6
-- RO         3
-- 6 record(s) selected.
-- 각 `country`별로 중복된 개수를 세어 그룹화한 결과.

~GROUP BY~ 를 통해 각 그룹의 집계된 결과를 반환할 수 있다.

~count~말고도 ~sum~, ~avg~ 등을 반환하도록 할 수 있다.

SELECT country, count(country) as Count
FROM Author
GROUP BY country;
-- 결과:
-- Country    Count
-- ----------------
-- AU         1
-- BR         1
-- CA         3
-- CN         6
-- IN         6
-- RO         3
-- 6 record(s) selected.
-- 각 `country`별로 중복된 개수를 세어 그룹화한 결과.

두 번째 열의 이름을 ~as~를 통해 정의할 수도 있다.

HAVING

SELECT country, COUNT(country) AS Count
FROM Author
GROUP BY country
HAVING COUNT(country) > 4;
-- 결과:
-- Country    Count
-- ----------------
-- CN         6
-- IN         6
-- 6 record(s) selected.
-- `country`별로 그룹화한 후, 각 그룹의 개수가 4보다 큰 경우만 반환함.

~HAVING~절을 사용하여 ~GROUP BY~를 통해 집계된 결과를 필터링할 수 있다.

 

 

 

 

 

블로그의 정보

공부중임

구설구설

활동하기