목록K 개발자 (145)
K 개발자
EXISTS EXISTS는 상관 부속질의문 형식이다. EXISTS는 원래 단어에서 의미하는 것과 같이 조건에 맞는 투플이 존재하면 결과에 포함시킨다. 즉 부속질의문의 어떤 행이 조건에 만족하면 참이다. 반면 NOT EXISTS는 부속질의문의 모든 행이 조건에 만족하지 않을 때만 참이다. 연습문제 -- 주문이 있는 고객의 이름과 주소를 보이시오. SELECT name, address FROM Customer cs WHERE EXISTS ( SELECT * FROM Orders od WHERE cs.custid = od.custid);
집합연산 SQL 문의 결과는 테이블로 나타난다. 테이블은 투플의 집합이므로 테이블 간의 집합연산을 이용하여 합집합, 차집합, 교집합을 구할 수 있다. SQL에서 집합연산은 합집합을 UNION, 차집합을 MINUS, 교집합을 INTERSECT로 나타낸다. 연습문제 -- 도서를 주문하지 않은 고객의 이름을 보이시오. SELECT name FROM Customer MINUS SELECT name FROM Customer WHERE custid IN ( SELECT custid FROM Orders);
부속질의 SQL 문 내에 또 다른 SQL 문을 작성하는 것을 부속질의subquery라고 한다. 부속질의는 질의가 중첩되어 있다는 의미에서 중첩질의nested query라고도 한다. 부속질의 간에는 상하 관계가 있으며, 실행 순서는 하위 부속질의를 먼저 실행하고 그 결과를 이용하여 상위 부속질의를 실행한다. 반면 상관 부속질의correlated subquery는 상위 부속질의의 투플을 이용하여 하위 부속질의를 계산한다. 즉 상위 부속질의와 하위 부속질의가 독립적이지 않고 서로 관련을 맺고 있다. 연습문제 -- 가장 비싼 도서의 이름을 보이시오. SELECT bookname FROM Book WHERE price = ( SELECT MAX(price) FROM Book); -- 도서를 구매한 적이 있는 고객..
조인 조인join은 한 테이블의 행을 다른 테이블의 행에 연결하여 두 개 이상의 테이블을 결합하는 연산이다. 연습문제 -- 고객과 고객의 주문에 관한 데이터를 모두 보이시오. SELECT * FROM Customer, Orders WHERE Customer.custid = Orders.custid; -- 고객과 고객의 주문에 관한 데이터를 고객별로 정렬하여 보이시오. SELECT * FROM Customer INNER JOIN Orders ON Customer.custid = Orders.custid ORDER BY Customer.custid; -- 고객의 이름과 고객이 주문한 도서의 판매가격을 검색하시오. SELECT name, saleprice FROM Customer INNER JOIN Order..
GROUP BY 문 SQL문에서 GROUP BY 절을 사용하면 같은 속성값끼리 그룹을 만들 수 있다. HAVING 절은 GROUP BY 절의 결과가 나타나는 그룹을 제한하는 역할을 한다. 연습문제 -- 고객별로 주문한 도서의 총수량과 총판매액을 구하시오. SELECT custid, COUNT(*) AS 도서수량, SUM(saleprice) AS 총액 FROM Orders GROUP BY custid; -- 가격이 8,000원 이상인 도서를 구매한 고객에 대하여 고객별 주문 도서의 총수량을 구하시오. 단, 2권 이상 구매한 고객만 구하시오. SELECT custid, COUNT(*) AS 도서수량 FROM Orders WHERE saleprice >= 8000 GROUP BY custid HAVING co..
집계 함수 집계 함수aggregate function는 테이블의 각 열에 대해 계산을 하는 함수로 SUM, AVG, MIN, MAX, COUNT의 다섯 가지가 있다. 연습문제 -- 고객이 주문한 도서의 총판매액을 구하시오. SELECT SUM(saleprice) FROM Orders; -- 2번 김연아 고객이 주문한 도서의 총판매액을 구하시오. SELECT SUM(saleprice) AS 총매출 FROM Orders WHERE custid = 2; -- 고객이 주문한 도서의 총판매액, 평균값, 최저가, 최고가를 구하시오. SELECT SUM(saleprice) AS Total, AVG(saleprice) AS Average, MIN(saleprice) AS Minimum, MAX(saleprice) AS..
ORDER BY 절 SQL 문의 실행 결과를 특정 순서대로 출력하고 싶으면 ORDER BY 절을 사용한다. 정렬의 기본은 오름차순이다. 만약 내림차순으로 정렬하려면 열 이름 다음에 DESC 키워드를 사용하면 된다. 연습문제 -- 도서를 이름순으로 검색하시오. SELECT * FROM Book ORDER BY bookname; -- 도서를 가격순으로 검색하고, 가격이 같으면 이름순으로 검색하시오. SELECT * FROM Book ORDER BY price, bookname; -- 도서를 가격의 내림차순으로 검색하시오. 만약 가격이 같다면 출판사의 오름차순으로 출력하시오. SELECT * FROM Book ORDER BY price DESC, publisher ASC; /* ASC는 오름차순 */
WHERE 절 조건에 맞는 검색을 할 때는 WHERE 절을 사용한다. 조건으로 사용할 수 있는 술어predicate는 비교, 범위, 집합, 패턴, NULL로 구분할 수 있다. 술어 연산자 비교 =, , = 범위 BETWEEN 집합 IN, NOT IN 패턴 LIKE NULL IS NULL, IS NOT NULL 복합조건 AND, OR, NOT 문자열 검색 시 LIKE와 같이 사용하는 와일드 문자를 정리하면 다음과 같다. 와일드 문자 의미 + 문자열을 연결 % 0개 이상의 문자열과 일치 [ ] 한 개의 문자와 일치 [^] 한 개의 문자와 불일치 _ 특정 위치의 한 개의 문자와 일치 연습문제 -- 가격이 20,000원 미만인 도서를 검색하시오. SELECT * FROM Book WHERE price < 200..