이 글은 다음 유튜브 영상을 참조해 작성했습니다.
SELECT로 데이터 조회 하기
SELECT statement
- ID가 9인 임직원의 이름과 직군을 알고 싶다
mysql> SELECT name, position FROM employee WHERE 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;
조회하려는 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';
'DATABASE' 카테고리의 다른 글
SQL로 데이터 조회하기! NULL의 의미와 three-valued logic이 무엇인지 배워봅니다! (0) | 2023.02.25 |
---|---|
SQL로 데이터 조회. subquery 다양한 예제, IN, EXISTS, ANY, ALL연산자 (2) (0) | 2023.02.24 |
SQL로 DB에 데이터를 추가(insert)하고 수정(update)하고 삭제(delete)하는 방법 (0) | 2023.02.23 |
SQL의 개념과 SQL로 데이터베이스를 정의하는 법. table생성, 각종 데이터 타입, constraints, 키(key)들을 활용해 DB구축 (2) | 2023.02.21 |
관계형 데이터베이스(relational database)개념 (2) | 2023.02.19 |