수색…
컨텍스트
SELECT
의 절에는 특정 순서가 있습니다.
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ...
ORDER BY ... -- goes here
LIMIT ... OFFSET ...;
( SELECT ... ) UNION ( SELECT ... ) ORDER BY ... -- for ordering the result of the UNION.
SELECT ... GROUP_CONCAT(DISTINCT x ORDER BY ... SEPARATOR ...) ...
ALTER TABLE ... ORDER BY ... -- probably useful only for MyISAM; not for InnoDB
기본
ORDER BY x
x
는 모든 데이터 유형이 될 수 있습니다.
-
NULLs
은NULLs
아닌 값 앞에옵니다. - 기본값은
ASC
(가장 낮은ASC
가장 높은 것) - 문자열 (
VARCHAR
등)은 선언의COLLATION
에 따라 정렬됩니다. -
ENUMs
은 문자열의 선언 순서에 따라 정렬됩니다.
상승 하강
ORDER BY x ASC -- same as default
ORDER BY x DESC -- highest to lowest
ORDER BY lastname, firstname -- typical name sorting; using two columns
ORDER BY submit_date DESC -- latest first
ORDER BY submit_date DESC, id ASC -- latest first, but fully specifying order.
-
ASC
=ASCENDING
,DESC
=DESCENDING
-
DESC
경우에도NULLs
이 먼저옵니다. - 위의 예에서
INDEX(x)
,INDEX(lastname, firstname)
,INDEX(submit_date)
는 성능을 크게 향상시킬 수 있습니다.
그러나 ... 마지막 예제에서와 같이 ASC
와 DESC
혼합하면 복합 색인을 사용하여 이익을 얻을 수 없습니다. INDEX(submit_date DESC, id ASC)
도움말도 - " DESC
"는 INDEX
선언에서 구문 적으로 인식되지만 무시됩니다.
몇 가지 트릭
ORDER BY FIND_IN_SET(card_type, "MASTER-CARD,VISA,DISCOVER") -- sort 'MASTER-CARD' first.
ORDER BY x IS NULL, x -- order by `x`, but put `NULLs` last.
주문 주문
SELECT * FROM some_table WHERE id IN (118, 17, 113, 23, 72)
ORDER BY FIELD(id, 118, 17, 113, 23, 72);
지정된 순서로 ID를 돌려줍니다.
신분증 | ... |
---|---|
118 | ... |
17 | ... |
113 | ... |
23 | ... |
72 | ... |
ID가 이미 소트되어있어, 행을 취득 할 필요가있는 경우에 도움이됩니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow