21.10.31 (6주차 복습2) 데이터 그룹, JOIN, 서브쿼리, 데이터베이스, 정규화, 뷰

2021. 10. 30. 20:46작업/SQL

1. 다수의 테이블 제어하기

서로 다른 테이블의 연결되는 속성으로 그룹 짓기 : GROUP BY

-> SUM, AVG, MAX 등과 함꼐 사용하면 좋다

 

 

-> SELECT 검색할 컬럼 FROM 테이블 GROUP BY 그룹의 기준컬럼

# 실습 1

SELECT user_id,COUNT(*) FROM rental GROUP BY user_id;

(-> user_id에 따른 전체 한줄(*)이 몇 개씩 있는지 센다.

# 실습 2

SELECT user_id, COUNT(*) FROM rental GROUP BY user_id HAVING COUNT(user_id)>1;

-> GROUP BY와 조건을 함께 걸고 싶을 떄

 

# 실습 3 HAVING

 

# 실습 5 INNER JOIN

SELECT 검색할 컬럼 FROM 테이블 INNER JOIN 연결할 테이블 ON 연결한 조건 컬럼

( SELECT * FROM rental INNER JOIN user ON user.id= rental.user_id; ) 테이블.컬럼

# 실습 8 LEFT JOIN

NULL 도 포함

# 실습 10 RIGHT JOIN

 

2. 서브쿼리

# 서브쿼리

하나의 쿼리 안에 포함된 또 하나의 쿼리.

- 알려지지 않은 기준을 이용한 검색에 유용

- 메인 쿼리가 실행되기 전에 한 번만 실행

- 한 문장에서 여러 번 사용 가능

SELECT * FROM employees WHERE 급여>2500; 에 서브쿼리를 적용하면

SELECT * FROM employees WHERE 급여> (SELECT 급여 FROM employees WHERE 이름='elice'); 

 

* 단 괄호 내에는 ORDER BY를 쓸 수 없고, 메인쿼리 < 서브쿼리 순으로 써야 함.

그리고 SELECT문만을 쓸 수 있다.

 

# 실습 1 단일행 서브쿼리

# 실습 2

# 실습 3

SELECT * FROM employee WHERE 급여 > (SELECT 급여 FROM employee WHERE 사원번호=1);

 

다중행 : 서브쿼리 결과가 2개 이상이 나오는 쿼리 (IN, ANY, ALL) 

SELECT * FROM employee WHERE 급여 IN (SELECT max(급여) FROM employee GROUP BY 부서번호);

# 실습 4 다중행 서브쿼리

# 실습 5 각 부서별 급여를 제일 많이 받는 사원의 월급을 받는 사원들

# 실습 7 하나라도 혹은 전부 ANY ALL

스칼라 서브쿼리 : SELECT 절에서 사용하는 서브쿼리

WHERE(꼬리)에 주로 연결하나 SELECT(머리)에 연결하기도 함 

JOIN을 사용한 것과 같은 결과를 나타냄. 데이터가 많을 떄는 JOIN보다 스칼라 서브쿼리가 더 빠르다..

SELECT students.name, ( SELECT math FROM middle_test as m WHERE m.student_id = students.student_id ) AS middle_avg FROM students;

# 실습 8 스칼라 서브쿼리

3. 데이터베이스

# 데이터베이스 : 공유하여 사용할 목적으로 체계화하여 관리하는 데이터의 집합(보관소)

# 실습 1 유일키(PK)

primary key

 

# 실습 2 복합키

primary key같은 속성이 여러 개 있을 때 여러 개 지정 가능

 

# 실습 3 외래키 

4. 정규화 

# 정규화

테이블 간 데이터 조작(삽입,삭제,수정) 시 발생할 수 있는 이상 현상을 줄이기 위한 작업

 

#1차 정규화

각 속성마다 값이 1개씩 존재하도록 하는 과정(원자화)

한 줄에 하나의 데이터씩만 들어있도록

# 2차 정규화

복합키로 구성되어있을 때 고려해야하며, 모든 속성이 완전함수종속이 되도록 하는 작업

# 3차 정규화

테이블 내에서 이행적 요소를 제거하는 작업

5. 뷰

# 뷰(View)

하나 이상의 테이블에서 여러 정보를 토대로 만들어지는 실제 존재하지 않는 가상의 테이블

보안 상 등 여러 목적으로 필요한 정보만 선택해서 가상 테이블만 보여주기 좋다.

# 실습 1

뷰 생성

# 실습 2 여러 테이블 뷰

여러 테이블에서 속성을 가져와서 만들 때

# 실습 3 뷰 삭제