Home [SeSAC]SQL로 데이터베이스 다루기-1일차
Post
Cancel

[SeSAC]SQL로 데이터베이스 다루기-1일차

데이터베이스란?

  • ‘데이터의 집합’

DBMS란?

  • 데이터베이스를 관리하는 프로그램
  • 특정 목적을 처리하기 위한 프로그램

계층형(Hierarchical) DB:

  • 계층적으로 구축되고 전형적으로 반전 트리(inverted tree) 형태로 그려짐
  • 계층형 데이터베이스에서 관계는 ‘부모/자식’ 이라는 용어로 표현
  • 부모 테이블은 하나 이상의 자식 테이블들과 관계를 맺을 수 있지만, 자식 테이블은 오직 하나의 부모 테이블에 한해 관계를 맺을 수 있다

전형적인 계층형 데이터베이스의 다이어그램

장점

  • 테이블 구조들 사이에 명확한 링크가 있기 때문에 사용자가 데이터 추출을 빠르게 할 수 있다.
  • 참조 무결성이 내장되어 있고 이것이 자동적으로 강화된다.

    단점

  • 복잡한 관계를 지원할 수 없고, 따라서 중복 데이터로 인해 종종 문제가 발생한다.

관계형(Relational) DB:

  • 데이터베이스는 1969년에 처음으로 고안
  • 오늘날 데이터베이스 관리 분야에서 가장 널리 사용되는 데이터베이스 모델
  • 관계형 모델의 아버지인 에드거 F. 코드 박사가 1970년 6월에 ‘대규모 공유 데이터 뱅크를 위한 관계형 데이터 모델(A Relational Model of Data for Large Shared Databanks)’이라는 제목의 획기적인 연구에서 새로운 관계형 모델을 발표 

 - 데이터를 릴레이션에 저장  - 각 릴레이션은 투플(tuples, 또는 레코드)과 속성(또는 필드)들로 구성  - 테이블 내의 레코드와 필드들의 물리적 순서는 전혀 중요하지 않고, 테이블 내의 각 레코드는 유일한 값을 가지는 필드에 의해 식별됨  - 데이터를 추출하기 위해서 레코드의 물리적 위치를 알 필요가 없다는 것이 다른 모델과 차이점  - 데이터베이스 내의 테이블 사이의 관계에 대해 잘 알기만 하면, 거의 무한대의 방법으로 데이터를 액세스 가능

장점:

  1. 내장된 다중 수준 무결성
  2. 논리적 및 물리적 데이터의 애플리케이션으로부터의 독립성
  3. 보장된 데이터 일관성과 정확성
  4. 쉬운 데이터 추출

MySQL 설치

MySQL Community 8.0.34 https://dev.mysql.com/downloads/mysql/

homebrew 사용하면 brew install mysql@8.0.34로 하면 될것 같다

MySQL Workbench

수업은 윈도우 환경으로 진행하였으나, 맥 환경이라 설치하는 과정에서 차이점이 있었다

  • root 비밀번호 설정: 강제로 긴걸로 설정하게 한다
  • 샘플데이터: 샘플데이터를 받는 부분을 찾지 못해 직접 받아줬다

하지만, 수업땐 새로운 샘플데이터를 받아 사용함

SELECT 명령어:

  • SELECT, DISTINCT
  • ORDER BY, Limit
  • GROUP BY, HAVING

SELECT 절 예제:

1
2
3
4
5
6
7
8
9
-- 이름이 블랙핑크인 회원의 인원수보다 많고, 평균키가 165 이상인 그룹의 이름을 출력
SELECT 	mem_name 
FROM 	member 
WHERE 	mem_number > (
	SELECT 	mem_number 
	FROM 	member 
	WHERE 	mem_name = '블랙핑크'
	) 
    AND height >= 165;
1
2
3
4
5
6
7
8
9
-- 이름이 핑크로 끝나는 그룹의 인원수와 같고, 평균키가 167 이하인 그룹의 이름을 출력
SELECT 	mem_name
FROM 	member
WHERE 	mem_number IN (
	SELECT 	mem_number
	FROM 	member
	WHERE 	mem_name LIKE '%핑크'
	)
    AND height <= 167;
1
2
3
4
5
6
7
8
9
-- 이름이 핑크로 끝나는 그룹들의 각 인원수와 다르고, 평균키가 167 이하인 그룹의 이름을 출력
SELECT mem_name 
FROM member 
WHERE mem_number NOT IN (
	SELECT mem_number
	FROM member 
	WHERE mem_name LIKE '%핑크'
	)
AND height <= 167;
1
2
3
4
5
6
7
8
9
-- 키가 2번째로 큰 그룹의 키 보다 작은 그룹들의 그룹 명을 출력
SELECT mem_name 
FROM member
WHERE height < (
	SELECT height
    FROM member
    ORDER BY height DESC
    LIMIT 1, 1
    );

offset은 0행부터 시작해서 2,1 이 아닌 1,1으로 해야 한다

1
2
3
4
5
6
-- buy 테이블로 진행
-- 분류별로 가장 많이 판매된 순으로 정렬해서 출력
SELECT group_name 분류, SUM(amount) 판매량 
FROM buy 
GROUP BY group_name 
ORDER BY 판매량 desc;
1
2
3
4
5
6
7
8
9
10
-- 가장 매출이 높은 분류의 상품명을 출력
SELECT DISTINCT prod_name 상품명
FROM buy
WHERE group_name = (
	SELECT group_name
	FROM buy
	GROUP BY group_name
	ORDER BY SUM(price*amount) DESC
	LIMIT 1
	);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-- 가장 돈을 많이 사용한 걸그룹의 걸그룹명과 인원수 출력

-- Subquery 사용
SELECT member.mem_name, mem_number
FROM member
WHERE mem_id = (
	SELECT mem_id
    FROM buy
    GROUP BY mem_id
    ORDER BY SUM(amount*price) DESC
    LIMIT 1)
    ;

-- Join절 사용
SELECT member.mem_name, member.mem_number
FROM member
JOIN buy ON member.mem_id = buy.mem_id
GROUP BY member.mem_name, member.mem_number
ORDER BY SUM(amount*price) DESC
LIMIT 1;
This post is licensed under CC BY 4.0 by the author.

[정보처리기사]2과목 데이터베이스 구축

[정보처리기사]3과목 운영체제