SQL

정하윤·2023년 1월 25일
0

SQL

  • 관계형 데이터베이스의 서버와 정보를 주고 받을 때 사용하는 언어
  • 기본적으로 대소문자를 구분하지 않는다.
  • 문법의 구분을 위해서 키워드를 대문자로 표현

SELECT 구문

  • 데이터를 조회할 때 사용하는 문법

키워드(예약어)

  • SELECT : 테이블의 구조에서 출력할 컬럼, 표현식의 목록 작성
  • FROM : 데이터를 조회할 테이블을 정하는 키워드

키워드 + 요소 → 절

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

절 + 절 → 구문

  • SELECT절 + FROM절 → SELECT 구문

mysql>use hr;


Database changed

mysql>showtables;


+------------------+

| Tables_in_hr     |

+------------------+

| countries        |

| departments      |

| emp_details_view |

| employees        |

| job_history      |

| jobs             |

| locations        |

| regions          |

+------------------+

8 rows in set (0.00 sec)

테이블 구조조회하기

  • 컬럼의 목록과 데이터타입 다른 속성값들을 조회할 수 있다.

mysql>DESCRIBE employees;


+----------------+--------------+------+-----+---------+-------+

| Field          | Type         | Null | Key | Default | Extra |

+----------------+--------------+------+-----+---------+-------+

| employee_id    | int unsigned | NO   | PRI | NULL    |       |

| first_name     | varchar(20)  | YES  |     | NULL    |       |

| last_name      | varchar(25)  | NO   |     | NULL    |       |

| email          | varchar(25)  | NO   |     | NULL    |       |

| phone_number   | varchar(20)  | YES  |     | NULL    |       |

| hire_date      | date         | NO   |     | NULL    |       |

| job_id         | varchar(10)  | NO   | MUL | NULL    |       |

| salary         | decimal(8,2) | NO   |     | NULL    |       |

| commission_pct | decimal(2,2) | YES  |     | NULL    |       |

| manager_id     | int unsigned | YES  | MUL | NULL    |       |

| department_id  | int unsigned | YES  | MUL | NULL    |       |

+----------------+--------------+------+-----+---------+-------+

11 rows in set (0.00 sec)

  • 줄바꿈은 필수는 아니지만 보통 코드의 가독성을 위해서 절단위로 줄바꿈을 한다.
  • SELECT 구문의 끝에는 세미콜론 기호로 닫아준다.
  • SELECT절에는 출력을 원하는 컬럼의 목록FROM절에는 해당 데이터가 저장된 테이블의 이름을 작성한다.

mysql>SELECTemployee_id, last_name, salary    ->FROMemployees;


+-------------+-------------+----------+

| employee_id | last_name   | salary   |

+-------------+-------------+----------+

|         100 | King        | 24000.00 |

|         101 | Kochhar     | 17000.00 |

|         102 | De Haan     | 17000.00 |

|         103 | Hunold      |  9000.00 |

|         104 | Ernst       |  6000.00 |

|         105 | Austin      |  4800.00 |

|         106 | Pataballa   |  4800.00 |

|         107 | Lorentz     |  4200.00 |

|         108 | Greenberg   | 12000.00 |

|         109 | Faviet      |  9000.00 |


찾고자하는 정보 출력

mysql>DESCRIBEdepartments;


+-----------------+--------------+------+-----+---------+-------+

| Field           | Type         | Null | Key | Default | Extra |

+-----------------+--------------+------+-----+---------+-------+

| department_id   | int unsigned | NO   | PRI | NULL    |       |

| department_name | varchar(30)  | NO   |     | NULL    |       |

| manager_id      | int unsigned | YES  | MUL | NULL    |       |

| location_id     | int unsigned | YES  | MUL | NULL    |       |

+-----------------+--------------+------+-----+---------+-------+

4 rows in set (0.00 sec)

  • 테이블의 컬럼 순서와는 상관없이 SELECT절의 컬럼 순서에 맞춰 결과값이 출력된다.
    -department의 내용 출력

mysql>SELECTdepartment_name, department_id,    -> manager_id, location_id    ->FROMdepartments;


+----------------------+---------------+------------+-------------+

| department_name      | department_id | manager_id | location_id |

+----------------------+---------------+------------+-------------+

| Administration       |            10 |        200 |        1700 |

| Marketing            |            20 |        201 |        1800 |

| Purchasing           |            30 |        114 |        1700 |

| Human Resources      |            40 |        203 |        2400 |

| Shipping             |            50 |        121 |        1500 |

  • SELECT 절에 * 기호가 단독으로 사용되는 경우 FROM 절 테이블의 모든 컬럼값들을 출력하는 식으로 동작한다.
    -department의 세부 사항 출력된다.

mysql>SELECT*    ->FROMdepartments;


+---------------+----------------------+------------+-------------+

| department_id | department_name      | manager_id | location_id |

+---------------+----------------------+------------+-------------+

|            10 | Administration       |        200 |        1700 |

|            20 | Marketing            |        201 |        1800 |

|            30 | Purchasing           |        114 |        1700 |

|            40 | Human Resources      |        203 |        2400 |

|            50 | Shipping             |        121 |        1500 |

