본문 바로가기

DATABASE

SQL로 데이터 조회하기! select를 활용해서 데이터를 읽어오는 기본적인 문법과 관련 키워드 (1)

728x90
반응형
SMALL

이 글은 다음 유튜브 영상을 참조해 작성했습니다.

https://youtu.be/dTBwgWMUguE

SELECT로 데이터 조회 하기

SELECT statement

- ID가 9인 임직원의 이름과 직군을 알고 싶다

mysql> SELECT name, position FROM employee WHERE id = 9;

id가 9인 임직원의 이름과 직군 조회

SELECT statement

SELECT attribute(s)

FROM table(s)

[WHERE condition(s)];

- project 2002를 리딩(leading)하고 있는 임직원의 ID와 이름과 직군을 알고 싶다

mysql> SELECT employee.id, employee.name, position
    -> FROM project, employee
    -> WHERE project.id = 2002 and project.leader_id = employee.id;

project 2002를 리딩(leading)하고 있는 임직원의 ID와 이름과 직군

조회하려는 attribute에 테이블.(attribute)라고 작성한 이유는 조회하는 2개의 테이블에 동일한 attribute이름이 존재하기 때문이다. 때문에 판별을 위해 테이블 이름 명시

 

AS

AS 사용하기

- AS는 테이블이나 attribute에 별칭(alias)을 붙일 때 사용한다

- AS는 생략 가능하다

mysql> SELECT employee.id, employee.name, position
    -> FROM project, employee
    -> WHERE project.id = 2002 and project.leader_id = employee.id;

이 쿼리문을 AS 키워드를 통해 간단하게 만든다면 다음과 같이 만들수 있다.

mysql> SELECT E.id, E.name, position
    -> FROM project AS P, employee AS E
    -> WHERE P.id = 2002 and P.leader_id = E.id;

이 쿼리문의 결과에 대해 명시적으로 바꾸고 싶어 AS문 활용

mysql> SELECT E.id AS leader_id, E.name AS leader_name, position
    -> FROM project AS P, employee AS E
    -> WHERE P.id = 2002 and P.leader_id = E.id;

AS는 생략이 가능하므로 위 쿼리문을 다음과 같이 바꾸어도 같은 결과를 얻을 수 있다.

mysql> SELECT E.id leader_id, E.name leader_name, position
    -> FROM project P, employee E
    -> WHERE P.id = 2002 and P.leader_id = E.id;

 

DISTINCT

DISTINCT 사용하기

- 디자이너들이 참여하고 있는 프로젝트들의 ID 와 이름을 알고 싶다

mysql> SELECT P.id, P.name
    -> FROM employee E, works_on W, project P
    -> WHERE E.position = 'DSGN' and
    ->          E.id = W.empl_id and W.proj_id = P.id;

위 결과화면 캡쳐처럼 중복된 튜플을 제거하고 싶을 때 DISTINCT키워드를 활용해 제거한다.

mysql> SELECT DISTINCT P.id, P.name
    -> FROM employee E, works_on W, project P
    -> WHERE E.position = 'DSGN' and
    ->          E.id = W.empl_id and W.proj_id = P.id;

DISTINCT는 select 결과에서 중복되는 tuples은 제외하고 싶을 때 사용한다

 

LIKE

LIKE 사용하기

- 이름이 N으로 시작하거나 N으로 끝나는 임직원들의 이름을 알고 싶다

mysql> SELECT name
    -> FROM employee
    -> WHERE name LIKE 'N%' or name LIKE '%N';

- 이름에 NG가 들어가는 임직원들의 이름을 알고 싶다

mysql> SELECT name
    -> FROM employee
    -> WHERE name LIKE '%NG%';

- 이름이 J로 시작하는, 총 네 글자의 이름을 가지는 임직원들의 이름을 알고 싶다

mysql> SELECT name
    -> FROM employee
    -> WHERE name LIKE 'J___';

escape문자와 함께 LIKE 사용하기

- %로 시작하거나 _로 끝나는 프로젝트 이름을 찾고 싶다면?

- SELECT name FROM project WHERE name LIKE '\%%' or name LIKE '%\_';

LIKE 정리

항목 설명
LIKE 문자열 pattern matching에 사용
reserved character % 0개 이상의 임의의 개수를 가지는 문자들을 의미
_ 하나의 문자를 의미
escape character \ 예약 문자를 escape시켜서 문자 본연의 문자로 사용하고 싶을 때 사용

 

*(asterisk) 사용하기

- ID가 9인 임직원의 모든 attributes를 알고 싶다

mysql> SELECT *
    -> FROM employee
    -> where id = 9;

*(asterisk)는 선택된 tuples의 모든 attributes를 보여주고 싶을 때 사용한다

 

SELECT without WHERE

모든 임직원의 이름과 생일을 알고 싶다

mysql> SELECT name, birth_date
    -> FROM employee;

테이블에 있는 모든 tuples을 반환한다

 

주의사항

1. SELECT로 조회할 때 조건들을 포함해서 조회를 한다면 이 조건들과 관련된 attributes에 index가 걸려있어야 합니다 그렇지 않다면 데이터가 많아질수록 조회 속도가 느려집니다

i.g. SELECT * FROM employee WHERE position = 'dev_back';

 

728x90
반응형
LIST