jiiheee's 개발 일지

데이터 가져오기 (select , distinct, Limit, Offset, Order by) 본문

📚 Study/Database

데이터 가져오기 (select , distinct, Limit, Offset, Order by)

◼️ 2023. 10. 26. 15:50

SELECT

데이터베이스에 table을 저장했다면 사용자로부터 원하는 데이터를 가져올 수 있다. 예를 들어서 회사에 있는 모든 직원의 이름을 알고 싶다면 직원 명단 table에서 name이라는 column만 추출해서 보게 된다면 모든 직원의 이름을 알 수 있다. 이처럼 데이블 정보를 가져오기 위해서는 SELECT문을 사용해야 한다. SELECT문으로 데이터를 가져오려면, 최소한 두 가지 정보는 반드시 명시해야 한다. 무엇을 가져올지 그리고 어디에서 가져올지가 그것이다.

number name gender age
1 스폰지밥 21
2 다람이 24
3 징징이 27
4 집게사장 43

위의 테이블은 employee_list이다. 앞서 예시를 들었던 직원들의 이름을 알고 싶다면 아래와 같은 SQL을 작성해야 한다.

SELECT name              # 무엇을 가져올지
FROM employee_list;   # 어디에서 가져올지

 

여러 개의 열을 가져올 때도 똑같은 SELECT문을 사용한다. 다른 점이 있다면, SELECT 키워드 옆에 가져오려는 열 이름을 모두 나열한다는 것이다. 각 열은 콤마(,)로 구분한다.

SELECT name, age
FROM employee_list;

 

모든 열을 가져올 때는 와일드카드 문자(*)를 사용하여 모든 열을 가져올 수 있다.

SELECT *
FROM employee_list;

 

DISTINCT

데이터를 가져올 때 중복되는 레코드가 있을 수 있다. 위 테이블을 예시로 직원들 중에서 나이가 같은 직원이 있다고 가정해 보자. 그런 경우 기존에 배웠던 방법으로 데이터를 출력하게 되면 중복되는 레코드가 발생한다. 이를 방지하기 위해서는 DISTINCT 키워드를 사용하여 중복되는 값을 제거한다.

SELECT DISTINCT age
FROM employee_list;

 

LIMIT & OFFSET

이번에는 첫 번째 레코드나 특정 몇 레코드만 가져오고 싶다면 어떻게 해야 할지 알아보자.

몇 개의 행만 가져오는 것은 가능하지만, 안타깝게도 SQL을 실행하는 환경이 모두 똑같은 문법을 사용하지는 않는다. 아래 SQL은 MySQL에서 사용된다.

[위에서부터 특정 갯수 레코드 가져오는 경우]
SELECT <column 명> 
FROM <table 이름>
LIMIT 3;                        # 위에서 3건의 레코드를 가져옴

[특정 몇 개의 레코드만 가져오는 경우]
SELECT <column 명>
FROM <talbe 이름>
LIMIT 1 OFFSET 2;      # 3행에서 1건의 레코드를 가져옴

※ 여기서 주의할 점은 [특정 몇 개의 레코드만 가져오는 경우] 레코드를 셀 때 0이 기점이기 때문에 offset 0은 1행째, offset 1은 2행째가 된다.

 

ex) 위 코드를  예시로 본다면 LIMIT 1 OFSSET 2이므로 3번 징징이 레코드가 추출되어야 한다.

number name offset
1 스폰지밥 0
2 뚱이 1
3 징징이 2
4 다람이 3

 


 

Order by

가져온 데이터들은 어떤 순서로도 정렬되지 않은 상태로 추출된다. 데이터를 정렬해서 보지 않으면, 대개 테이블에 있는 순서대로 출력되는데, 이 순서는 처음에 테이터가 테이블에 삽입되는 순서이다. 데이터가 나중에 업데이트되거나 삭제되면, 변경된 자리를 DBMS가 어떻게 다시 사용하는지에 따라 순서가 바뀔 수도 있다. 가져온 데이터를 정렬하려면 ORDER BY 절을 사용한다. ORDER BY 뒤에는 하나 이상의 열 이름을 적어 적힌 열을 기준으로 정렬한다.

 

[오름차순 정렬]
SELECT <column 명>
FROM <talbe 명>
ORDER BY <정렬하고자 하는 열>   # ORDER BY ASC로 표기하는 것이 정확하지만 오름차순 정렬이 기본값이기 때문에 잘 사용하지 않는다.

[내림차순 정렬]
SELECT <column 명>
FROM <talbe 명>
ORDER BY DESC <정렬하고자 하는 열>
number name age
1 스폰지밥 24
2 뚱이 26
3 다람이 22
4 징징이 28

위 friend 테이블을 예시로 보자. 만약 위 테이블을 나이순서로 정렬한다면 아래와 같은 SQL을 작성하면 된다.

SELECT *
FROM friend
ORDER BY age    # 나이 순서로 정렬

 

오늘은 데이터를 추출하는 SQL을 배울 수 있었다. 이를 통해서 원하는 데이터만 중복 없이 추출하여 볼 수 있고, 특정 레코드만 추출하여 데이터를 분석할 수 있다는 것을 배웠다. 가끔 SQL 문제를 풀면서 offset 기준이 0이라는 사실을 까먹고 문제를 풀어 오답을 내는 경우가 있었는데 이번 기회에 다시 한번 더 실수하지 않도록 되짚어볼 수 있었다.

 

위 게시글은 「그림으로 배우는 데이터베이스」 및 「SQL in 10 Minutes」 도서를 기반으로 작성하였으며 개인 학습용으로 작성되었습니다.

 

 

**출처:**

 

<도서>

[그림으로 배우는 데이터베이스] (저: [사카가미 코오다이], 역: 양성건 출판사: [영진닷컴])

[SQL in 10 Minutes] (저: [벤 포터], 역:박남혜 출판사: [프로그래밍 인사이트])

'📚 Study > Database' 카테고리의 다른 글

테이블과 SQL  (0) 2023.10.25
데이터베이스의 개념  (0) 2023.10.25