DB에서 데이터를 뽑을 때, 사실 모든 컬럼이 다 필요한 경우는 거의 없어. 예를 들어 employees 테이블에 15개 컬럼이 있다고 치자: 이름, 성, 생일, 직책, 월급, 입사일 등등. 근데 너한테 필요한 건 이름이랑 직책뿐이야. 굳이 다 끌고 오는 건 쓸데없고 비효율적이지. 그래서 필요한 컬럼만 뽑는 게 진짜 중요해.
비유하자면, 오렌지, 사과, 바나나가 섞인 바구니에서 사과만 골라내는 거랑 똑같아. 멋지지? 우리도 이걸 해볼 거야!
문법
참고로, SQL은 진짜 user-friendly하게 만들어졌어.
첫째, 쿼리에서 대소문자는 상관없어. SELECT, Select, select 아무렇게나 써도 다 돌아가. 둘째, 줄바꿈도 신경 안 써도 돼. DBMS가 알아서 한 줄로 만들어주니까, 네가 편한 대로 쓰면 돼.
이미 눈치챘겠지만, SELECT랑 FROM만 있다고 끝나는 게 아니야. 그랬으면 SQL 얘기가 이렇게 많지도 않았겠지. 좀 더 확장된 SQL 쿼리는 이렇게 생겼어:
SELECT 컬럼들
FROM 테이블
WHERE 조건
GROUP BY 컬럼들
HAVING 컬럼들
ORDER BY 정렬
여기서:
컬럼들— 네가 뽑고 싶은 컬럼 이름들이야.테이블— 데이터를 가져올 테이블 이름.조건— 행을 필터링할 조건.정렬— 정렬할 컬럼과 순서.
쉽지? 실제 예제로 바로 가보자. 근데 일단 간단한 예부터 해보자.
기본 쿼리 예제
예를 들어 students 테이블이 있다고 해보자. 학생 정보가 들어있지. 테이블 구조는 대충 이래:
| id | first_name | last_name | age | grade |
|---|---|---|---|---|
| 1 | Alex | Lin | 20 | A |
| 2 | Anna | Song | 22 | B |
| 3 | Otto | Art | 19 | A |
이제 우리한테 필요한 건 학생들의 last_name이랑 grade만이야.
쿼리는 이렇게 써:
SELECT last_name, grade
FROM students;
실행 결과:
| last_name | grade |
|---|---|
| Lin | A |
| Song | B |
| Art | A |
축하해! DB 리소스도 아끼고 결과도 훨씬 보기 좋아졌어!
문자열 합치기
이제 데이터 뽑는 건 할 줄 아니까, 좀 더 재밌는 거 해보자. 테이블에 이름이랑 성이 따로 저장돼 있잖아? 학생의 전체 이름을 한 컬럼에 보여주고 싶을 때가 있지.
PostgreSQL에서는 || 연산자로 문자열을 합칠 수 있어. SELECT 쿼리는 이렇게 돼:
SELECT first_name || last_name, grade
FROM students;
실행 결과:
| first_name || last_name | grade |
|---|---|
| AlexLin | A |
| AnnaSong | B |
| OttoArt | A |
음. 뭔가 부족하지? 이름이랑 성 사이에 공백이 없어! 이거 고쳐보자.
SELECT first_name || ' ' || last_name, grade
FROM students;
실행 결과:
| first_name || ' ' || last_name | grade |
|---|---|
| Alex Lin | A |
| Anna Song | B |
| Otto Art | A |
좋아. 결과 테이블 내용은 맘에 드는데, 컬럼 이름이 좀 별로지? full name이나 name처럼 보이면 좋은데, first_name || ' ' || last_name은 좀 별로잖아. 이럴 때도 방법이 있어.
Alias(별칭) 사용해서 컬럼 이름 바꾸기
SQL 쿼리는 alias를 써서 더 읽기 쉽게 만들 수 있어. alias는 쿼리 안에서 컬럼에 새 이름을 붙여주는 거야. AS 키워드를 쓰는데, 사실 생략해도 되지만 가독성을 위해 쓰는 게 좋아.
예시를 보자:
SELECT first_name AS "이름", last_name AS "성", grade AS "성적"
FROM students;
실행 결과:
| 이름 | 성 | 성적 |
|---|---|---|
| Alex | Lin | A |
| Anna | Song | B |
| Otto | Art | A |
여기서 우리는:
- 컬럼 이름을 한글로 더 알아보기 쉽게 바꿨어.
- 쿼리에서
AS로 alias를 썼어.
사장님이나 클라이언트한테 데이터 보여줄 때, 표가 보기 좋게 나오게 하려면 alias가 진짜 꿀팁이야.
이제 전체 이름 뽑는 쿼리도 좀 더 예쁘게 만들어보자.
SELECT first_name || ' ' || last_name AS "전체 이름", grade AS "성적"
FROM students;
실행 결과:
| 전체 이름 | 성적 |
|---|---|
| Alex Lin | A |
| Anna Song | B |
| Otto Art | A |
완벽. 우리가 원하던 대로야.
왜 필요한 컬럼만 뽑아야 할까?
- 성능
수백만 행, 수백 컬럼짜리 테이블에서 SELECT *로 다 뽑으면 몇 분, 심하면 몇 시간 걸릴 수도 있어. 서버 리소스도 엄청 잡아먹고. 필요한 것만 뽑으면 훨씬 효율적이지.
- 가독성
필요한 컬럼만 뽑으면 결과가 훨씬 보기 쉬워. 안 그러면 금요일 저녁에 뉴스 피드 읽는 기분 날걸?
- 실수 줄이기
쿼리에서 다루는 데이터가 적을수록 실수할 확률도 줄어. 특히 그 데이터를 또 가공할 때 더더욱.
뭐 기억해야 할 거?
테이블 alias
테이블 이름이 길면 alias를 쓰는 것도 좋아. 원래 이름이랑 비슷하거나, 내용과 관련된 짧은 이름으로 쓰면 돼.
SELECT sa05.first_name, sa05.course_id
FROM students_archive_2005 AS sa05
이 방법은 테이블 이름이 university_students_enrollments_records처럼 길 때 usr이나 us처럼 줄여서 쓰면 진짜 편해.
특정 컬럼 선택할 때 흔히 하는 실수
컬럼 이름 오타. 컬럼 이름을 잘못 쓰면 이런 에러가 떠:
ERROR: column "lastname" does not exist. 컬럼 이름 제대로 썼는지 꼭 확인하자.이름 충돌. 여러 테이블을 쓸 때는, 컬럼이 어느 테이블 건지 꼭 명시해줘야 해. 예를 들어
students.first_name처럼.SELECT *쓰기 — 초보자들이 자주 빠지는 함정. 물론 편하긴 한데, 큰 프로젝트에서는 진짜 별로야! 꼭 필요한 컬럼만 뽑자.
GO TO FULL VERSION