클라우드 아키텍트 양성과정

[TIL.20.12.22~28]데이터베이스 와 MySQL -1

종바깅 2021. 1. 26. 22:16

[20.12.22] 

> DBMS 개요(Database Management System)

 

- 데이터베이스(Database)란?

  • 데이터의 집합
  • 데이터의 저장공간 자체
  • 여러 사용자와 응용프로그램이 공유하는 데이터

- DBMS란 위와같은 개념의 데이터베이스를 관리,운영하는것을 의미한다.

 

- DB/DBMS의 특징

  • 데이터의 무결성(Integrity) : 데이터베이스 안의 데이터는 오류가 없어야하며, 제약조건(Constrain)이라는 특성을 가짐
  • 데이터의 독립성 : 데이터베이스 크기 및 저장소 변경시 기존에 작성된 응용프로그램은 영향을 받지 않아야 한다.
  • 보안성 : DB 내의 데이터를 소유한 사람 및 데이터에 접근이 허가된 사람만 접근할 수 있어야 하며, 접근시 사용자의 계정에 따라 차등적인 권한을 가지도록 한다.
  • 중복 최소화 : 동일한 데이터가 여러번 중복되는것을 방지한다.
  • 안정성 : DBMS는 데이터의 백업, 복원기능을 제공한다

> DBMS 분류

- 계층형 DBMS : 1960년도 처음으로 나온DBMS의 개념이며 각 계층은 Tree형태로 1:N관계를 가진다.

>> 단점 : 구조를 변경하기 까다롭고 접근유연성이 부족해서 임의의 검색이 어렵다.

 

- 망형 DBMS : 1:1, 1:N, N:N관계를 지원하여 효과적이고 빠른 데이터추출이 가능하다

>> 단점 : 복잡한 내부포인터를 사용하기 때문에 프로그래머가 모든 계층구조를 이해해야만 프로그램작성이 가능하다.

 

- 관계형 DBMS(Relational DBMS) : 테이블이라는 최소단위로 구성된다. 이 테이블은 하나 이상의 열로 구성됨

>> 장점 : 업무가 변화될 경우에도 쉽게 변화에 순응할 수 있다/ 유지보수측면에서 편리/ 대용량 데이터 관리/ 데이터무결성 보장

>> 단점 : 시스템 자원을 많이 차지해 전반적으로 느리다 

* 그러나 이러한 단점은 하드웨어의 발전으로 햐결됨.

 

>SQL(Structured Query Language)개요

- 관계형 데이터베이스(RDB)에서 사용되는언어

- DBMS제작 회사와 독립적

- 다른 시스템으로 이식성이 좋음

- 표준이 지속적으로 발전중

- 대화식 언어

- 분산형 클라이언트/ 서버 구조

 

> SQL기본 문법, SECTION01 : SELECT문

USE : 사용할 데이터베이스를 불러온다

USE 데이터베이스 이름;

SELECT :  원하는 데이터를 가저오거나 조회

SELECT 가져오고자 하는 열 이름 /* 해당 표기는 주석이며, SELECT문에서 * 기호 사용시 열 전체 선택 */
FROM 테이블 이름
WHERE condition;

- 테이블 이름을 입력하여 원하는 열만 조회

- 여러개의 열을 가져올 때는 콤마(,)로 구분 순서대로 출력됨

- 마침표(.)를 이용해서 데이터베이스 하위 테이블, 혹은 테이블 하위 column 구분

- FROM 뒤에 데이터를 찾을 테이블 입력

- WHERE 뒤에 특정 조건 기술

 

/* 예문 */
USE sqldb
SELECT * FROM usertbl WHERE name = '홍길동'

-  sqldb라는 데이터 베이스를 사용한다. 

-  데이터베이스 내 usertbl이라는 테이블에서 name 속성이 '홍길동'인 데이터의 모든 열을 가져온다.

 

BETWEEN... AND : int값을 가지는 속성에서 연속적인 값에 대한 조건을 줄 때 사용 

