SQL (2) SELECT문 -데이터를 자유자재로 뽑아보자

Share

가장 기본적인 쿼리문인 SELECT의 조건, 중복 제거 등 여러가지 예제를 살펴보자. 연습용 툴은 SQLite를 사용할 것이고 DB는 Chadwick Baseball Bureau에서 제공하는 DB를 사용할 것이다(관련 내용은 지난 글을 참조하면 된다).

■ SELECT문 기본

기본 구문은 다음과 같다.

SELECT 조회하고-싶은-컬럼-이름 FROM 데이터베이스-이름 

데이터의 컬럼 이름이란 쉽게 말해 헤더를 말한다. 예를 들어 “People”이란 DB는 아래와 같은 형식으로 구성되어 있는데 이 DB의 최상단 헤더가 데이터의 컬럼 값이다.

LinkrowidplayerIDbirthYearbirthMonth
11aardsda01198112
22aaronha0119342

DB가 어떻게 구성되었는지는 SQLite Studio 왼쪽 DB 목록에서 개략적으로 확인할 수 있으며, 상세 데이터까지 보기 원한다면 링크에서 확인할 수 있다.

People이란 DB에서 playerID와 birthYear를 조회하고 싶다면 아래와 같이 쿼리문을 작성하고 초록색 재생 버튼을 누르면 조회가 완료된다.

조회하고 싶은 컬럼이름은 ‘,’로 계속 추가할 수 있고 마지막에 ‘;’를 씀으로써 이 문장이 끝남을 알려준다. 만약 특정 컬럼을 지정하지 않고 모든 컬럼을 불러오고 싶다면 ‘*’을 컬럼이름으로 사용하면 된다.

--People DB에서 playerID와 birthYear 조회하기
SELECT playerID, birthYear FROM People; 

--People DB에서 모든 컬럼 이름 조회하기
SELECT * FROM People;  

참고로 select로 쓰나 SELECT로 쓰나 명령 실행에는 아무런 문제가 없다. 다만 일반적으로 SQL 쿼리문을 대문자로 쓰는 이유는 가독성을 위해서 이다. 즉, select가 데이터의 값인지 쿼리문인지 구분하기 위함이다.

■ SELECT문 – LIMIT: 출력 개수 지정하기

데이터양이 방대할 경우, LIMIT으로 조회하고자 하는 데이터의 숫자를 제한해줄 수 있다. 이때는 LIMIT 뒤에 숫자에 따라 출력양이 정해지게 된다. 조회되는 순서는 DB가 저장된 순서이다.

-- 조회하는 데이터 5개로 한정하기
SELECT playerID, birthYear FROM People LIMIT 5;

■ SELECT문 – ORDER BY: 오름차순/내림차순으로 정렬하기

오름차순은 영어 ASCENDING에서 따온 ASC를 사용하면 되고, 내림차순은 DESCENDING에서 따론 DESC를 사용하면 된다.

DB에서 몸무게가 가장 많이 나가는 선수를 찾고 싶다면, ORDER BY를 사용해서 내림차순으로 정렬하면 된다.

-- 정렬하기
SELECT 컬럼이름 FROM DB이름 ORDER BY 기준컬럼 ASC(또는 DESC);

-- 'weight' 기준으로 오름차순 정렬
SELECT * FROM People ORDER BY weight ASC;

-- 'weight' 기준으로 내림차순 정렬
SELECT * FROM People 
ORDER BY weight DESC 
LIMIT 10;

마지막 쿼리문을 보면 줄바꿈 처리가 되어 있음을 알 수 있다. 명령 실행에는 아무런 문제가 없다. 모든 문장은 ‘;’끝나기 전까지 한 문장으로 인식하기 때문. 예제문은 간단하여 한 문장으로 표현해도 보기에 어렵지 않지만 실제로 사용할 때는 쿼리문의 가독성을 위해 적절히 줄바꿈처리를 해주면 된다.

