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 등을 정리할 거다. 그럼 이만!