Database

[DATABASE] 데이터 조회 - Alias, DISTINCT, LIKE, *

ju_young 2023. 11. 21. 13:00
728x90

정의된 테이블 예시

  • 테이블 명: article
attribute type
id (PRIMARY KEY) bigint
title varchar
content varchar
created_at datetime
  • 테이블 명: comment
attribute type
id (PRIMARY KEY) bigint
article_id (FOREIGN KEY) bigint
content varchar
created_at datetime

데이터 조회

SELECT article.id, title, comment.content
FROM article, comment
WHERE comment.id = 10 and comment.article_id = article.id;
  • WHERE
    • comment.id
      • selection condition이라고 부르며 지정한 조건에 맞는 데이터를 조회한다.
    • comment.article_id = article.id
      • join condition이라고 부르며 하나의 테이블의 attribute와 다른 테이블의 attribute가 일치하는 데이터를 조회한다.
      • 위와 같은 쿼리에서는 comment.article_idarticle.id가 일치하는 article데이터를 조회한다.
    • 정리하면 comment.id가 10인 comment 데이터를 조회하고 comment.article_idarticle.id가 일치하는 article데이터를 조회한다.
  • SELECT
    • article.id, comment.content와 같이 앞에 테이블명을 명시적으로 지정해주는 이유는 두 테이블에 attribute가 중복되어 있기 때문이다. 만약 테이블명을 명시적으로 지정해주지 않는다면 두 테이블에 있는 데이터를 모두 조회하게된다.
    • 반면 articletitle attribute는 article에서만 존재하기 때문에 테이블명을 지정해주지 않아도 된다.

NOTE
WHERE 절의 join condition에도 두 테이블의 attribute가 중복되는 경우 테이블명을 명시적으로 지정해주어야한다. 만약 지정해주지 않으면 에러가 발생한다.

Alias

SELECT A.id AS article_id, title, C.content AS comment_content
FROM article AS A, comment AS C
WHERE C.id = 10 and C.article_id = A.id;
  • 각 테이블에 AS로 Alias를 지정해주면 위와 같이 조금 더 간결하고 쉽게 작성할 수 있다.
  • 조회한 결과 id, content와 같이 어떤 테이블의 attribute인지 알기 어려울 때도 SELECT 부분에 Alias를 지정해 줄 수 있다. 예를 들어 위 쿼리에서보면 id의 경우 article_id라고 Alias를 지정해줌으로써 article 테이블의 attribute라는 것을 정확하게 표현해줄 수 있다.

DISTINCT

SELECT DISTINCT C.content AS comment_content
FROM article AS A, comment AS C
WHERE A.id = 10 and C.article_id = A.id;
  • 중복된 Tuple들을 제거할 때 사용한다.
  • 위 쿼리를 예시로 보면 id가 10인 commentcomment.content를 모두 출력할때 중복된 tuple들을 모두 제거한다.

LIKE

SELECT title
FROM article
WHERE title LIKE 'A%' or title LIKE '%A';
  • %: 0개 이상의 임의의 문자를 의미한다.
    • A%: A로 시작하는 문자
    • %A: A로 끝나는 문자
    • %A%: 중간에 A가 들어가는 문자
  • _: 하나의 문자를 의미한다.
    • A___: A로 시작하면서 뒤에 3개의 문자가 존재하는 것을 의미
  • 위 쿼리에서는 A로 시작하는 title 또는 A로 끝나는 title을 조회하게된다.

NOTE
% 또는 _ 자체를 조회해야할 경우 \%, \_ 처럼 앞에 \를 붙여준다.

* (asterisk)

SELECT *
FROM article
WHERE id = 1;
  • *: 모든 attribute를 출력하고자 할 떄 사용한다. 두 테이블을 조회할 경우에도 두 테이블의 attribute를 모두 출력한다.
728x90

'Database' 카테고리의 다른 글

[DATABASE] NULL  (0) 2023.11.23
[DATABASE] Subquery (서브쿼리) - IN, (NOT) EXISTS, ANY, ALL  (0) 2023.11.22
[DATABASE] 데이터 추가, 수정, 삭제  (0) 2023.11.20
[DATABASE] schema 변경  (1) 2023.11.17
[DATABASE] constraint의 적용  (0) 2023.11.17