English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、SELECT SQLクエリからのデータをソートする方法を学びます。
通常、SELECT文を使用してテーブルからデータを取得する場合、結果セットの行は特定の順序に並んでいません。特定の順序で結果セットを並べ替えたい場合は、文の末尾にORDER BY子句を指定することができます。この子句は、プログラムがクエリからのデータをどのようにソートするかを示します。デフォルトのソート順序は昇順です。
ORDER BY子句は、クエリからのデータを昇順または降順にソートするために使用されます。この子句の基本的な文法は以下のように示されます:
SELECT column_list FROM table_name ORDER BY column_name ASC|DESC;
ここでは、column_listその値を取得するデータベースのテーブル名前、年齢、国などの列/のフィールド名前そしてcolumn_name排序する列の名前です。実際の動作方法を示すいくつかの例を見てみましょう。
생성 중에 데이터베이스에 다음과 같은 이름의 테이블이 있습니다.employees테이블이 다음과 같은 기록을 가지고 있습니다:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 5000 | 4 | | 2 | Tony Montana | 2002-07-15 | 6500 | 1 | | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | | 5 | Martin Blank | 2008-06-24 | 5600 | NULL | +--------+--------------+------------+--------+---------+
다음 SQL 문은employees테이블에서 모든 employee를 반환하고emp_name열에 대해 결과 집합을 오름차순 정렬합니다。
SELECT * FROM employees ORDER BY emp_name ASC;
ASC 옵션을 건너뛰고 다음과 같은 문법만 사용할 수 있습니다. 이는 이전 명령과 같은 결과 집합을 반환합니다. SQL은 기본 정렬 순서가 오름차순이므로:
SELECT * FROM employees ORDER BY emp_name;
위 명령을 실행하면, 다음과 같은 출력을 얻게 됩니다:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 5000 | 4 | | 5 | Martin Blank | 2008-06-24 | 5600 | NULL | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 2 | Tony Montana | 2002-07-15 | 6500 | 1 | +--------+--------------+------------+--------+---------+
DESC 옵션을 사용하여 내림차순으로 정렬할 수도 있습니다. 다음 명령은 숫자급여(salary)열의 내림차순 정렬된 결과 집합입니다。
SELECT * FROM employees ORDER BY salary DESC;
이번에는 다음과 같은 결과 집합을 얻게 됩니다:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | | 2 | Tony Montana | 2002-07-15 | 6500 | 1 | | 5 | Martin Blank | 2008-06-24 | 5600 | NULL | | 1 | Ethan Hunt | 2001-05-01 | 5000 | 4 | +--------+--------------+------------+--------+---------+
정렬할 때 여러 열을 지정할 수 있습니다. 그러나, 테이블에 중복 값이 있지 않으면 결과 집합의 변경은 볼 수 없습니다. 그래서让我们找出:
다중 열 정렬을 더 잘 이해하기 위해, 데이터베이스에 다음과 같은 이름의 테이블이 있습니다.Trainees의 테이블에 다음과 같은 기록이 포함되어 있습니다:
+----+------------+------------+-------------+--------+ | id | first_name | last_name | birth_date | gender | +----+------------+------------+-------------+--------+ | 1 | Peter | Parker | 1998-03-04 | M | | 2 | Harry | Potter | 2001-08-30 | M | | 3 | Peter | Pan | 2004-09-19 | M | | 4 | Alice | Kingsleigh | 1999-07-02 | F | | 5 | John | Connor | 2002-01-15 | M | +----+------------+------------+-------------+--------+
그림을 꼼꼼히 살펴보면, 우리는 일부 중복 값을 발견할 수 있습니다. 그러나, 훈련생 Peter Parker와 Peter Pan의 전체 이름은 다르지만 이름이 같습니다.
다음 명령을 실행하면, 이 명령은first_name결과 집합에 대해정렬。
SELECT * FROM trainees ORDER BY first_name;
실행 후에, 다음과 같은 출력을 얻게 됩니다:
+----+------------+------------+-------------+--------+ | id | first_name | last_name | birth_date | gender | +----+------------+------------+-------------+--------+ | 4 | Alice | Kingsleigh | 1999-07-02 | F | | 2 | Harry | Potter | 2001-08-30 | M | | 5 | John | Connor | 2002-01-15 | M | | 1 | Peter | Parker | 1998-03-04 | M | | 3 | Peter | Pan | 2004-09-19 | M | +----+------------+------------+-------------+--------+
이 명령을 실행하면, 이 명령은first_name와last_name결과 집합에 대해정렬。
SELECT * FROM trainees ORDER BY first_name, last_name;
+----+------------+------------+-------------+--------+ | id | first_name | last_name | birth_date | gender | +----+------------+------------+-------------+--------+ | 4 | Alice | Kingsleigh | 1999-07-02 | F | | 2 | Harry | Potter | 2001-08-30 | M | | 5 | John | Connor | 2002-01-15 | M | | 3 | Peter | Pan | 2004-09-19 | M | | 1 | Peter | Parker | 1998-03-04 | M | +----+------------+------------+-------------+--------+
이전 결과 집합과 현재 결과 집합 사이의 차이를 주목했습니까?-이번에는 학습자 'Peter Parker'의 기록이 'Peter Pan'의 기록 뒤에 위치합니다.
두 개의 학습자의 이름이 모두 'Peter'인 경우, 이 두 학습자의last_name열이 두 번째 정렬을 수행합니다. 따라서 'Peter Parker'의 기록이 'Peter Pan'의 기록 뒤에 위치합니다.
주의:여러 정렬 열을 지정했을 때, 결과 집합은 먼저 첫 번째 열에 따라 정렬되고, 그 다음 두 번째 열에 따라 정렬된 목록에 따라 정렬됩니다.