웹찢남

Database - 6일차 본문

Database

Database - 6일차

harry595 2021. 2. 2. 18:00

Joined table

  • FROM 절에 join을 추가하여 table을 합침
  • 아래는 INEER JOIN

SELECT Fname,Lname,Address

FROM EMPLOYEE JOIN DEPARTMENT ON Dno=Dnumber)

WHERE Dname='Research';

위에서는 Dno와 Dnumber의 값이 같으면 하나로 침

NATURAL JOIN with two relations R and S

  • No join condition specified
  • 두 테이블에 같은 attribute가 있으면 NATURAL JOIN
  • ATTRIBUTE가 다른데 natural join을 쓰려면 아래와 같이 하면됨

아래는 EMPLOYEE에 Dno가 있는데 DEPARTMENT에는 Dnumber라는 같은 attribute가 있는 상태

SELECT Fname, Lname, Address

FROM (EMPLOYEE NATURAL JOIN

(DEPARTMENT AS DEPT(Dname,Dno,Mssn,MSdate)))

WHERE Dname='Research';

INNER and OUTER JOIN

INNER JOIN

  • joined table의 Default 타입
  • 매칭되는 튜플이 있을 때만 결과에 튜플이 포함됨

LEFT OUTER JOIN

  • 왼쪽의 테이블은 무조건 결과에 나온다.
  • 매칭되는 튜플이 없을 경우 오른쪽 테이블 값들은 NULL로 채워진다.

RIGHT OUTER JOIN

  • 오른쪽의 테이블은 결과에 무조건 나온다.
  • 매칭되는 튜플이 없을 경우 왼쪽 테이블의 값들은 NULL로 채워진다.

Multiway JOIN in the FROM Clause

Aggregate(합계) Functions in SQL

  • COUNT,SUM,MAX,MIN,AVG (여러 투플을 하나의 튜플로 요약하기위해 사용)
  • GROUPING - Summarizing을 하기 전 튜플의 부분집합 설정
  • 전체 그룹을 택하기 위해서 HAVING 절을 사용한다.

사용법

SELECT SUM(Salary), MAX(Salary)

FROM EMPLOYEE;

COUNT의 경우 SELECT COUNT(*) FROM EMPLOYEE 같이 사용 가능

GROUP BY는 SELECT 구문에만 나온다.

여기서 attribute의 값이 NULL이면 NULL끼리 모인다.

SELECT Dno, COUNT (*), AVG (Salary)

FROM EMPLOYEE GROUP BY Dno;

결과는 아래와 같다.

HAVING

SQL을 사용하여 두명의 사용자를 가진 그룹을 찾는다거나 그럴떄 사용

WHERE과 HAVING 접목

WHERE은 GROUP BY보다 먼저 실행된다. %주의%

→ 의도하지 않은 결과가 나올 수 있음

따라서 아래와 같이 복잡하게 사용해 줘야함

WITH

WITH 절은 특정한 절에서만 테이블을 정의할 때 사용한다.

일시적인 (Temp) VIEW를 사용할 때 사용한다.

특징은 선 정의 후 사용이라는 거다

CASE

SWITCH 절과 비슷한 친구

특정한 상태에서 값이 다를 떄 사용

CASE WHEN ~ THEN ~ ELSE ~

이 친구가 sql에서 <>if를 대체할 수 있다 실제로 SQLINJECTION에 BYPASS로 종종 쓰인다

'Database' 카테고리의 다른 글

Database - 7일차  (0) 2021.02.02
Database - 5일차  (0) 2021.02.02
동읍면 DB 만들기  (0) 2020.11.11
Database - 4일차  (0) 2020.10.26
Database - 3일차  (0) 2020.10.07
Comments