⛏️/Mysql | Oracle

[SQL] 4. SELECT 문법

defyuil 2023. 7. 19. 20:52

SELECT 문법

  • 데이터베이스에 저장된 테이블 데이터를 조회할 때 사용하는 문법

 

DESCRIBE

  • 테이블 오브젝트의 구조를 묘사해주는 명령어
  • DESC[RIBE] 테이블명;
mysql> DESCRIBE employees;

Field-컬럼명/Type-자료형/int-정수

 

 

키워드(예약어)

  • 문법에서 기능이 예약되어 있는 단어

SELECT : 컬럼의 목록 작성할 수 있다

FROM : 테이블명을 작성할 수 있다

 

키워드 +  요소 → 절

절 + 절 → 문장

  • SELECT + 컬럼 목록 → SELECT절
  • FROM + 테이블명 → FROM절
  • SELECT절 + FROM절 → SELECT구문

 

 

 

mysql> SELECT first_name, hire_date, salary, department_id
    -> FROM employees;

irst_name, hire_date, salary, department_id

 

 

mysql> DESCRIBE departments;

 

 

 

mysql> SELECT department_id, location_id
    -> FROM departments;

department_id, location_id

 

 

 

  • <연습> 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;

commission_pct에 AS를 작성하지 않아도 comn이 적용된 모습

 

 

컬럼명 [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)