GO WILD, SPEAK LOUD, THINK HARD

엘리스 AI 트랙 03주차 - SQL로 데이터 다루기 II (1/8) 🔥 본문

개발/엘리스 AI 트랙

엘리스 AI 트랙 03주차 - SQL로 데이터 다루기 II (1/8) 🔥

Max 2021. 1. 10. 22:59
반응형

✔ 03주차. 데이터베이스 기초 개요

<수강 목표>

  • 데이터 모델링에 대해 이해하고 DB 정규화, 반정규화를 통해 성능을 향상합니다.

  • 표준 SQL의 DML문법을 익히고 실제 관계형 DB에서 생성, 조회, 수정, 삭제를 할 수 있습니다.

  • 표준 SQL의 DCL, DDL 문법을 익히고 실제 운영가능한 DB를 생성 및 관리할 수 있습니다.


[4장 다수의 테이블 제어하기]

1. 데이터 그룹 짓기

  - GROUP BY : 테이블에서 같은 값을 가진 데이터를 그룹으로 만듦. 그룹함수 사용 가능 (SUM, AVG 등등)

  - GROUP BY 기본문법

-- rental 테이블에서 user_id를 그룹으로 묶어줌
SELECT user_id, COUNT(*)
  FROM rental
GROUP BY user_id;

 

2. 데이터 그룹에 조건 적용하기

  - HAVING : GROUP BY 절에 조건을 적용할 때 사용

  - HAVING 기본문법

-- rental 테이블에서 user_id 가 같은 1개 초과의 데이터가 몇개 있는지 검색
SELECT user_id, COUNT(*)
  FROM rental
GROUP BY user_id
HAVING COUNT(user_id) > 1;

 

3. 두개의 테이블에서 조회하기

  - INNER JOIN : 여러 테이블의 정보를 한번에 조회

https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

  - INNER JOIN 기본문법

-- rental 테이블과 user 테이블의 정보를 한번에 검색 
-- (rental 테이블의 user_id 에 해당하는 정보를 user 테이블에서 가져온다)
SELECT *
  FROM rental
 INNER JOIN user;

 

4. 조건을 적용해 두개의 테이블을 조회하기

  - ON : 조건을 적용해 여러 테이블의 정보를 한번에 조회

  - ON 기본문법

-- 2개의 테이블을 연결하는데 rental 테이블의 id 와 user 테이블의 user_id 가 동일한 것이 조건
SELECT *
  FROM rental
 INNER JOIN user
    ON user.id = rental.user_id;

 

5. LEFT JOIN

  - LEFT JOIN : 왼쪽 테이블의 모든 값을 포함해 연결하기 (두 테이블 중 더 중심이 되는 테이블을 FROM 에 적어준다)

https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

  - LEFT JOIN 기본문법

-- user 테이블을 모두 출력하되 모든 user 테이블의 user_id 와 rental 테이블의 id가 겹치도록 출력
SELECT *
  FROM user
  LEFT JOIN rental
    ON user.id = rental.user_id;

 

6. RIGHT JOIN

  - RIGHT JOIN : 오른쪽 테이블의 모든 값을 포함해 연결하기

https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

  - RIGHT JOIN 기본문법

-- user 테이블을 모두 출력하되 모든 user 테이블의 user_id 와 rental 테이블의 id가 겹치도록 출력
SELECT *
  FROM user
 RIGHT JOIN rental
    ON user.id = rental.user_id;

 

https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins


[5장 서브쿼리]

1. 서브쿼리

  - 서브쿼리 : Sub query. 하나의 쿼리 안에 포함된 또 하나의 쿼리. 메인 쿼리가 서브쿼리를 포함하는 종속적 관계

  - 서브쿼리의 특징

    ① 알려지지 않은 기준(ex. 상위 5% = 몇명인지, 누군지 모를 때)을 이용한 검색에 유용

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

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

  - 서브쿼리의 예

-- employees 테이블에서 tiger 사원의 salary 값을 알지 못해도 tiger 사원보다 더 높은 salary 값의 검색
SELECT *
  FROM employees
 WHERE salary >
(SELECT salary FROM employees WHERE 이름 = 'tiger');

  - 서브쿼리의 사용시 주의사항

    ① 반드시 괄호와 함께 사용

    ② 서브쿼리 안에서 ORDER BY 사용 불가

    ③ 연산자의 오른쪽에서 사용

    ④ 오로지 SELECT 문만 작성 가능

 

2. 반환에 따른 분류

  - 단일 행 서브쿼리 : 결과가 한 행만 나오는 서브쿼리. 서브쿼리가 1개의 값을 반환하고 이 결과를 메인쿼리로 전달하는 쿼리

  - 단일 행 서브쿼리 기본문법

-- 사원번호는 기본적으로 1개만 있으므로 한개의 행만 반환함
SELECT *
  FROM employees
 WHERE salary >
(SELECT salary FROM employees WHERE emp_no = 10);

  - 단일 행 서브쿼리 연산자

기호

=

같다

<>

같지 않다

>

크다

>=

크거나 같다

<

작다

<=

작거나 같다

  - 다중 행 서브쿼리 : 단일 행 서브쿼리와 다르게 서브쿼리가 결과를 2개 이상 반환하고 이 결과를 메인쿼리로 전달하는 쿼리

  - 다중 행 서브쿼리 기본문법

SELECT *
  FROM employees
 WHERE salary IN (
SELECT MAX(salary) FROM employees GROUP BY emp_no);

  - 다중 행 서브쿼리 연산자

기호

IN

하나라도 만족하면 반환

ANY

하나라도 만족하면 반환, 비교연산 가능

ALL

모두 만족하면 반환, 비교 연산 가능

 

3. 위치에 따른 분류

  - 스칼라 서브쿼리 : SELECT 절에서 사용하는 서브쿼리. 오직 한 행만 반환 (JOIN 사용과 같은 결과)

  - 스칼라 서브쿼리 사용방ㅂ법

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

※ 수업 자료의 출처는 K-Digital Training x 엘리스 인공지능 서비스 개발 기획 1기 (elice.io/)입니다.

반응형
Comments