본문 바로가기
SQL

[SQL] 데이터분석가 입문 필수 SQL 부트캠프 (2) SELECT, 별칭(ALIAS), LIMIT, OFFSET, DISTINCT

by 모닥불🔥 2024. 3. 3.

SQLD 시험도 있겠다, SQL 공부를 제대로 해보고자 메타코드 SQL 부트캠프를 듣기 시작했다. 2월 마지막 주말에 토, 일 2일간 공부했고, 완강했다(감격). 덕분에 기본적인 SQL문을 쓸 수 있게 되었고, 개념적으로도 개괄이 되어서 엄청 많은 도움을 받았다. 지금 할인 중이니 들어봐도 좋을 듯...?

나는 자료에 나오는 모든 쿼리를 내 손으로 쳐보았더니 딱 3배 걸렸다. :D (6시간 강의인데 완강에 18시간 걸림) 중간중간 실습 문제들이 많아서 그런 걸 다 푼다면 아마 6시간으로 끝날 수 있는 사람은 없지 않을까.

강의는 메타코드 사이트에서 구매할 수 있다. https://mcode.co.kr/

지난 글에서는 Heidi SQL을 이용해 데이터베이스를 생성하거나 불러오는 방법을 정리했다. 오늘 정리하는 부분부터가 본격적인 공부 시작임!!


🔥 SELECT문

실무를 하게 되면 아마 SELECT문을 가장 많이 사용할 것이다. 테이블 자체를 생성하고 삭제하는 일은 그렇게 많지 않기 때문! 기본형은 다음과 같다.

SELECT 컬럼명1, 컬럼명2
FROM 테이블명;

 

만약 모든 컬럼을 가져오고 싶다면, SELECT 다음에 *을 적으면 된다.

# 모든 컬럼 조회

SELECT *
FROM 테이블명;

🔥 별칭(Alias)

컬럼명과 테이블명에는 별칭을 지정할 수 있다. 정식 이름이 너무 길거나 보기 싫을 때 짧은 별칭을 활용하면 쿼리가 간결해져서 편리하다.

# 컬럼명에 별칭 지정

SELECT 수학, 영어, 수학+영어 AS 영수
FROM 점수;

 

만약 별칭을 사용하지 않았다면, 출력되는 컬럼명은 '수학', '영어', '수학+영어'였을 것이다. 더 복잡한 연산으로 컬럼을 불러오면 해당 쿼리가 컬럼명에 그대로 나오기 때문에 별칭을 붙여주는 것이 좋다.


🔥 LIMIT, OFFSET

LIMIT은 반환하는 레코드의 수를 제한할 때 사용한다. 무조건 쿼리의 맨 마지막에 써야 한다.

예를 들어, LIMIT 5는 위에서부터 5개 행만 뽑겠다는 뜻이다. python에서 df.head()와 유사한 기능을 한다.

# 위에서부터 5줄만 출력

SELECT *
FROM exercise1
LIMIT 5;

 

위 쿼리를 해석하면, exercise1 테이블의 모든 컬럼을 불러 오는데, 위에서부터 5개의 행만 불러오라는 뜻이다.

 

OFFSET은 건너 뛸 레코드 수를 지정하는 데 사용한다.

예를 들어, 처음 5개 행을 건너 뛰고 그다음 10개의 행을 불러오고 싶을 때는 LIMIT 10 OFFSET 5 로 쓰면 된다.

# LIMIT과 OFFSET

SELECT *
FROM exercise1
LIMIT 3 OFFSET 5;

# 위 쿼리와 동일한 결과

SELECT *
FROM exercise1
LIMIT 5, 3;

 

LIMIT 5, 3을 쓰면 0행~4행을 건너뛰고, 5행(6번째 행)부터 3개의 행을 출력한다는 의미이다.

파이썬의 인덱스 개념처럼 0부터 행을 세기 때문에, 헷갈릴 수 있다. 그래서 나는 그냥 5개 건너 뛰고 3개 출력이라는 OFFSET의 의미와 동일하게 해석하려고 한다. (아래 SQL 부트캠프 강의 자료 참조)


🔥 DISTINCT

DISTINCT는 중복 행을 제거하고 출력한다.

# DISTINCT

SELECT DISTINCT 수학
FROM 점수;

위 그림에서 원본 테이블에는 수학 점수가 97점인 경우가 2번, 71점인 경우도 2번 있지만 우측 결과에서는 중복된 값 없이 한 번씩만 조회된 것을 볼 수 있다.


🔥 실습문제

문제1. customers 테이블에서 customerName을 가져오되, 중복없이 가져오시오.

일단, customers테이블에서 cusotmerName을 가져오는 쿼리는 아래와 같다.

# 고객(cusotmers)테이블에서 고객명(customerName) 컬럼 조회

SELECT customerName
FROM customers;

 

중복 없이 불러오라고 했으니까 distinct를 컬럼명 앞에 넣어준다.

# 고객(customers) 테이블에서 고객명(customerName) 컬럼을 중복없이(DISTINCT) 조회

SELECT DISTINCT customerName
FROM customers;

 

문제2. products 테이블에서 제품 이름(productName)을 상위 5개만 가져오세요.

일단, products 테이블에서 제품이름 컬럼을 가져오는 쿼리를 적어보자.

# 제품(producsts) 테이블에서 제품이름(productName) 컬럼을 조회

SELECT productName
FROM products;

 

위에서부터 5개만 제한해서 출력하는 것은 'LIMIT 5'를 추가해야 한다. LIMIT은 쿼리의 맨 마지막 줄에 써야 한다.

# 제품(producsts) 테이블에서 제품이름(productName) 컬럼을 상위 5개만 조회

SELECT productName
FROM products
LIMIT 5;

 

문제7. employees 테이블에서 employeeNumber를 별칭 Employee_ID로 조회하되, 3번째부터 6개 행만 가져오세요.

 

일단, employees에서 employeeNumber를 별칭으로 조회해야 한다. 별칭을 쓸 때는 AS를 붙여서,

# 직원(employees)테이블에서 직원번호(employeeNumber)를 Employee_ID라는 별칭으로 조회

SELECT employeeNumber AS Employee_ID
FROM employees;

 

위 쿼리 정도 짧게 쓴 다음 출력을 한 번 해보자. 모든 행이 잘 출력되고, 별칭도 잘 붙었는지 1차로 확인한다.

그런 다음 3번째부터 6번째 행을 뽑으라고 했으니까 LIMIT과 OFFSET을 사용하거나 혹은 LIMIT만 사용해서 표현해준다.

# 직원(employees)테이블에서 직원번호(employeeNumber)를 Employee_ID라는 별칭으로 3번째부터 6개 조회

# LIMIT만 사용한 경우
SELECT employeeNumber AS Employee_ID
FROM employees
LIMIT 2, 6;

# LIMIT과 OFFSET을 사용한 경우
SELECT employeeNumber AS Employee_ID
FROM employees
LIMIT 6 OFFSET 2;

 

3번째부터라고 하면 헷갈리니까, 2개를 건너뛰고 6개 출력이라고 해석하고 LIMIT 2, 6 혹은 LIMIT 6 OFFSET 2를 적어주자.

 

📚 실제 수업에는 이런 식으로 실습문제 10개 정도씩 들어 있다. 나는 일부만 뽑아옴! 더 연습이 필요한 사람은 SQL 부트캠프 강의를 들으면 좋을 것 같다. 다음 글에서는 WHERE, ORDER BY, GROUP BY 등을 정리할 거다. 그럼 이만!