select 절
select 절은 관계 대수에서 추출(projection) 연산과 일치한다.
Query의 결과에 나타나기를 바라는 속성들을 나열하는 데 사용된다.
co_1 | co_2 | co_3 |
1 | 2 | 3 |
6 | 0 | 0 |
11 | 22 | 33 |
1 | 2 | 3 |
select * from [테이블 이름]
-- 기본 형식
select * from en_table
-- 사용 예시
위 쿼리를 통해 아래와 같은 결과를 얻을 수 있다.
co_1 | co_2 | co_3 |
1 | 2 | 3 |
6 | 0 | 0 |
11 | 22 | 33 |
1 | 2 | 3 |
select 뒤에 distinct 키워드를 사용하여 중복을 제거하는 것도 가능하다.
select distinct * from [테이블 이름]
-- 기본 형식
select distinct * from en_table
-- 사용 예시
위 쿼리를 사용하여 아래와 같은 결과를 얻을 수 있다.
co_1 | co_2 | co_3 |
1 | 2 | 3 |
6 | 0 | 0 |
11 | 22 | 33 |
select 뒤에 all을 사용하여 중복을 허용하는 것을 명시적으로 나타낼 수도 있다.
select 뒤에 *는 모든 속성을 나타낼 때 사용한다.
따라서 select * from [테이블 이름] 은 테이블의 모든 속성이 선택된 것을 의미한다.
select 뒤에 선택을 원하는 속성을 명시하면 해당 속성만 선택하는 것이 가능하다.
select [속성] from [테이블]
-- 기본 형식
select co_1 from en_table
-- 사용 예시
따라서 위 쿼리를 통해 아래와 같은 결과를 얻을 수 있다.
co_1 |
1 |
6 |
11 |
1 |
이때 콤마(, )를 사용하여 여러 개의 속성을 선택하는 것도 가능하다.
select co_1, co_3 from en_table;
위 쿼리를 통해 아래와 같은 결과를 얻을 수 있다.
co_1 | co_3 |
1 | 3 |
6 | 0 |
11 | 33 |
1 | 3 |
선택한 속성에 대수연산(+, -, *, /, %)을 적용하는 것도 가능하다.
select co_1, co_3*2 from en_table;
위 쿼리를 통해 아래와 같은 결과를 얻을 수 있다.
co_1 | co_3 |
1 | 6 |
6 | 0 |
11 | 66 |
1 | 6 |
from 절
from 절은 관계 대수의 카티션곱(Cartesian product)에 해당한다.
Query에서 찾아보기를 원하는 릴레이션을 나열한다.
아래와 같은 두 개의 테이블이 있다고 가정하겠다.
en_table
co_1 | co_2 | co_3 |
1 | 2 | 3 |
6 | 0 | 0 |
11 | 22 | 33 |
1 | 2 | 3 |
e_table
col_1 | col_2 |
1 | 4 |
2 | 5 |
3 | 6 |
from 절에서 테이블을 선택할 때 콤마를 사용하여 다음과 같이 작성하는 것도 가능하다.
select * from en_table, e_table;
from은 카티시안 곱(데카르트 곱)을 의미한다고 했었다. 즉, 콤마를 사용하면 두 테이블을 통해 만들 수 있는 모든 경우의 수를 조합하여 확인할 수 있다.
따라서 위 쿼리를 통해 아래와 같은 결과를 얻을 수 있다.
co_1 | co_2 | co_3 | col_1 | col_2 |
1 | 2 | 3 | 3 | 6 |
1 | 2 | 3 | 2 | 5 |
1 | 2 | 3 | 1 | 4 |
6 | 0 | 0 | 3 | 6 |
6 | 0 | 0 | 2 | 5 |
6 | 0 | 0 | 1 | 4 |
11 | 22 | 33 | 3 | 6 |
11 | 22 | 33 | 2 | 5 |
11 | 22 | 33 | 1 | 4 |
1 | 2 | 3 | 3 | 6 |
1 | 2 | 3 | 2 | 5 |
1 | 2 | 3 | 1 | 4 |
이때 콤마 대신 CROSS JOIN 키워드를 사용하는 것도 가능하다.
따라서 아래 두 쿼리는 같은 뜻이다.
select * from en_table, e_table;
select * from en_table cross join e_table;
동시에 select를 통해 속성을 선택하는 것도 가능하다.
select co_1, co_2, col_1, col_2 from en_table, e_table;
co_1 | co_2 | col_1 | col_2 |
1 | 2 | 3 | 6 |
1 | 2 | 2 | 5 |
1 | 2 | 1 | 4 |
6 | 0 | 3 | 6 |
6 | 0 | 2 | 5 |
6 | 0 | 1 | 4 |
11 | 22 | 3 | 6 |
11 | 22 | 2 | 5 |
11 | 22 | 1 | 4 |
1 | 2 | 3 | 6 |
1 | 2 | 2 | 5 |
1 | 2 | 1 | 4 |
where 절
where 절은 관계 대수에서 선택 조건에 해당한다.
from 절에 나타나는 릴레이션들의 속성들의 조건으로 구성되어 있다.
이때 속성을 선택하기 위해 and, or, not과 같은 논리 접속사와 <, >, <=, >=, =, <>를 포함하는 비교 연산자를 사용할 수 있다.
또한 where 절에서는 어떤 값보다는 작거나 같고 어떤 값보다는 크거나 같은 값을 간단히 명시하기 위해
BETWEEN 비교 연산자를 제공한다.
select [속성] from [테이블] where [속성] between [값1] and [값2]
-- 기본 형식
select co_1, co_3 from en_table where co_1 between 0 and 10;
-- 사용 예시
위 쿼리를 통해 아래와 같은 결과를 얻을 수 있다.
co_1 | co_3 |
1 | 3 |
6 | 0 |
1 | 3 |
natural join
natural join은 두 개의 테이블에서 공통된 값이 존재하는 튜플을 중복을 제거하고 하나의 튜플로 나타낸다.
예를 들어 아래와 같은 두 테이블이 존재한다고 가정하자.
e_table
a_id | b_id | c_id |
a1 | 101 | XXX |
a2 | 102 | YYY |
a3 | 103 | ZZZ |
a4 | 104 | AAA |
a5 | 105 | BBB |
a6 | 106 | CCC |
en_table
a_id | b_id | val |
a1 | 101 | 1 |
a2 | 102 | 2 |
a3 | 103 | 3 |
select * from e_table natural join en_table;
위 쿼리로 아래와 같은 결과를 얻을 수 있다.
a_id | b_id | c_id | val |
a1 | 101 | XXX | 1 |
a2 | 102 | YYY | 2 |
a3 | 103 | ZZZ | 3 |
join using
join을 할 때 using을 사용하여 공통된 속성 중 동일한 값이 존재하는지 확인할 속성을 명시적으로 나타낼 수도 있다.
예를 들어 아래와 같은 쿼리를 사용할 경우 방금 사용한 natural join 쿼리와 같은 결과를 도출한다.
select * from e_table join en_table using (a_id, b_id);
그러나 아래와 같은 쿼리를 사용할 경우 a_id 속성에 공통된 값이 존재하는지만 확인하고 b_id라는 동일한 속성이 존재하더라도 다른 속성으로 인지하게 된다.
select * from e_table join en_table using (a_id);
따라서 위 쿼리의 결과는 아래와 같다.
a_id | b_id | c_id | b_id | val |
a1 | 101 | XXX | 101 | 1 |
a2 | 102 | YYY | 102 | 2 |
a3 | 103 | ZZZ | 103 | 3 |
join on
join 할 때 on을 사용하여 조건을 명시하는 것도 가능하다.
예를 들어 두 테이블 e_table과 en_table에서 속성 a_id의 값이 동일한 튜플을 확인하고 싶다면 아래 쿼리를 사용할 수 있다.
select * from e_table join en_table on e_table.a_id = en_table.a_id;
join on을 사용할 때에는 중복된 값을 찾았다고 해서 중복을 제거하지 않고 그대로 결과로 내보낸다.
따라서 위 쿼리의 결과는 아래와 같다.
a_id | b_id | c_id | a_id | b_id | val |
a1 | 101 | XXX | a1 | 101 | 1 |
a2 | 102 | YYY | a2 | 102 | 2 |
a3 | 103 | ZZZ | a3 | 103 | 3 |
join on을 사용할 때 on 절의 조건을 동등 비교가 아닌 범위 비교를 사용하는 것도 가능하다.
'데이터베이스' 카테고리의 다른 글
[DB] SQL DML (CREATE, DROP, INSERT, UPDATE, DELETE) (0) | 2025.02.24 |
---|---|
[DB] DataBase 정의 및 특징 (0) | 2025.02.20 |