4.1 제한
SQL 쿼리가 너무 많은 데이터를 반환할 것으로 예상되는 경우 미리 최대 수를 제한할 수 있습니다. 결국 테이블에는 수천 또는 수백만 개의 행이 포함될 수 있습니다.
SQL을 사용하면 쿼리 결과의 행 수를 매우 쉽게 제한할 수 있습니다 LIMIT
. 이 키워드는 SQL 쿼리의 맨 끝에서 사용되며 다음과 같습니다.
LIMIT quantity
매장의 제품 목록이 포함된 제품 테이블에 대한 쿼리를 작성해 보겠습니다. 그러나 우리는 매우 성공적인 매장을 가지고 있고 많은 제품을 판매하기 때문에 처음 10줄의 답변만 얻고 싶습니다. 해당 요청은 다음과 같습니다.
SELECT * FROM product
LIMIT 10
그리고 다음 쿼리 결과를 얻습니다.
ID | 이름 | 상표 | 가격 | 세다 |
---|---|---|---|---|
1 | 테이블 | 이케아 | 20.00 | 15 |
2 | 의자 | 이케아 | 5.00 | 45 |
삼 | 소파 | 이케아 | 80.00 | 10 |
4 | 침대 | 이케아 | 75.00 | 10 |
5 | 벽장 | 보쉬 | 125.00 | 15 |
6 | 선반 | 선반 | 25.00 | 114 |
7 | TV | 엘지 | 350.00 | 4 |
8 | 램프 | 엘지 | 15.00 | 100 |
9 | 옷장 | 이케아 | 99.00 | 10 |
10 | 그릇 | 보쉬 | 199.00 | 10 |
이제 처음 5개 행만 요청합니다. 해당 요청은 다음과 같습니다.
SELECT * FROM product
LIMIT 5
다음 쿼리 결과를 얻습니다.
ID | 이름 | 상표 | 가격 | 세다 |
---|---|---|---|---|
1 | 테이블 | 이케아 | 20.00 | 15 |
2 | 의자 | 이케아 | 5.00 | 45 |
삼 | 소파 | 이케아 | 80.00 | 10 |
4 | 침대 | 이케아 | 75.00 | 10 |
5 | 벽장 | 보쉬 | 125.00 | 15 |
4.2 오프셋
지난번에 우리는 서버 응답에서 줄 수를 제한하는 방법을 배웠습니다. 이제 제품 테이블에서 수천 개의 행 대신 처음 10개 행을 가져와서 사용자에게 표시할 수 있습니다. 완벽합니다. 그러나 두 번째 10개 행을 어떻게 표시합니까? 그리고 세 번째?
LIMIT 20
, 또는 라고 쓰면 LIMIT 30
서버가 각각 20행과 30행을 반환하지 않습니까?
이 경우 SQL에는 OFFSET
응답에서 N 줄을 건너뛰도록 서버에 요청할 수 있는 특수 키워드가 있습니다. 이 키워드는 SQL 쿼리의 맨 끝(뒤 LIMIT
)에서 사용되며 다음과 같습니다.
OFFSET quantity
제품 테이블 에 쿼리를 작성 하고 레코드 11에서 15까지 가져오도록 합시다. 즉, 서버에 5개의 행을 반환하도록 요청하고 있지만 먼저 응답의 처음 10개 행을 건너뜁니다. 해당 요청은 다음과 같습니다.
SELECT * FROM product
LIMIT 5
OFFSET 10
다음 쿼리 결과를 얻습니다.
ID | 이름 | 상표 | 가격 | 세다 |
---|---|---|---|---|
열하나 | 안락의자 | 보쉬 | 44.00 | 8 |
12 | 화분 | 스마트플라워 | 99.00 | 9 |
13 | 서다 | 이케아 | 100.00 | 10 |
서버는 3개의 행만 반환했으며 이는 우리 테이블에 총 13개의 행이 있음을 의미합니다. 서버는 처음 10개를 건너뛰고 다음 5개를 반환했습니다.
4.3 고유 항목 선택
또 다른 유용한 키워드는 입니다 DISTINCT
. 테이블에 중복 레코드가 있고 중복을 제거하려는 경우에 사용됩니다.
우리 테이블에서 중복은 어디에서 오는가? 테이블에 중복이 없을 수도 있지만 쿼리 결과로 보면 쉽습니다. 우리가 판매하는 모든 제품의 브랜드를 반환하는 쿼리를 작성해 보겠습니다. 해당 요청은 다음과 같습니다.
SELECT brand FROM product
다음 쿼리 결과를 얻습니다.
상표 |
---|
이케아 |
이케아 |
이케아 |
이케아 |
보쉬 |
보쉬 |
엘지 |
엘지 |
이케아 |
보쉬 |
보쉬 |
스마트플라워 |
이케아 |
이 테이블에 중복 행이 있음을 쉽게 알 수 있습니다. 중복이 없는지 확인하고 키워드를 사용해야 합니다 DISTINCT
. 수정된 요청은 다음과 같습니다.
SELECT DISTINCT brand
FROM product
다음 쿼리 결과를 얻습니다.
상표 |
---|
이케아 |
보쉬 |
엘지 |
스마트플라워 |
훨씬 나아졌습니다. 안 그래? ;)
4.4 주문 기준
그리고 마침내 우리는 정렬 에 도달했습니다 . 쿼리 결과를 정렬하려면 키워드를 사용해야 합니다 ORDER BY
. 기술적으로 이것은 두 단어이지만 본질은 중요하지 않습니다. 두 단어, 하나의 연산자.
키워드 뒤에 작성해야 WHERE
하지만 LIMIT
and 앞에 작성해야 합니다 OFFSET
. ORDER BY
뒤에 작성하면 LIMIT
SQL 서버는 단순히 오류를 반환합니다.
일반적으로 이 연산자는 다음과 같습니다.
ORDER BY column order
여기서 column은 테이블/정렬 결과의 열 이름입니다. 그리고 순서는 정렬 순서입니다.
정렬 순서는 세 가지 유형일 수 있습니다.
ASC
(오름차순에서) - 오름차순;DESC
(내림차순에서) - 내림차순;- 지정되지 않음 - 사용됨
ASC
가격을 기준으로 오름차순으로 정렬된 제품 목록을 반환하는 쿼리를 작성해 보겠습니다. 해당 요청은 다음과 같습니다.
SELECT * FROM product
ORDER BY price ASC
LIMIT 10
다음 쿼리 결과를 얻습니다.
ID | 이름 | 상표 | 가격 | 세다 |
---|---|---|---|---|
2 | 의자 | 이케아 | 5.00 | 45 |
8 | 램프 | 엘지 | 15.00 | 100 |
1 | 테이블 | 이케아 | 20.00 | 15 |
6 | 선반 | 보쉬 | 25.00 | 114 |
열하나 | 안락의자 | 보쉬 | 44.00 | 8 |
4 | 침대 | 이케아 | 75.00 | 10 |
삼 | 소파 | 이케아 | 80.00 | 10 |
12 | 화분 | 스마트플라워 | 99.00 | 9 |
9 | 옷장 | 이케아 | 99.00 | 10 |
13 | 서다 | 이케아 | 100.00 | 10 |
정렬 순서를 지정하지 않으면 동일한 결과를 얻게 됩니다. 단어를 건너뛰게 됩니다 ASC
.
4.5 여러 열에 걸친 ORDER BY
연산자를 사용 ORDER BY
하면 결과를 여러 열로 정렬할 수 있습니다. 이는 첫 번째 열에 중복 요소가 많을 때 매우 유용할 수 있습니다. 이 연산자의 일반적인 형식은 다음과 같습니다.
ORDER BY column 1 order 1, column 2 order 2, column 3 order 3
즉, 첫 번째 열로 정렬한 후 근처에 동일한 값이 여러 개 있는 경우 두 번째 열로 정렬되는 식입니다.
제품을 브랜드별로 정렬하고 동일한 브랜드의 제품을 번호 내림차순으로 정렬하는 쿼리를 작성해 보겠습니다. 해당 요청은 다음과 같습니다.
SELECT * FROM product
ORDER BY brand ASC, count
DESC
다음 쿼리 결과를 얻습니다.
ID | 이름 | 상표 | 가격 | 세다 |
---|---|---|---|---|
6 | 선반 | 보쉬 | 25.00 | 114 |
5 | 벽장 | 보쉬 | 125.00 | 15 |
10 | 그릇 | 보쉬 | 199.00 | 10 |
열하나 | 안락의자 | 보쉬 | 44.00 | 8 |
2 | 의자 | 이케아 | 5.00 | 45 |
1 | 테이블 | 이케아 | 20.00 | 15 |
9 | 옷장 | 이케아 | 99.00 | 10 |
13 | 서다 | 이케아 | 100.00 | 10 |
4 | 침대 | 이케아 | 75.00 | 10 |
삼 | 소파 | 이케아 | 80.00 | 10 |
8 | 램프 | 엘지 | 15.00 | 100 |
7 | TV | 엘지 | 350.00 | 4 |
12 | 화분 | 스마트플라워 | 99.00 | 9 |
테이블을 자세히 살펴보십시오. 해당 행은 브랜드 이름(알파벳순)별로 정렬되고 브랜드 이름이 동일한 행은 제품 번호별로 내림차순(마지막 열)으로 정렬됩니다.
GO TO FULL VERSION