표현식(expression)

  • 관계형 데이터베이스에서는 데이터의 정합성을 위해 연산에 사용되는 베이스 컬럼만 테이블에 저장하고 이를 활용하여 연산되는 값들은 표현식이나 기타 함수등을 활용하여 사용자에게 연산된 결과를 조회 때마다 만들어서 돌려주게 된다.
  • 표현식은 기본적으로 산수의 사칙연산을 활용한 수식을 사용할 수 있게 해주는 문법이다.
  • : 다른 숫자나 컬럼의 값들과 조합하여 사용되는 경우 곱셈의 기호로써 사용되는 것/ : 나눗셈+ : 덧셈: 뺄셈
  • 사칙연산의 연산자 우선순위() > *, / > +, -

mysql>SELECTlast_name, salary,12*salary+100    ->FROMemployees;


+-------------+----------+---------------+

| last_name   | salary   | 12*salary+100 |

+-------------+----------+---------------+

| King        | 24000.00 |     288100.00 |

| Kochhar     | 17000.00 |     204100.00 |

| De Haan     | 17000.00 |     204100.00 |

| Hunold      |  9000.00 |     108100.00 |

  • 테이블의 컬럼과는 상관없는 연산도 가능.

mysql>SELECTemployee_id, 1+1    ->FROMemployees;


+-------------+-----+

| employee_id | 1+1 |

+-------------+-----+

|         178 |   2 |

|         200 |   2 |

|         201 |   2 |

  • mysql에서는 테이블의 데이터를 사용하지 않는 표현식의 경우 FROM절을 작성하지 않아도 결과를 출력해준다.

mysql>SELECT1+1;


+-----+

| 1+1 |

+-----+

|   2 |

+-----+

1 row in set (0.00 sec)

NULL

  • 컬럼의 값을 입력하지 않는 경우에 입력되는 논리적인 데이터값.
  • 숫자 0, 문자열 ' '과는 전혀 다른 의미의 데이터로 구분해서 봐둘 것

mysql>SELECTlast_name, job_id, salary, commission_pct    ->FROMemployees;


+-------------+------------+----------+----------------+

| last_name   | job_id     | salary   | commission_pct |

+-------------+------------+----------+----------------+

| King        | AD_PRES    | 24000.00 |           NULL |

| Kochhar     | AD_VP      | 17000.00 |           NULL |

| De Haan     | AD_VP      | 17000.00 |           NULL |

| Hunold      | IT_PROG    |  9000.00 |           NULL |

| Russell     | SA_MAN     | 14000.00 |           0.40 |

| Partners    | SA_MAN     | 13500.00 |           0.30 |

| Errazuriz   | SA_MAN     | 12000.00 |           0.30 |

| Cambrault   | SA_MAN     | 11000.00 |           0.30 |

| Zlotkey     | SA_MAN     | 10500.00 |           0.20 |

mysql>SELECTlast_name, 12salarycommission_pct    ->FROMemployees;


+-------------+--------------------------+

| last_name   | 12salarycommission_pct |

+-------------+--------------------------+

| King        |                     NULL |

| Kochhar     |                     NULL |

| De Haan     |                     NULL |

| Hunold      |                     NULL |

| Russell     |               67200.0000 |

| Partners    |               48600.0000 |

| Errazuriz   |               43200.0000 |

| Cambrault   |               39600.0000 |

| Zlotkey     |               25200.0000 |

  • 표현식의 내용과는 상관없이 표현식의 컬럼들 중 NULL값을 가지고 있는 행이 있는 경우 해당 행은 결과가 NULL로 출력된다.

mysql>SELECTlast_name, commission_pct,12salary + 12salary*commission_pct    ->FROMemployees;


+-------------+----------------+--------------------------------------+

| last_name   | commission_pct | 12salary + 12salary*commission_pct |

+-------------+----------------+--------------------------------------+

| King        |           NULL |                                 NULL |

| Kochhar     |           NULL |                                 NULL |

| De Haan     |           NULL |                                 NULL |

| Hunold      |           NULL |                                 NULL |

| Russell     |           0.40 |                          235200.0000 |

| Partners    |           0.30 |                          210600.0000 |

| Errazuriz   |           0.30 |                          187200.0000 |

| Cambrault   |           0.30 |                          171600.0000 |

| Zlotkey     |           0.20 |                          151200.0000 |

column alias

  • 쿼리 결과를 출력 할 때 컬럼에 임시 별명으로 이름을 바꿔 출력해주는 문법
  • column alias는 해당 구문이 동작하는 동안에만 유지되는 별명이다.
  • AS 키워드는 생략가능하며 특별한 기능은 없음.

mysql>SELECTlast_nameASname, commission_pctcomm    ->FROMemployees;


+-------------+------+

| name        | comm |

+-------------+------+

| King        | NULL |

| Kochhar     | NULL |

| De Haan     | NULL |

| Hunold      | NULL |

  • 기본 형태의 column alias는 공백을 포함할 수 없다.

mysql>SELECTlast_namelast name, salary    ->FROMemployees;


ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'name, salary

FROM employees' at line 1

  • column alias 작성 시 공백이나 기타 문자를 포함하는 경우 문자열들을 ""(큰따옴표) 기호로 묶어서 작성한다.

mysql>SELECTlast_nameName, salary*12"Annual Salary"    ->FROMemployees;


+-------------+---------------+

| Name        | Annual Salary |

+-------------+---------------+

| King        |     288000.00 |

| Kochhar     |     204000.00 |

| De Haan     |     204000.00 |

| Hunold      |     108000.00 |

0개의 댓글