[DBMS] 03. Single Table Query
30 Aug 2023- 한양대학교 컴퓨터소프트웨어학부 정형수 교수님의 2022년도 데이터베이스시스템및응용 강의를 듣고 정리한 내용임을 밝힙니다.
- 내용에 오류가 있을 수 있으며, 발견 시 댓글로 알려주시면 감사하겠습니다.
3. Single Table Query
- 하나의 테이블에 대해 사용가능한 쿼리를 알아보자
SFW Query
Select, From, Where로 구성된 쿼리를 약자를 따서 SFW 쿼리라고 한다.
SELECT <attributes>
FROM <tables>
WHERE <conditions>
- SELECT : 어떤 속성을 고를 것인지
- FROM : 어떤 테이블에서 가져올 것인지
- WHERE : 어떤 조건을 만족하는 튜플을 가져올 것인지 SFW 쿼리에는 Selection과 Projection 연산이 필요하다. where문에서 어떤 조건을 만족하는 튜플을 가져오는 것을 Selection 연산이라고 하고, select문에서 어떤 속성을 고르는 것을 Projection 연산이라고 한다.
위 이미지처럼 이 두 연산을 합치면 또 하나의 새로운 테이블이 만들어진다. 즉, SFW 쿼리는 Input Schema에서 Output Schema를 만들어내는 함수라고 생각할 수 있다. 예시를 하나 생각해보자, 이름이 ‘브리기테’인 학생들의 이름과 학번을 가져오는 쿼리를 생각해보자. 학생 테이블이 Student(Sid, Sname, Major) 라고 생각하면 다음과 같은 쿼리로 나타낼 수 있다.
SELECT Sname, Sid
FROM Student
WHERE Sname = '브리기테';
이때, 아래의 쿼리와 위 쿼리는 동치이다.
select Sname, Sid
from Student
where Sname = '브리기테';
즉, SQL 커맨드들은 대소문자 구분 없이 사용할 수 있다. 보통은 혼용하지 않고 한가지만 사용한다. 단, 문자열과 같은 value들은 여전히 대소문자를 구분해야 한다.
Like Query
이름에 ‘철’이 들어가는 학생들을 찾고 싶다고 해보자. 이때, 쿼리는 다음과 같다.
SELECT *
FROM Student
WHERE Sname LIKE '%철%';
%는 아무 문자열을 의미한다. 즉, 아주 긴 문자열이 될 수도 있고 공백이 되어도 된다. 위 쿼리는 문자열 사이에 ‘철’이 들어가는 모든 학생들을 찾아준다. 만약, ‘최’로 시작하는 학생들만 찾고 싶다면 다음과 같이 쿼리를 작성하면 된다.
SELECT *
FROM Student
WHERE Sname LIKE '최%';
그럼, 만약 이름의 두번째에 ‘철’이 들어가는 학생들을 찾고 싶다면 어떻게 해야할까? 이때, 다음과 같이 쿼리를 작성하면 된다.
SELECT *
FROM Student
WHERE Sname LIKE '_철%';
_는 임의의 하나의 문자를 의미한다. 따라서 두번째 자리에 ‘철’이 들어가는 학생들을 모두 찾을 수 있다. 만약 세번째 자리에 ‘철’이 들어가는 학생들을 찾고 싶다면 ‘__철%’처럼 두 번 작성하면 된다.
Distinct
학생들의 전공만 궁금한 경우를 한 번 생각해보자.
SELECT Major
FROM Student;
이렇게 작성한다면, 같은 전공을 가진 학생들이 다 같이 선택되어 전공이 중복되어 나올 것이다. 이때, 중복된 튜플을 제거하고 싶다면 다음과 같이 쿼리를 작성하면 된다.
SELECT DISTINCT Major
FROM Student;
DISTINCT를 작성해주는 것으로 중복된 튜플을 제거할 수 있다.
Order By
쿼리 결과를 학번에 대해 오름차순으로 정렬하고 싶다면 어떻게 해야할까?
SELECT *
FROM Student
ORDER BY Sid;
ORDER BY
를 사용하면 된다. 만약, 내림차순으로 정렬하고 싶다면 다음과 같이 작성하면 된다.
SELECT *
FROM Student
ORDER BY Sid DESC;
기본적으로 ORDER BY
는 오름차순 정렬이기 때문에, 내림차순으로 정렬하고 싶다면 DESC
를 작성해주면 된다. 명시적으로 오름차순임을 나타내고 싶다면 ASC
를 작성해주면 된다.
요약
- SFW 쿼리는 Input Schema에서 Output Schema를 만들어내는 함수이다.
- SFW 쿼리는 Selection과 Projection 연산을 포함한다.
- SQL 커맨드들은 대소문자 구분 없이 사용할 수 있다.
- 문자열과 같은 value들은 여전히 대소문자를 구분해야 한다.
- %는 아무 문자열을 의미한다.
- _는 임의의 하나의 문자를 의미한다.
- DISTINCT를 작성해주는 것으로 중복된 튜플을 제거할 수 있다.
- ORDER BY를 사용하면 쿼리 결과를 정렬할 수 있다.