sql에서 query를 사용하는 기본적인 구조(DML)는 아래의 형태이다.
select A1, A2,..., An
from r1, r2,..., rm
where P;
여기서 A는 attribute, r은 relation, P는 predicate로 조건문을 말한다.
해당 query의 결과는 relation형태로 출력된다.
select는 추출하고 싶은 attribute를 선택한다.
from은 추출할 대상이 되는 relation을 선택한다.
where은 추출때의 조건을 추가한다.
예를 들어 book(title, author, pulisher, price)이라는 relation에서 author만 추출하고 싶을 때는 아래와 같은 명령어를 입력한다.
select author
from book;
select절
- sql은 대소문자를 구분하지 않는다. (author = AUTHOR)
- sql에서는 기본적으로 중복을 허용한다. 그러므로 만약 author이 여러번 중복되지 않게 하려면 아래와 같이 distinct 키워드를 사용한다. (반대로 중복을 허용하려면 all 키워드를 사용한다. 그러나 보통의 경우에는 default 값이므로 생략한다.)
select distinct author
from book;
- select에 아스테리스크(*)를 사용하면 전체 attribute를 선택하라는 의미이다.
select *
from book;
- select문에서 +, -, *, / 등의 연산을 사용할 수 있다.
- as를 이용해 이름을 부여할 수 있다.
아래의 명령어는 책의 30% 세일한 가격들만 추출하는 명령어로, price * 1.3에 sale_price라는 이름을 붙였다.
select price * 1.3 as sale_price
from book;
where절
- 논리 연산으로 and, or, not을 사용할 수 있다.
- 연산자 <, <=, >, >=, =, <>(not equal)을 사용할 수 있다.
예를 들어 저자가 '롤링'이면서 가격이 20000원 이상인 책의 제목들만 추출하기 위해서는 아래와 같은 명령어를 사용한다.
select title
from book
where author ='롤링' and price > 20000;
from절
- cartesion 곱, 즉 모든 튜플들의 조합을 만들고 싶을 경우에는 콤마(,)를 붙여서 나열한다.
예를 들어 relation book과 writer의 조합을 만들 경우에는 아래와 같이 한다.
select *
from book, writer
where book.author = writer.name;
이 때, book의 author와 writer의 name이 같지 않은 경우는 불필요한 정보이므로 where을 사용해 처리해 준다.
'전공과목 정리 > 데이터베이스 (DB)' 카테고리의 다른 글
SQL(1). creare table (0) | 2021.04.10 |
---|