[MySQL] SQL 문법

Dev_Sanizzang·2021년 10월 8일
0

데이터베이스

목록 보기
3/5

데이터 조회(SELECT) - 데이터 분석을 시작하자.

데이터 조회(SELECT)는 데이터 조작어(DML)이며, 데이터 분석에서 가장 많이 사용되는 명령어이다.


데이터 조회(SELECT)와 여러 절들

데이터 조회(SELECT)는 여러 절들과 함께 사용되어, 분석에 필요한 데이터를 조회한다.

  • FROM 절: 테이블 확인
  • WHERE 절: FROM절 테이블을 특정 조건으로 필터링
  • GROUP BY 절: 열 별로 그룹화
  • HAVING 절: 그룹화된 새로운 테이블을 특정 조건으로 필터링
  • SELECT 절: 열 선택
  • ORDER BY 절: 열 정렬

GROUP BY + 집계함수

GROUP BY는 집계함수와 주로 사용되는 명령어이다.

  • 여러 일별로 그룹화가 가능하다.
  • GROUP BY에 있는 열들을 SELECT에도 작성해야 원하는 분석 결과를 확인할 수 있다.

SQL 명령어 작성법

SQL 명령어를 보기 좋게 작성하기 위해서는 SPACE 및 TAB 키보드를 잘 활용해야 한다.

USE PRACTICE;

/***************FROM***************/

/* Customer 테이블 모든 열 조회 */
SELECT  *
  FROM  CUSTOMER;


/***************WHERE***************/

/* 성별이 남성 조건으로 필터링 */
SELECT  *
  FROM  CUSTOMER
 WHERE  GENDER = 'MAN';
 
 
/***************GROUP BY***************/

/* 지역별로 회원수 집계 */
SELECT  ADDR
		,COUNT(MEM_NO) AS 회원수
  FROM  CUSTOMER
 WHERE  GENDER = 'MAN'
 GROUP
    BY  ADDR;
    
/* COUNT: 행들의 개수를 구하는 집계함수 */


/***************HAVING***************/

/* 집계 회원수 100명 미만 조건으로 필터링 */
SELECT  ADDR
		,COUNT(MEM_NO) AS 회원수
  FROM  CUSTOMER
 WHERE  GENDER = 'MAN'
 GROUP
    BY  ADDR
HAVING  COUNT(MEM_NO) < 100;
    
/* < : 비교 연산자 / ~ 보다 작은*/


/***************ORDER BY***************/

/* 집계 회원수가 높은 순으로 */
SELECT  ADDR
		,COUNT(MEM_NO) AS 회원수
  FROM  CUSTOMER
 WHERE  GENDER = 'MAN'
 GROUP
    BY  ADDR
HAVING  COUNT(MEM_NO) < 100
 ORDER
	BY  COUNT(MEM_NO) DESC;
    
/* DESC : 내림차순 / ASC : 오름차순 */


/***************FROM -> (WHERE) -> GROUP BY***************/

/* FROM -> GROUP BY 순으로 작성해도 됩니다. */
SELECT  ADDR
		,COUNT(MEM_NO) AS 회원수
  FROM  CUSTOMER
/* WHERE  GENDER = 'MAN' */
 GROUP
    BY  ADDR;


/***************GROUP BY + 집계함수***************/
/* 거주지역을 서울, 인천 조건으로 필터링 */
/* 거주지역 및 성별로 회원수 집계 */
SELECT  ADDR
		,GENDER
		,COUNT(MEM_NO) AS 회원수
  FROM  CUSTOMER
 WHERE  ADDR IN ('SEOUL', 'INCHEON')
 GROUP
    BY  ADDR
		,GENDER;

/* IN : 특수 연산자 / IN (List) / 리스트 값만 */

/* GROUP BY에 있는 열들을 SELECT에도 작성해야 원하는 분석 결과를 확인할 수 있습니다. */
SELECT  GENDER
		,COUNT(MEM_NO) AS 회원수
  FROM  CUSTOMER
 WHERE  ADDR IN ('SEOUL', 'INCHEON')
 GROUP
    BY  ADDR
		,GENDER;
        

/***************SQL 명령어 작성법***************/
/* 회원테이블(Customer)을 */
/* 성별이 남성 조건으로 필터링하여 */
/* 거주지역별로 회원수 집계 */
/* 집계 회원수 100명 미만 조건으로 필터링 */
/* 모든 열 조회 */
/* 집계 회원수가 높은 순으로 */

SELECT  ADDR
		,COUNT(MEM_NO) AS 회원수
  FROM  CUSTOMER
 WHERE  GENDER = 'MAN'
 GROUP
    BY  ADDR
HAVING  COUNT(MEM_NO) < 100
 ORDER
    BY  COUNT(MEM_NO) DESC;

테이블 결합(JOIN) - 관계

관계는 1:1, 1:N, N:N 세가지 형태로,
테이블 간의 연결이 가능하다는 것을 의미한다.

  • 테이블 결합(JOIN)은 두 테이블 관계를 활용하여, 테이블을 결합하는 명령어이다.
  • 테이블 결합(JOIN)을 통해, 여러 테이블을 활용하여 분석이 가능하다.

ERM(Entity-Relationship Modelling)

ERM은 개체-관계 모델링이며, 관계형 데이터베이스에 테이블을 모델링할 때 사용된다.

  • 개체(Entity): 하나 이상의 속성(Attribute)으로 구성된 개체
  • 관계(Relationship): 속성(Entity)들 간의 관계

ERD(Entity-Relationship Diagram)

ERD은 개체간의 관계를 도표로 표현할 때 사용된다.


INNER, LEFT, RIGHT, JOIN

  • Inner Join: 두 테이블의 공통 값이 매칭되는 데이터만 결합
  • left Join: 두 테이블의 공통 값이 매칭되는 데이터만 결합 + 왼쪽 테이블의 매칭되지 않는 데이터는 NULL
  • Right Join: 두 테이블의 공통 값이 매칭되는 데이터만 결합 + 오른쪽 테이블의 매칭되지 않는 데이터는 NULL

3개 이상 테이블 결합

테이블 결합(JOIN)은 3가지 이상 테이블 결합이 가능하다.


서브쿼리(Sub Query)

서브 쿼리(Sub Query)는 SELECT문 안에 또 다른 SELECT문이 있는 명령어이다.

SELECT절 서브쿼리

SELECT절 서브 쿼리는 SELECT 명령문 안에 SELECT 명령문이 있는 쿼리문이다.

  1. 테이블의 열
    스칼라(Scala) 서브 쿼리
  • 스칼라: 하나의 값만 보유하는 원자량
  1. 처리 속도
    JOIN보다 처리 속도 늦음

FROM절 서브쿼리

FROM절 서브 쿼리는 FROM 명령문 안에 SELECT 명령문이 있는 쿼리문이다.

  1. 테이블
    열 이름 및 테이블명 지정

WHERE절 서브쿼리

WHERE절 서브 쿼리는 WHERE 명령문 안에 SELECT 명령문이 있는 쿼리문이다.

  1. 리스트(List)
    WHERE절 서브 쿼리 = 리스트
profile
기록을 통해 성장합니다.

0개의 댓글