IN() : 속성의 데이터형에 관계없이 이산적인 값의 조건을 줄 때

LIKE '-%' : 문자열에 포함된 내용(-) 검색

 

서브쿼리, ANY, SOME, ALL :

>> 서브쿼리란 쿼리문 안에 또 다른 쿼리문이 들어가는것

/*(1)*/
SELECT * FROM usertbl WHERE height > 177;

/*(2)*/
SELECT * FROM usertbl 
WHERE height >= ( SELECT height FROM usertbl WHERE name = '김경호' ) 

- usertbl 내에 name속성이 '김경호'인 데이터의 height 속성이 177일 경우 위의 두 쿼리문은 동일하게 동작한다.

- 그러나 서브쿼리문의 결과 조회되는 데이터가 2개 이상일 경우에는 에러가 발생,

- 이를 해결하기 위해서 사용되는 쿼리로 ANY, SOME, ALL 가 존재한다.

>> ANY,SOME : 서브쿼리 결과 중 하나만 만족해도 된다.

>> ALL : 서브쿼리의 모든 결과에 대해 만족해야 한다.

 

ORDER BY : 결과에 영향없이 출력되는 데이터의 순서를 조절

- ORDER BY 속성 (ASC) : 속성에 대해 오름차순 정렬 (DEFAULT 값으로 생략가능)

- ORDER BY 속성 DESC : 속성에 대해 내림차순 정렬

- 두 개 이상의 정렬 조건을 줄 때 ORDER BY 이하 속성을 콤마(,)로 구분하여 사용

SELECT name, height FROM usertbl ORDER BY height DESC, name ASC

- 키가 큰 순서로 내림차순 정렬하되 키가 같을 경우 이름순으로 오름차순 정렬

 

GROUP BY (HAVING) , 집계함수 :

- GROUP BY 쿼리는 데이터를 그룹으로 묶어주는 역할을 하며 (HAVING쿼리를 사용하여 조건추가) 집계함수와 함께 사용된다.

/* 예문 */
SELECT userID, SUM(amount) FROM buytbl GROUP BY userID;

>> 각 사용자별로 구매한 갯수를 합해 출력

ROLL UP :GROUP BY 하위에 사용되어 그룹마다 집계함수의 소계 또는 합계를 구할때 사용

 

*실습문제*

 

USE employees;

-- 1)
SELECT last_name, gender, hire_date FROM employees
WHERE emp_no = 10002;

-- 2)
SELECT emp_no FROM salaries
WHERE salary > 60000;

-- 3)
SELECT emp_no FROM dept_emp
WHERE dept_no = 'd009';

-- 4)
SELECT dept_name FROM departments
WHERE dept_no IN ('d009', 'd008');

-- 5)
SELECT emp_no, birth_Date, first_name, last_name, gender
FROM employees
WHERE emp_no NOT BETWEEN 10000 AND 10800;

-- 6)
SELECT emp_no, salary
FROM salaries
WHERE YEAR(from_date) = 2000 
	AND YEAR(to_date) = 2000 
	AND salary >= 70000 
	AND salary <= 80000;

-- 7)
SELECT * FROM salaries
WHERE salary NOT BETWEEN 70000 AND 80000;

USE sqldb;

-- 1)
SELECT userID, NAME, addr, birthYear FROM usertbl
WHERE NAME LIKE '조%'
ORDER BY birthYear ASC;

-- 2)
SELECT DISTINCT prodName, price FROM buytbl
ORDER BY price DESC;

-- 3)
SELECT prodName FROM buytbl
WHERE price BETWEEN 50 AND 200;

-- 4)
SELECT prodName FROM buytbl
WHERE price = (
	SELECT MAX(price)
	FROM buytbl
	WHERE userID = 'BBK' OR userID = 'JYP' OR userID = 'KBS'
)

-- 5)
SELECT SUM(amount), prodName FROM buytbl
GROUP BY prodName;

-- 6)
SELECT AVG(amount), groupName FROM buytbl
GROUP BY groupName;