데이터베이스구조_0405
PRIVIEW
중간고사 다음주 목요일(4/14)? 다다음주 목요일(4/21)?
범위는 3장까지!
다다음주 목요일(4/21)날 땅땅.
데분프는 자동으로 4/26일날로.
집계함수(SUM, MAX 등)는 GROUP BY, HAVING절에 들어갈 때만 사용가능.
애초에 MAX는 나온 결과에 대한 집계임
SELECT * FROM Orders;
집계를 할 게 없음. GROUP으로 묶여진 상태에서 사용가능
치환연산자는 대입연산자를 의미한다.
중간고사
시험방식은 특별한 이유가 없는 한 대면으로 시험 볼 예정임.
오픈북, 오픈인터넷
(즉, 똑같은 문제는 나올 확률이 적음)
쿼리문 작성하는 것이 주이다.
테이블 생성, ALTER 해서 수정, 데이터 조작어 등 (SELECT, UPDATE, DELETE)...
부속질의(subquery)
스칼라 부속질의
SELECT 절
웬만한 부속질의 join으로 해결 가능.
특정 테이블에 있는 정보를 뽑을 때 굳이 join하지 않고 subquery로 해결 가능
예를 들어, 데이터가 만건 있을 경우 join을 하면 실행되는 데 시간이 다 갈 것!
따라서 부속질의를 사용해 필요한 정보만 뽑아온다.
그러면 성능면에서 향상될 수 있다.
스칼라(scalar): 수학적으로 크기(숫자)를 나타냄(방향 x, 방향있는건 벡터임)
결과 값이 단일 값이라 스칼라 부속질의라는 표현 사용.
주질의어 부속질의어와 상관이 있다. = 상관관계
부속질의 내에서 주절과 상관없이 데이터를 가져오면 = 비상관관계
하나씩 찍을 수 있느냐?
인라인 뷰
FROM절
(함수를 실행하는 시간 < 함수를 호출하는 시간)일 경우 있음
조인을 일일이 안해도 미리 조인을 해놓은 테이블을 만들어놓자!(= 가상의 테이블, 뷰)
뷰가 바뀌면 참조하는 테이블의 내용도 자주 바뀌니, 수정이 잘 없는 테이블을 사용
조인을 할 때 불필요하는 내용을 없어거나 가상의 테이블을 만들어 이용하겠다. 또한, 인라인 뷰는 가상 테이블인 뷰 형태로 제공되기 때문에 상관 부속질의 사용 불가.
SELECT name, sum(saleprice) FROM customer, orders WHERE customer.custid = orders.custid AND customer.custid<=2;
동등조인 후 조건에 맞는 걸 가져와라!
이렇게 했을때는 김연아가 나오지 않았다가
group by를 추가하면 김연아가 나오는 이유!
Group by를 하게되면 박지성, 김연아의 같은 속성끼리 묶인 다음 sum을 해주기 때문이다!
만약 group by를 해주지 않고 sum 할 경우 => sum은 스칼라 연산자로 단일 항만을 계산할 수 있기 대문에 박지성을 (비유가 적절한지는 잘 모르겠지만) 대푯값으로 계산을 해버린다.따라서 의도치 않은 결과값이 출력되는 것이다.
group by가 하는일?
예를 들어, 자신이 어떤 점포의 CEO라고 생각을 해보자.
올해 인건비가 얼마 나갔나 집계를 하고 싶음.
알바 월급, 매니저 월급, 점장 월급 등 이렇게 직급별 한달 인건비를 확인하려면?
또는 자신이 판매부서의 직원이라 카테고리별 오늘 하루 판매량을 확인하고 싶음. 그 중 50개 미만으로 팔린 카테고리를 알고 싶다면?
이런 상황처럼 특정 항목을 기준(ex. 직급/카테고리)으로 그룹을 지어 조건에 해당하는 결과만 추출하고 싶을 때 사용하는 명령어이다!
즉, 조건에 따라 그룹짓고 싶을 때는 GROUP BY!
그룹이 지어진 것들중 특정 조건을 가진 것들만 추출할 때는 HAVING 절!
group by는 집계함수와 쓰이기 때문에 집계함수를 알아두는 게 좋은데, group by 조건에 해당하는 레코드들끼리 쭉 묶어 각 묶음이 가진 총 개수를 구하거나 묶음별로 모두 더한 값을 보여준다던지, 그 묶음들에서 최대값을 보여준다던지 등 SELECT 절에 집계함수가 사용됨. 애초에 GROUP BY가 집계를 내는 것과 상관이 있으니 당연한 거일지도!
집계함수 | 의미 |
---|---|
COUNT | 총 개수 |
COUNT(DISTINCT) | 중복을 제거한 총 개수 |
SUM | 총 합계 |
AVG | 평균값 |
MAX | 최대값 |
MIN | 최소값 |
이때 HAVING 절은 SELECT의 WHERE 절과 역할이 같다.
GROUP BY로 묶인 결과에서 필터링을 하기위해 쓰이는 조건이다!
HAVING절은 집계함수에 대해 조건을 제한하는 절이다.
중첩질의
WHERE 절
where절에서는 집계함수가 안되니까! SELECT AVG(saleprice) FROM Orders로 중첩질의 처리함.
상관관계: 주절에 있는 걸 하나 뽑아서 부속질의에 넣는다.
WHERE에 있어서 IN을 넣는 경우와 비교연산자를 넣는 경우의 차이?
ALL, SOME(ANY)
ALL의 경우 부속질의의 결과 집합 전체를 대상으로 하므로 결과 집합의 최댓값(MAX)과 같다.
SOME의 경우 부속질의의 결과 집합 중 어떠한 값을 의미하므로 최솟값(MIN)과 같다.
SELECT orderid, saleprice FROM Orders WHERE saleprice > ALL(SELECT saleprice FROM orders WHERE custid='3');
3개에 해당하는 값보다 더 큰 값이 있냐의 의미(=MAX값)
Author And Source
이 문제에 관하여(데이터베이스구조_0405), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@allzeroyou/데이터베이스구조0405-u619wifb저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)