배꼽파지 않도록 잘 개발해요

[엘리스sw] SQL로 데이터 다루기 Ⅰ 본문

교육/엘리스 SW 학습 내용

[엘리스sw] SQL로 데이터 다루기 Ⅰ

꼽파 2024. 4. 29. 15:48


◆  SQL 시작하기
◆  데이터를 제어하는 DML
◆  SQL과 함수
◆  다수의 테이블 제어하기
◆  서브쿼리


◆ SQL 시작하기

SQL이란?

 

데이터베이스

  • 여러 사람이 공유해 사용할 목적으로 통합하여 관리되는 데이터의 모음
  • Maria DB, Amazon Redshift, Oracle DB 등 많은 종류가 존재

데이터베이스의 종류에 따라 사용 방법이 조금씩 다르지만,
데이터베이스에서 검색과 분석에 사용되는 기본 사용 방법은 데이터베이스 종류와 상관없이 동일함.

SQL

  • Structured Query Language의 약자
  • 데이터베이스에 접근하고 조작하기 위한 표준 언어
  • 데이터 검색, 삽입, 수정, 삭제, 데이터베이스 생성, 테이블 생성, 이외 많은 것들 ...

테이블에서 데이터 검색하기

가장 많이 사용되는 종류

  • 관계형 데이터베이스
  • 비관계형 데이터베이스

관계형 데이터베이스

  • 하나 이상의 테이블로 이루어지며 서로 연결된 데이터를 가지고 있음.
  • 관계형 데이터베이스는 SQL을 통해 제어 가능함.

 

테이블 구성요소

  • 컬럼과 레코드로 구성된 표
  • 모든 테이블은 고유의 이름으로 구분됨.
  • 컬럼(Column, 열) : 주제, 제목
  • 레코드(Record, 행 ): 내용, 값

 

명령어

  • SELECT : 검색, 필터
    SELECT + 검색할 대상
  • FROM : ~로부터
    FROM + 테이블명
  • WHERE
    WHERE + 조건

 

SELECT문의 기본 문법

  • book 테이블에서 모든 책의 title과 author 컬럼을 검색

 

모든 데이터를 가져오는 방법

  • 검색할 데이터에 '*'을 입력하면 모든 데이터 검색
  • 테이블 용량이 5GB가 넘는 큰 데이터라면 SELECT *을 하면 멈춤.

 

DISTINCT

  • 뒤에 나오는 컬럼의 중복을 제거하고 보여준다.
    ex. 중복이 되는 title과 author을 제거함.
  • DISTINCT 뒤에 2개 이상의 컬럼을 적으면, 한 쪽 컬럼에 중복이 있어도 다른 쪽 컬럼의 값이 다르면 다르게 취급함.
    ex. A - 어린왕자, B - 어린왕자

    (어린왕자가 중복되어도 앞에 있는 A, B가 달라서 다르게 취급함)

조건을 추가하여 검색하기

조건을 만드는 방법
WHERE + 검색하고자 하는 데이터의 조건을 설정할 수 있는 명령

SELECT + 컬럼명
ex. SELECT + title (제목)

WHERE + 데이터 (레코드)
ex. WHERE + 돈키호테 (데이터)

 

SELECT/WHERE문의 기본 문법

제목이 '돈키호테'의 책 데이터를 book 테이블에서 검색


여러 개의 조건을 추가하기

성적을 저장하는 score 테이블에서 국어 성적이 90점 이상이거나 수학성적이 80점 초과인 데이터 검색

 

비교 연산자

 

비교 연산자를 사용하여 검색

score 테이블에서 국어(korean) 성적이 90 이상인 값 검색

 

복합조건 연산자

반대조건으로 검색할 때가 더 빠른 경우가 많음.

 

복합조건 연산자를 사용하여 검색

score 테이블에서 국어(korean) 성ㅈ거이 90 이상이거나 수학(math) 성적이 80초과인 값 검색

 

기타 연산자

ex. between '2020-03-01' and '2020-03-31'

 

기타 연산자를 사용하여 검색

score 테이블에서 수학(math) 성적잊 80과 90 사이의 값 검색

math가 80과 90인 값도 포함함.


◆ 데이터를 제어하는 DML

SQL 명령어 종류

  • DML : 데이터 조작어
  • DDL : 데이터 정의어
  • DCL : 데이터 제어어
  • TCL : 트랜잭션 제어어

데이터에서 유사한 값 찾기

  • LIKE : 특정 문자가 포함된 문자열을 찾고 싶을 때 사용하는 명령어

book 테이블에서 제목(title)이 '어린왕자'인 책 검색

 

book 테이블에서 제목(title)이 '왕자'로 끝나는 책 검색

  • % : 와일드카드

 

book 테이블에서 제목(title)이 '어린'으로 시작하는 책 검색

 

book 테이블에서 제목(title)이 '린왕'이 포함되는 책 검색


데이터 정렬하기

수학(math) 점수가 높은 순으로 데이터 정렬

 

  • ORDER BY : 데이터를 검색할 때 정렬하여 결과를 출력하는 명령어

