소개
SELECT 문은 하나 이상의 테이블에서 데이터를 고른다.
SELECT
select_list
FROM
table_name;
SELECT 절에서 콤마 , 로 구분하여 테이블 컬럼 리스트를 작성한다.FROM 절에서 테이블 이름을 특정한다.SELECT 문을 평가할 때, DB 시스템은
FROM 절을 먼저 평가한다.SELECT 절을 평가한다.세미콜론 ; 은 쿼리의 일부가 아니다.
네가 만약 테이블의 모든 컬럼 데이타를 쿼리하고 싶다면
* 연산자를 사용하면 된다.SELECT * FROM table_name;
SQL은 케이스를 구분하지 않는다.
SELECT 와 select 키워드는 같은 뜻이다.예시
모든 컬럼 데이터 선택하기
SELECT 문을 사용하여 employees 테이블의 모든 컬럼과 row의 데이터를 가져오는 것이다.SELECT * FROM employees;
SELECT * 는 select star로 읽힌다.특정 컬럼들에서 데이터 선택하기
SELECT 문의 SELECT 절 뒤에 컬럼 리스트를 특정할 필요가 있다.employees 테이블의 employee id, first name, last name, hire date 모든 row를 선택한다.SELECT
employee_id,
first_name,
last_name,
hire_date
FROM
employees;
간단한 계산 수행하기
SELECT 문을 사용하여 first name, last name, salary, new salary를 가져오는 것이다.SELECT
first_name,
last_name,
salary,
salary * 1.05
FROM
employees;
salary * 1.05 식은 모든 고용자들의 급여에 5%를 추가한다.AS 키워드를 사용하여 아래와 같이 작성할 수 있다.expression AS column_alias
SELECT 문에서 new_salary 컬럼 alias로 사용되고 salary * 1.05 가 할당된다.SELECT
first_name,
last_name,
salary,
salary * 1.05 AS new_salary
FROM
employees;
정리
SELECT 문을 사용하자FROM 절에 테이블 이름을 특정하고 SELECT 절에 컬럼 리스트를 작성하자SELECT * 는 테이블의 모든 컬럼을 SELECT 하는 약어이다.소개
ORDER BY 는 SELECT 문의 선택 절이다.
ORDER BY 절을 사용하여 SELECT 절에서 반환하는 행을 오름차순 혹은 내림차순으로 정렬할 수 있다.SELECT
select_list
FROM
table_name
ORDER BY
sort_expression [ASC | DESC]
ORDER BY 절을 FROM 절 뒤에 배치한다. DB는 SELECT 문을 ORDER BY * 절을 FROM > SELECT > ORDER BY 의 순서대로 평가할 것이다.ORDER BY 절 뒤에 정렬 식을 특정한다. 정렬식은 정렬 기준으로 특정된다.ASC 옵션은 오름차순으로, DESC 옵션은 내림 차순으로 정렬한다.ORDER BY 는 ASC 옵션을 default 로 사용함에 주목하자.ORDER BY 절은 또한 여러개의 식으로 정렬될 수 있다. 이 경우 콤마 , 로 두 식을 구분해야 한다.SELECT
select_list
FROM
table_name
ORDER BY
sort_expression_1 [ASC | DESC]
sort_expression_2 [ASC | DESC]
ORDER BY 절은 sort_expression_1 로 먼저 정렬된다. 그 다음 sort_expression_2 로 정렬된다.ORDER BY 절을 특정하지 않는다면, SELECT 문은 결과 셋을 정렬하지 않는다. 이는 결과의 row들이 특정 순서를 가지지 않는다는 뜻이다.예시
하나의 컬럼 정렬하기
SELECT 문을 사용하여 employee id, first name, last name, hire date, salary 등을 employees 테이블에서 가져오는 것이다.SELECT
employee_id,
first_name,
last_name,
hire_date,
salary
FROM
employees;
+-------------+-------------+-------------+------------+----------+
| employee_id | first_name | last_name | hire_date | salary |
+-------------+-------------+-------------+------------+----------+
| 100 | Steven | King | 1987-06-17 | 24000.00 |
| 101 | Neena | Kochhar | 1989-09-21 | 17000.00 |
| 102 | Lex | De Haan | 1993-01-13 | 17000.00 |
| 103 | Alexander | Hunold | 1990-01-03 | 9000.00 |
| 104 | Bruce | Ernst | 1991-05-21 | 6000.00 |
| 105 | David | Austin | 1997-06-25 | 4800.00 |
| 106 | Valli | Pataballa | 1998-02-05 | 4800.00 |
| 107 | Diana | Lorentz | 1999-02-07 | 4200.00 |
| 108 | Nancy | Greenberg | 1994-08-17 | 12000.00 |
| 109 | Daniel | Faviet | 1994-08-16 | 9000.00 |
| 110 | John | Chen | 1997-09-28 | 8200.00 |
...
ORDER BY 절을 사용하여 고용인들의 이름으로 정렬한다. (오름차순)SELECT
employee_id,
first_name,
last_name,
hire_date,
salary
FROM
employees
ORDER BY
first_name;
+-------------+-------------+-------------+------------+----------+
| employee_id | first_name | last_name | hire_date | salary |
+-------------+-------------+-------------+------------+----------+
| 121 | Adam | Fripp | 1997-04-10 | 8200.00 |
| 115 | Alexander | Khoo | 1995-05-18 | 3100.00 |
| 103 | Alexander | Hunold | 1990-01-03 | 9000.00 |
| 193 | Britney | Everett | 1997-03-03 | 3900.00 |
| 104 | Bruce | Ernst | 1991-05-21 | 6000.00 |
| 179 | Charles | Johnson | 2000-01-04 | 6200.00 |
| 109 | Daniel | Faviet | 1994-08-16 | 9000.00 |
| 105 | David | Austin | 1997-06-25 | 4800.00 |
| 114 | Den | Raphaely | 1994-12-07 | 11000.00 |
| 107 | Diana | Lorentz | 1999-02-07 | 4200.00 |
...
ORDER BY 는 first_name 컬럼의 값을 정렬한다.여러 컬럼 값 정렬하기
ORDER BY 절을 사용해 이름을 오름차순으로 정렬하고 성을 내림차순으로 정렬한 것이다.SELECT
employee_id,
first_name,
last_name,
hire_date,
salary
FROM
employees
ORDER BY
first_nanem
last_nane DESC;
+-------------+-------------+-------------+------------+----------+
| employee_id | first_name | last_name | hire_date | salary |
+-------------+-------------+-------------+------------+----------+
| 121 | Adam | Fripp | 1997-04-10 | 8200.00 |
| 115 | Alexander | Khoo | 1995-05-18 | 3100.00 |
| 103 | Alexander | Hunold | 1990-01-03 | 9000.00 |
| 193 | Britney | Everett | 1997-03-03 | 3900.00 |
| 104 | Bruce | Ernst | 1991-05-21 | 6000.00 |
| 179 | Charles | Johnson | 2000-01-04 | 6200.00 |
| 109 | Daniel | Faviet | 1994-08-16 | 9000.00 |
| 105 | David | Austin | 1997-06-25 | 4800.00 |
| 114 | Den | Raphaely | 1994-12-07 | 11000.00 |
| 107 | Diana | Lorentz | 1999-02-07 | 4200.00 |
| 118 | Guy | Himuro | 1998-11-15 | 2600.00 |
...
ORDER BY 절은 이름을 오름차순으로 정렬 한 뒤, 성을 기준으로 내림차순 정렬한다.Alexander Khoo 와 Alexander Hunold 의 순서가 바뀐 것에 주목하자수 컬럼의 값 정렬하기
ORDER BY 절을 사용하여 임금을 내림차순으로 정렬한 것이다.SELECT
employee_id,
first_name,
last_name,
hire_Date,
salary
FROM
employees
ORDER BY
salary DESC;
+-------------+-------------+-------------+------------+----------+
| employee_id | first_name | last_name | hire_date | salary |
+-------------+-------------+-------------+------------+----------+
| 100 | Steven | King | 1987-06-17 | 24000.00 |
| 101 | Neena | Kochhar | 1989-09-21 | 17000.00 |
| 102 | Lex | De Haan | 1993-01-13 | 17000.00 |
| 145 | John | Russell | 1996-10-01 | 14000.00 |
| 146 | Karen | Partners | 1997-01-05 | 13500.00 |
| 201 | Michael | Hartstein | 1996-02-17 | 13000.00 |
| 205 | Shelley | Higgins | 1994-06-07 | 12000.00 |
| 108 | Nancy | Greenberg | 1994-08-17 | 12000.00 |
| 114 | Den | Raphaely | 1994-12-07 | 11000.00 |
...
날짜 정렬하기
ORDER BY 절을 사용하여 날짜 정렬도 가능하다.ORDER BY 절을 사용하여 hire_date 기준으로 정렬한 것이다.SELECT
employee_id,
first_name,
last_name,
hire_date,
salary
FROM
employees
ORDER BY
hire_date;
+-------------+-------------+-------------+------------+----------+
| employee_id | first_name | last_name | hire_date | salary |
+-------------+-------------+-------------+------------+----------+
| 100 | Steven | King | 1987-06-17 | 24000.00 |
| 200 | Jennifer | Whalen | 1987-09-17 | 4400.00 |
| 101 | Neena | Kochhar | 1989-09-21 | 17000.00 |
| 103 | Alexander | Hunold | 1990-01-03 | 9000.00 |
| 104 | Bruce | Ernst | 1991-05-21 | 6000.00 |
| 102 | Lex | De Haan | 1993-01-13 | 17000.00 |
| 203 | Susan | Mavris | 1994-06-07 | 6500.00 |
| 204 | Hermann | Baer | 1994-06-07 | 10000.00 |
...
SELECT
employee_id,
first_name,
last_name,
hire_date,
salary
FROM
employees
ORDER BY
hire_date DESC;
정리
SELECT 절에서 반환된 row들을 정렬하기 위해서 ORDER BY 절을 사용하자ASC , 내림차순은 DESC 옵션을 사용해 정렬하자소개
결과 셋에서 중복되는 row를 제거하기 위해서 DISTINCT 연산자를 사용하자
SELECT DISTINCT
column1, column2, ...
FROM
table1;
DISTINCT 연산자 뒤에 컬럼을 사용하면, DISTINCT 연산자는 컬럼의 값들을 중복 평가에 사용한다.DISTINCT 는 그 컬럼들의 값들의 조합을 중복 평가에 사용한다.
DISTINCT는 결과 셋에서 중복을 제거할 뿐이지, 테이블에서 중복을 삭제하지는 않는다.
만일 두개의 컬럼을 고르면서 하나의 컬럼에 대해서만 중복 제거를 하고 싶다면, GROUP BY 문을 사용하자
예시
한개의 컬럼에 대한 연산
employees 테이블에서 임금 컬럼의 데이터를 가져온 뒤 내림차순으로 정렬한 것이다.SELECT
salary
FROM
employees
ORDER BY salary DESC;
+----------+
| salary |
+----------+
| 24000.00 |
| 17000.00 |
| 17000.00 |
| 14000.00 |
| 13500.00 |
| 13000.00 |
| 12000.00 |
| 12000.00 |
| 11000.00 |
| 10000.00 |
| 9000.00 |
| 9000.00 |
...
DISTINCT 연산자를 사용해 유니크 값을 찾아낸다.SELECT
DISTINCT salary
FROM
employees
ORDER BY salary DESC;
+----------+
| salary |
+----------+
| 24000.00 |
| 17000.00 |
| 14000.00 |
| 13500.00 |
| 13000.00 |
| 12000.00 |
| 11000.00 |
| 10000.00 |
| 9000.00 |
여러 컬럼에서의 연산
employees 테이블에서 가져온다.SELECT
job_id,
salary
FROM
employees
ORDER BY
job_id,
salary DESC;
+--------+----------+
| job_id | salary |
+--------+----------+
| 1 | 8300.00 |
| 2 | 12000.00 |
| 3 | 4400.00 |
| 4 | 24000.00 |
| 5 | 17000.00 |
| 5 | 17000.00 |
| 6 | 9000.00 |
| 6 | 8200.00 |
...
DISTINCT 연산자를 사용해 job id와 salary 중복을 제거한다.SELECT DISTINCT
job_id,
salary
FROM
employees
ORDER BY
job_id,
salary DESC;
+--------+----------+
| job_id | salary |
+--------+----------+
| 1 | 8300.00 |
| 2 | 12000.00 |
| 3 | 4400.00 |
| 4 | 24000.00 |
| 5 | 17000.00 |
| 6 | 9000.00 |
| 6 | 8200.00 |
...
DISTINCT 연산자를 job_id 와 salary 둘에 적용했기 때문이다. 이렇게 되면 job_id 의 중복이 아니라, job_id salary 두 개 모두 중복되는 것만 제거한다.NULL에 관하여
NULL은 unknown이나 missing data를 의미한다.NULL은 그 어떤것과도 같지 않다. 심지어는 자기 자신과도 같지 않다. 아래 표현식은 unknown이나 NULL 을 반환할 것이다.NULL=NULL
DISTINCT 연산자는 모든 NULL 을 동일하게 취급한다. 그러므로, DISTINCT 연산자는 결과 셋에서 딱 하나의 NULL 만 남길 것이다.이 행위는 DB 제품에 따라 달라질 수 있다.
SELECT DISTINCT phone_number
FROM emplyees
ORDER BY phone_number;
+--------------+
| phone_number |
+--------------+
| NULL |
| 515.123.4444 |
| 515.123.4567 |
| 515.123.4568 |
| 515.123.4569 |
| 515.123.5555 |
...
NULL 만 반환되는 점에 주목하자정리
DISTINCT 연산자를 사용하자참고 링크: https://www.sqltutorial.org/