공부한 기록/데이터베이스

SQL 2

YongE 2022. 10. 26. 18:35

Where 조건

where은 테이블로부터 데이터값을 검색해 가져올 때 사용하는 '검색조건'이다. 뒤는 다음과 같이 표현할 수 있다.

 

between - and -; - 에서 -사이. 

in (' ', ' ');  -- 혹은 --. or로 치부된다.

like ' '; 어떤 속성 값이 '  '인 것.

상기한 조건들은 와일드카드를 사용하여 더 넓은 조건을 추가할 수 있다.

물론 복합적인 조건도 표현가능하다.

 

조인

SELECT * FROM Customer, Orders; 이것은 단순 카티전이다. 고객이 5명, 주문이 10개면 5*10=50의 튜플이 생겨난다.

 

SELECT * FROM Customer, Orders WHERE Customer.custid =Orders.custid; 허나 조인을 한다면 불필요한 중복을 피해 원하는 결과값만 얻을 수 있다.

 

이러한 조인은 다음과 같은 식으로도 표현 가능하다.

SELECT name, saleprice FROM Customer JOIN Orders ON Customer.custid =Orders.custid;

ON은 join 다음에만 쓸 수 있고, 조인 조건이다. ON 뒤에  WHERE로 검색조건을 추가할 수 있다.

 

SELECT name, saleprice FROM Customer JOIN Orders USING (custid);

using 키워드는 속성의 이름이 같을 때만 사용가능하다. 

 

SELECT Customer.name, Book.bookname

FROM Customer, Orders, Book

WHERE Customer.custid =Orders.custid AND Orders.bookid =Book.bookid;

위의 문장에선 3개의 테이블을 조인할 때의 표현을 알 수 있다. 또한 이 상태에서 데이터를 가져올 때는 가져오는 속성이 모호할 수 있으므로 . 앞에 기준 테이블을 적어줘야 한다. 예를 들어, custid는 customer나 orders에 있으므로 어느 것을 가져올지 모른다. 그러므로 orders.custid로 표현하여 그 테이블의 것을 명확히 밝힌다.

 

 

부속질의 Subquery

SQL문 안에서 중첩된(nested) SQL문을 말한다. 다음과 같이 표현할 수 있다.

SELECT bookname FROM Book WHERE price = ( SELECT MAX(price) FROM Book);

 

상관 부속질의 Correlated subquery는 상위 부속질의의 투플을 이용하여 하위 부속질의를 계산하는 것이다.

SELECT b1.bookname

FROM Book b1

WHERE b1.price > (SELECT avg(b2.price) FROM Book b2 WHERE b2.publisher=b1.publisher);

 

 

집계함수

집계함수도 중복된 값은 제거가 가능하다.

 

group by

여기서 중요히 알 것이 있다. 그룹으로 묶었을 때 select 키워드 다음에는 그룹으로 묶어진 속성만이 올 수 있다. 그룹화는 여러 속성으로 가능하다.

 

 

EXISTS

원래 단어에서 의미하는 것과 같이 조건에 맞는 튜플이 존재하면 결과에 포함시킨다. 즉 부속질의문의 어떤 행이 조건에 만족하면 참이다. 반대로 NOT EXISTS는 부속질의문의 '모든 행'이 조건에 만족하지 않을 때 참이다.

 

 

 

728x90
반응형

'공부한 기록 > 데이터베이스' 카테고리의 다른 글

데이터 모델링  (0) 2022.11.17
SQL (3)  (0) 2022.11.09
SQL 1  (0) 2022.10.10
SQL 기초  (0) 2022.10.03
관계대수  (0) 2022.09.21