score 테이블에서 수학(math) 값이 높은 데이터부터 정렬하여 검색

 

score 테이블에서 수학(math) 값이 낮은 데이터부터 정렬하여 검색

  • ASC = 오름차순 (작은 값부터)
  • DESC = 내림차순 (큰 값부터)

* 1강에서 배운 'DESC 테이블명'(테이블 구조 추출)과 기능이 다름.


데이터 삽입하기

새로운 데이터를 추가했을 때

 

INSERT : 관계형 데이터베이스의 테이블에 값을 저장하는 명령

  • INSERT INTO book(컬럼, 컬럼, 컬럼) VALUES('값', '값', '값')

'햄릿' 책 데이터를 book 테이블에 추가

 

컬럼을 명시하지 않으면 순서대로 값을 삽입


데이터 수정하기

 

UPDATE : 관계형 데이터베이스의 테이블에서 이미 저장된 값을 수정하는 명령

책 제목(title)이 '돈키호테'인 데이터의 제목(title)을 '돈키호테1'로 변경


데이터 삭제하기

DELETE : 관계형 데이터베이스의 테이블에서 이미 저장된 값을 삭제하는 명령

 

WHERE 조건이 없을 시 모든 데이터 삭제


◆ SQL과 함수

COUNT

COUNT : 검색한 결과의 데이터의 개수를 가져오는 내장함수 
(NULL인 데이터는 제외)

 

book 테이블 안에 있는 id 컬럼의 개수를 검색

 

검색할 데이터에 *를 입력하면 모든 데이터 검색


LIMIT

 

LIMIT : 테이블에서 출력하고자 하는 데이터의 개수를 제한하는 명령
ex. limit 1000 으로 샘플데이터를 보냄


SUM & AVG

  • SUM : 지정한 컬럼들의 값을 모두 더하여 총점을 구해주는 내장함수
  • AVG : 지정한 컬럼들의 평균값을 구해주는 내장함수

각 과목의 합을 구했을 때

 

 

각 과목의 평균을 구했을 때

 

 

SUM / COUNT를 사용하지 않고 평균 구하기

각 과목의 평균을 구했을 때


MAX & MIN

  • MAX : 테이블에 존재하는 데이터에서 최대값을 가져오는 내장함수
    (숫자형 뿐만 아니라 문자형도 가능)
  • MIN : 테이블에 존재하는 데이터에서 최솟값을 가져오는 함수
    (숫자형 뿐만 아니라 문자형도 가능)

가장 높은 국어점수를 구했을 때

 

가장 낮은 영어 점수를 구했을 때


◆ 다수의 테이블 제어하기

데이터 그룹 짓기

rental 테이블에 저장된 데이터

user_id로 그룹을 짓는다면?

rental 테이블에서 user_id가 같은 데이터끼리 그룹화한 결과


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


rental 테이블에서 user_id가 같은 1개 초과 데이터가 몇 개 있는지 검색


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

두 테이블의 정보를 한 번에 조회하는 INNER JOIN


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


LEFT JOIN

대여기록이 없는 회원 정보를 포함하여 출력


RIGHT JOIN

rental 테이블을 모두 출력하되 모든 rental 테이블의 user_id와 user 테이블의 id가 겹치도록 합친다.


◆ 서브쿼리

서브쿼리

서브쿼리란?

  • 하나의 쿼리 안에 포함된 또 하나의 쿼리
  • 메인 쿼리가 서브쿼리를 포함하는 종속적인 관계

서브쿼리의 특징

  • 알려지지 않은 기준을 이용한 검색에 유용
    ex. 연봉이 상위 5%인 여자
  • 메인 쿼리가 실행되기 이전에 한 번만 실행
  • 한 문장에서 여러 번 사용 가능

기본의 검색 방법

사원 elice의 급여를 알고 있는 상태에서 더 높은 급여를 받는 사원을 조회

 

서브쿼리를 사용한 예시

사원 elice의 급여를 알지 못해도 검색 가능

 

서브쿼리 사용시 주의사항

  1. 서브쿼리는 괄호와 함께 사용되어야 한다.
  2. 서브쿼리 안에서 ORDER BY 절은 사용할 수 없다.
  3. 서브쿼리는 연산자의 오른쪽에 사용되어야 한다.
  4. 서브쿼리는 오로지 SELECT문으로 작성할 수 있다.


반환에 따른 분류

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

사원번호는 기본적으로 1개만 있으므로 한 개의 행만 반환함 = 단일행

 

단일 행 서브쿼리 연산자

 

다중 행 서브쿼리 기본 문법

 

다중 행 연산자

 


위치에 따른 분류

스칼라 서브쿼리 

  • SELECT 절에서 사용하는 서브쿼리
  • 스칼라 서브쿼리는 오로지 한 행만 반환
  • 마치 JOIN을 사용한 것과 같은 결과를 나타냄.
  • 데이터가 많을 경우에는 JOIN보다 스칼라 서브쿼리를 사용하는 경우가 종종 있음.
    (계산 속도 향상을 위함)

728x90