[SQL] 4. SELECT 문법
SELECT 문법
- 데이터베이스에 저장된 테이블 데이터를 조회할 때 사용하는 문법
DESCRIBE
- 테이블 오브젝트의 구조를 묘사해주는 명령어
- DESC[RIBE] 테이블명;
mysql> DESCRIBE employees; |
키워드(예약어)
- 문법에서 기능이 예약되어 있는 단어
SELECT : 컬럼의 목록 작성할 수 있다
FROM : 테이블명을 작성할 수 있다
키워드 + 요소 → 절 |
절 + 절 → 문장 |
|
|
mysql> SELECT first_name, hire_date, salary, department_id -> FROM employees; |
mysql> DESCRIBE departments; |
mysql> SELECT department_id, location_id -> FROM departments; |
- <연습> locations 테이블에서 컬럼 2~3개 선택해서 결과를 출력하는 코드를 작성해 보자
mysql> DESC locations; |
mysql> SELECT locations_id, street_address, city -> FROM locations; |
모든 컬럼 출력하기
- SELECT절에 *(Asterisk)기호를 단독으로 작성하면 FROM절 테이블의 모든 컬럼을 순서대로 출력하게 된다
mysql> SELECT * -> FROM departments; |
표현식
- 연산된 결과를 만들어 출력해주는 문법
사칙연산 기호
- 곱셈 → * (다른 요소와 같이 작성되는 경우)
- 덧셈 → +
- 나눗셈 → /
- 뺄셈 → -
mysql> SELECT last_name, salary, 12*salary+100 -> FROM employees; |
연산 우선 순위
() >> *, / >> +, -
- ()의 연산자 우선순위가 *(곱셈)보다 더 높기 때문에 괄호 안의 연산이 제일 먼저 실행된 후 곱셈의 연산이 실행되었다
mysql> SELECT last_name, salary, 12*(salary+100) -> FROM employees; |
NULL
- NULL값은 컬럼에 데이터를 입력하지 않은 경우 입력되는 논리적인 데이터이다
- 숫자, 문자, 날짜 데이터 구분 없이 발생할 수 있다
- NULL값에 대한 연산의 결과는 내용과 상관없이 NULL값이 된다
mysql> SELECT last_name, job_id, salary, commission_pct -> FROM employees; |
- commission_pct 컬럼에는 NULL값이 포함되어 있어 NULL이 연산에 사용된 행의 경우 결과값도 표현식의 내용과는 상관없이 NULL로 출력되는 것을 볼 수 있다
mysql> SELECT last_name, commission_pct, salary*12 + 12*salary*commission_pct -> FROM employees; |
Column alias
- 쿼리의 출력결과에 보여지는 컬럼의 이름을 바꿔 출력하는 문법
- 임시 별명의 문법
컬럼명 [AS] alias
- alias에는 공백, 특수문자를 포함할 수 없다
- AS 키워드는 별도의 추가 기능은 없으며, 생략가능한 키워드이다
- mysql의 경우 alias의 대소문자 형태를 그대로 유지해서 결과로 출력한다
- 다만, 다른 데이터베이스의 경우 대부분 대문자로 변환된 결과를 출력한다
mysql> SELECT last_name AS name, commission_pct comm -> FROM employees; |
컬럼명 [AS] "Alias"
- alias를 ""(큰따옴표)로 묶는 경우 공백이나 특수문자를 포함한 alias값을 사용할 수 있다.
mysql> SELECT last_name AS "last name", commission_pct "comm pct" -> FROM employees; |
DISTINCT
- 출력값의 중복된 데이터를 제거하여 출력해주는 키워드
mysql> SELECT DISTINCT department_id -> FROM employees; |
- DISTINCT 키워드는 SELECT절의 모든 컬럼들에 대해서 일괄적으로 중복값을 제거하며, 모든 컬럼 값의 내용이 동일한 행들은 중복값으로 정리되어 하나씩만 출력된다. 컬럼의 값들 중 하나라도 다른 값이 있는 경우 중복값이 아니게 된다.
mysql> SELECT DISTINCT department_id, job_id -> FROM employees; |
ㅋㅋㅋ ㅠㅠ 자꾸 스펠링 틀려서 오류남
잘 확인하자...
연습문제(p.110)
mysql> SELECT employee_id AS "Emp #", last_name Employee, job_id "Job", hire_date "Hire Date" -> FROM employees; |
+-------+-------------+------------+------------+
| Emp # | Employee | Job | Hire Date |
+-------+-------------+------------+------------+
| 100 | King | AD_PRES | 1987-06-17 |
| 101 | Kochhar | AD_VP | 1989-09-21 |
| 102 | De Haan | AD_VP | 1993-01-13 |
| 103 | Hunold | IT_PROG | 1990-01-03 |
…
mysql> SELECT DISTINCT job_id -> FROM employees; |
+------------+
| job_id |
+------------+
| AC_ACCOUNT |
| AC_MGR |
| AD_ASST |
| AD_PRES |
| AD_VP |
| FI_ACCOUNT |
| FI_MGR |
| HR_REP |
| IT_PROG |
| MK_MAN |
| MK_REP |
| PR_REP |
| PU_CLERK |
| PU_MAN |
| SA_MAN |
| SA_REP |
| SH_CLERK |
| ST_CLERK |
| ST_MAN |
+------------+
19 rows in set (0.00 sec)