[ SELECT statement ]
SELECT attribute(s)
FROM table(s)
[ WHERE condition(s) ]
- ID가 9인 임직원의 이름과 직군을 알고 싶다.
SELECT name, position FROM employee WHERE id = 9;
projection attributes selection condition
=> selection condition 을 통해 선택된 튜플의 값들 중에서
projection attributes 에 의해 지정된 attribute에 대응하는 값들만 가져오게 된다.
- project 2002를 리딩(leading)하고 있는 임직원의 ID와 이름과 직군을 알고싶다.
project 테이블 employee 테이블
SELECT employee.id, employee.name, position
FROM project, employee
WHERE project.id=2002 and project.leader_id = employee.id;
selection condition join condition
** employee 테이블과 project 테이블의 attribute 이름( id, name )이 같아서 각 속성 앞에 테이블 이름을 붙여줌.
* AS 사용하기
- AS는 테이블이나 attribute에 별칭(alias)을 붙일 때 사용한다.
- AS는 생략 가능하다.
SELECT employee.id, employee.name, position
FROM project, employee
WHERE project.id=2002 and project.leader_id = employee.id;
====== AS 사용하면
SELECT E.id, E.name, position
FROM project AS P, employee AS E
WHERE P.id=2002 and P.leader_id = E.id;
결과는 똑같음.
이 때 나온 결과값의 attribute들에 새로운 이름을 붙이고 싶을때도 AS 사용.
SELECT E.id AS leader_id, E.name AS leader_name, position
FROM employee AS E, project AS P
WHERE P.id=2002 and P.leader_id = E.id;
SELECT E.id leader_id, E.name leader_name, position
FROM employee AS E, project AS P
WHERE P.id=2002 and P.leader_id = E.id;
** 생략도 가능
* DISTINCT 사용하기
DISTINCT는 select 결과에서 중복되는 tuples은 제외하고 싶을 때 사용한다.
- 디자이너들이 참여하고 있는 프로젝트들의 ID와 이름을 알고 싶다.
employee works_on (연결고리 테이블) project
SELECT P.id, P.name
FROM project AS P, employee AS E, works_on AS W
WHERE E.position = 'DSGN' and
W.proj_id = P.id and W.empl_id = E.id;
이 때 id의 중복값을 제거하고 싶다면
SELECT DISTINCT P.id, P.name
FROM project AS P, employee AS E, works_on AS W
WHERE E.position = 'DSGN' and W.proj_id = P.id and W.empl_id = E.id;
* LIKE 사용하기
- 이름이 N으로 시작하거나 N으로 끝나는 임직원들의 이름을 알고 싶다.
SELECT name
FROM employee
WHERE name LIKE 'N%' or name LIKE '%N';
0개 이상의 임의의 갯수를 가지는 문자.
- 이름에 NG가 들어가는 임직원들의 이름을 알고 싶다.
SELECT name
FROM employee
WHERE name LIKE '%NG%';
- 이름이 J로 시작하는, 총 네 글자의 이름을 가지는 임직원들의 이름을 알고 싶다.
SELECT name
FROM employee
WHERE name LIKE '
J___
';
* escape 문자와 함께 LIKE 사용하기
- %로 시작하거나 _로 끝나는 프로젝트 이름을 찾고 싶다면?
SELECT name
FROM project
WHERE name LIKE '\%%' or name LIKE '%\_';
백슬래쉬 => 문자 그대로 적용
LIKE : 문자열 pattern matching 에 사용.
reserved character => % : 0개 이상의 임의의 개수를 가지는 문자들을 의미
=> _ : 하나의 문자를 의미
escape character => \ : 예약 문자를 escape시켜서 문자 본연의 문자로 사용하고 싶을 떄 사용.
* (asterisk)
* 는 선택된 tuples의 모든 attributes를 보여주고 싶을 때 사용한다.
- ID가 9인 임직원의 모든 attributes를 알고 싶다.
SELECT * FROM employee WHERE id = 9;
SELECT *
FROM project, employee
WHERE project.id=2002 and project.leader_id = employee.id;
=> 두 테이블에 대한 모든 attributes 표시.
* SELECT without WHERE
테이블에 있는 모든 tuples을 반환한다.
[ 주의사항 ]
1. SELECT로 조회할 때 조건들을 포함해서 조회를 한다면, 이 조건들과 관련된 attributes에 index가 걸려있어야 합니다.
그렇지 않다면 데이터가 많아질수록 조회 속도가 느려집니다.
i.g. SELECT * FROM employee WHERE position = 'dev_back';
=> position 에 대해 index가 걸려있어야 빠른 조회 가능.
2. 이 내용은 MySQL 기준. 다른 RDBMS의 SQL 문법은 조금씩 다를 수 있음.
3. SELECT와 관련하여 대표적으로 중요한 기본기들만! 이외에도 여러 조회 기능들/세부 사항들이 있음.
https://www.youtube.com/watch?v=dTBwgWMUguE&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=5
'Database > MySQL' 카테고리의 다른 글
[데이터베이스(강의)] 7. SQL로 데이터 조회 (NULL, three-valued logic) (0) | 2024.02.05 |
---|---|
[데이터베이스(강의)] 6. SQL로 데이터 조회 (subquery / IN, EXIST, ANY, ALL) (0) | 2024.02.02 |
[데이터베이스(강의)] 4. SQL (Insert / Update / Delete) (0) | 2024.01.30 |
[데이터베이스(강의)] 3. SQL 기본 개념 및 SQL로 데이터베이스 정의 (0) | 2024.01.25 |
[데이터베이스(강의)] 2. 관계형 데이터베이스 (relational database) (0) | 2024.01.25 |