쿼리문을 실행하면 위와 같이, DB 상 가장 몸무게가 많이 나가는 선수는 Walter Young으로 320 파운드 (약 145 kg)가 나가고 몸무게를 기준으로 정렬이 잘 되어 있음을 확인할 수 있다.

■ SELECT문 – WHERE: 조건을 걸어 필터링

WHERE은 특정 데이터를 조회할 때 유용하다.

WHERE에는 기본적인 비교 연산자(=, !=, >, <, >=, <= 등) 사용이 가능하다. 각 조건은 ‘AND’로 추가할 수 있고, 조건 값이 문자일 경우엔 ” 안에 넣으면 된다(숫자는 상관없음).

예를 들어 brithYear이 1990년이고 birthCountry가 USA인 선수를 조회하고 싶다면 아래와 같이 사용하면 된다.

-- 조건 걸기
SELECT 컬럼이름 FROM DB이름
WHERE 기준컬럼 = '조건값'; 

-- 1990년 미국에서 태어난 선수 필터링
SELECT * FROM People 
WHERE birthYear = '1990'
AND birthCountry = 'USA'
ORDER BY weight DESC 
LIMIT 10;

■ SELECT문 – 집계함수(SUM, AVG, MIN, MAX, COUNT)

비교 연산자와 함께 기본적인 집계함수도 사용 가능하다. 엑셀 함수를 떠올리면 된다.

-- 조건 걸기
SELECT 집계함수(컬럼이름) FROM DB이름; 

-- 출생지가 미국인 선수의 전체 몸무게 합산(SUM)하기
SELECT SUM(weight) FROM People 
WHERE birthCountry = 'USA';

-- 출생지가 미국인 선수의 전체 몸무게 평균(AVG)내기
SELECT AVG(weight) FROM People 
WHERE birthCountry = 'USA';

-- 출생지가 미국인 선수의 전체 몸무게 최소값(MIN)내기
SELECT MIN(weight) FROM People 
WHERE birthCountry = 'USA';

-- 출생지가 미국인 선수의 전체 몸무게 최대값(MAX)내기
SELECT MAX(weight) FROM People 
WHERE birthCountry = 'USA';

-- 출생지가 미국인 선수의 전체 몸무게 데이터 개수(COUNT) 세기
SELECT COUNT(weight) FROM People 
WHERE birthCountry = 'USA';

■ SELECT문 – ||: 2개 이상의 컬럼을 합쳐서 조회하기

People DB를 살펴보면 성과 이름이 별도의 구분되어 저장되어 있음을 알 수 있다. 이렇게 나눠진 컬럼 이름을 합쳐서 조회하고 싶을 때는 ‘||’을 사용하면 된다.

-- 2개 이상 컬럼을 합쳐서 조회하기, (컬럼과 컬럼 사이는 공백(' ')으로 연결하기)
SELECT 컬럼이름1 || ' ' || 컬럼이름2 FROM DB이름; 

-- 몸무게가 300 파운드 이상인 선수의 전체 이름 조회하기
SELECT nameFirst || ' ' || nameLast
AS full_name -- 컬럼 이름을 full_name으로 저장한다. AS를 사용하지 않으면 컬럼 이름은 nameFirst || ' ' || nameLast 을 기본으로 저장된다. 
FROM People 
WHERE weight >= '300'
LIMIT 5;

위의 결과 값을 보면, full_name 만 보인다. 더 여러가지 컬럼을 조회하고 싶다면 SELECT 뒤에 ‘,’로 연결하면 된다.

■ SELECT문 – DISTINCT: 고유값(중복 제거) 조회

마지막으로 데이터의 중복을 제거하고 싶다면 DISTINCT를 사용하면 된다.

--중복 제거하기
SELECT DISTINCT(컬럼이름) FROM DB이름;

-- 전체 이름이 중복되는 데이터 삭제하기
SELECT DISTINCT(full_name) FROM People ;
답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다