[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~를 통해 집계된 결과를 필터링할 수 있다.
'CS > DB' 카테고리의 다른 글
[DB] 데이터 무결성과 일관성을 위한 제약 조건과 데이터 타입 (0) | 2024.10.23 |
---|---|
[DB] SQL과 주요 SQL 명령어 (0) | 2024.10.09 |
블로그의 정보
공부중임
구설구설