수색…
컨텍스트
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