본문 바로가기
코딩수업/AWS 클라우드환경 네이티브

8/29 데이터베이스(DB) MySQL 다운 및 설치, workbench / cmd 설정, 전반적인 기초

by 인생즐겜러 2022. 8. 29.
728x90
반응형

AWS 클라우드환경 네이티브 수업 71일차

 

 

 

진행

1. 데이터베이스(Database) MySQL 다운 및 설치

2. 데이터베이스(Database) workbench 설정 및 cmd 접속

3. 데이터베이스(Database) 기초

 

 

 

 

 

요약

1. 데이터베이스(Database) MySQL 다운 및 설치

2. 데이터베이스(Database) workbench 설정 및 cmd 접속

3. 데이터베이스(Database) 기초

(테이블 만들기, DDL/DML/DCL, SELECT A FROM B 함수, NULL, IFNULL 함수, Alias 함수, CONCAT (연결 연산자) 함수, distinct(중복행 제거) 함수, desc / describe 함수, WHERE ( 특정 데이터 뽑아내기 ) 절 + between~ and(범위) , In 연산자, LIKE / Not Like 연산자 (같은 거 찾아내기), IS NULL / IS NOT NULL (Null을 찾거나 안찾거나), 연산자 우선순위, 데이터 정렬 ( ASC / DESC ))

 

 

 

 

 


 

 

 

 

 

데이터베이스(Database) MySQL 다운 및 설치



 

구글에 오라클 검색 - 제품 - MYSQL - MYSQL community server

 

이후는 사진대로 따라 오면 설치 끝!!! 

별 거 없다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

데이터베이스(Database) workbench 설정 및 cmd 접속

 

 

 

 

 

 

노란색을 클릭

 

 

 

 

노란색 채우고 Test Connection 클릭

 

 

 

 

이런 창이 뜬다.

Test가 정상적으로 되면

 

 

 

 

위처럼 뙇! 성공적이어따!!

 

 

 

그리고 홈으로 오면 위와 같이 커넥션 생성이 된 것을 알 수 있다.

클릭해서 들어가면 아래와 같이 창이 뜬다.

 

 

 

 

왼쪽 상단의 스키마를 새로 만드는 버튼을 클릭.

이름을 정해서 적고

utf8 / utf8_general_ci 로 설정한다.

 

 

 

 

왼쪽 창의 하단에 Administration을 클릭.

Users and Privileges로 들어가서 왼쪽 하단의 Add Account 클릭.

 

 

 

 

로그인 이름을 적고 비번을 설정 후 Apply 클릭.

 

 

 

 

창의 위쪽에서 제일 오른쪽 Schema Privileges 클릭.

Add entry 클릭.

 

 

 

 

위와 같이 채워넣고 OK.

 

 

 

 

전부 선택하고 Apply.

 

 

 

 

Account를 또 한개를 생성한다.

다만 이번에는 Limit to Hosts Matching을 localhost로 적는다.

 

 

 

 

나머지는 위와 동일

 

 

 

 

다 만들면 scott 이라는 이름의 스키마 완성이 되었음을 볼 수 있다.

 

오른쪽 창이 소스를 적는 창이고

ctrl + 휠로 글씨의 크기를 조절할 수 있다.

 

 

 

 

MySQL을 깔았던 폴더에서 서버 폴더 - bin 으로 들어가서 경로를 복사한다.

 

 

 

 

윈도우 검색에서 시스템 - 정보 - 고급 시스템 설정

 

 

 

 

시스템 속성 - 고급 - 환경 변수 - 시스템 변수 - Path 클릭 - 편집 클릭

 

 

 

 

아까 복사했던 bin의 경로를 새로 만들기해서 붙여놓고

우선순위를 위해서 위로 이동 후 확인을 누른다.

 

 

 

 

그리고 검색 - cmd

 

그 후 

노란색처럼 mysql을 치면 아래처럼 접근 거부가 떠야 제대로 설정이 된 것.

 

초록색처럼 치고 비밀번호까지 치면 내가 만들었던 데이터베이스(DB)로 접속이 된다.

 

 

 

 

 


 

 

 

 

 

데이터베이스(Database) 기초

 

 

 

DB의 시작

 

 

 

 

위처럼 치면 내가 접속한 DB에서 사용할 수 있는 것이 무엇이 있는지 확인 할 수 있다.

 

 

 

 

use scott으로 치면 해당 DB로 사용하겠다는 뜻이고

이후 그 DB 안에 있는 테이블을 고르려고 하니 하나도 없다고 뜬다.

고로 우리는 이제 우리는 테이블을 만들거다!!

 

 

 

 

 


 

 

 

 

테이블 만들기

 

 

 

 

MySQL로 돌아와서 위처럼 코딩을 한다.

dept라는 이름의 테이블을 만들고 변수를 세팅해두는 소스다.

 

저장은 편한 폴더에 저장해두도록 하고

실행은 코딩창 위쪽 번개모양이다. 

실행의 단축키는 ctrl + Enter

 

MySQL은 자바랑은 다르게 소스 파일 하나가 전부 실행 되는 형식이 아니다.

커서가 위치한 곳 기준으로 해당되는 문단만 실행이 되어서 결과를 보여주는 방식이다.

 

MySQL은 대소문자 구분을 하지 않는다.

 

 

 

 

 

 

위처럼 

dept / emp / salgrade 테이블을 만들자.

 

 

 

 

만들고 나면 위처럼 테이블 3개가 각각의 열에 변수들을 담은 것이 생성된 것을 볼 수 있다.

 

 

 

 

 

그 후, 각 테이블에 아래의 데이터를 넣고

commit 을 하면 테이블에 데이터가 설정된다.

 

 

 

insert into dept values(10, 'ACCOUNTING', 'NEW YORK');
insert into dept values(20, 'RESEARCH', 'DALLAS');
insert into dept values(30, 'SALES', 'CHICAGO');
insert into dept values(40, 'OPERATIONS', 'BOSTON');
  
insert into emp values( 7839, 'KING', 'PRESIDENT', null, STR_TO_DATE ('17-11-1981','%d-%m-%Y'), 5000, null, 10);
insert into emp values( 7698, 'BLAKE', 'MANAGER', 7839, STR_TO_DATE('1-5-1981','%d-%m-%Y'), 2850, null, 30);
insert into emp values( 7782, 'CLARK', 'MANAGER', 7839, STR_TO_DATE('9-6-1981','%d-%m-%Y'), 2450, null, 10);
insert into emp values( 7566, 'JONES', 'MANAGER', 7839, STR_TO_DATE('2-4-1981','%d-%m-%Y'), 2975, null, 20);
insert into emp values( 7788, 'SCOTT', 'ANALYST', 7566, DATE_ADD(STR_TO_DATE('13-7-1987','%d-%m-%Y'),INTERVAL -85 DAY)  , 3000, null, 20);
insert into emp values( 7902, 'FORD', 'ANALYST', 7566, STR_TO_DATE('3-12-1981','%d-%m-%Y'), 3000, null, 20);
insert into emp values( 7369, 'SMITH', 'CLERK', 7902, STR_TO_DATE('17-12-1980','%d-%m-%Y'), 800, null, 20);
insert into emp values( 7499, 'ALLEN', 'SALESMAN', 7698, STR_TO_DATE('20-2-1981','%d-%m-%Y'), 1600, 300, 30);
insert into emp values( 7521, 'WARD', 'SALESMAN', 7698, STR_TO_DATE('22-2-1981','%d-%m-%Y'), 1250, 500, 30);
insert into emp values( 7654, 'MARTIN', 'SALESMAN', 7698, STR_TO_DATE('28-09-1981','%d-%m-%Y'), 1250, 1400, 30);
insert into emp values( 7844, 'TURNER', 'SALESMAN', 7698, STR_TO_DATE('8-9-1981','%d-%m-%Y'), 1500, 0, 30);
insert into emp values( 7876, 'ADAMS', 'CLERK', 7788, DATE_ADD(STR_TO_DATE('13-7-1987', '%d-%m-%Y'),INTERVAL -51 DAY), 1100, null, 20);
insert into emp values( 7900, 'JAMES', 'CLERK', 7698, STR_TO_DATE('3-12-1981','%d-%m-%Y'), 950, null, 30);
insert into emp values( 7934, 'MILLER', 'CLERK', 7782, STR_TO_DATE('23-1-1982','%d-%m-%Y'), 1300, null, 10);
  

insert into salgrade values (1, 700, 1200);
insert into salgrade values (2, 1201, 1400);
insert into salgrade values (3, 1401, 2000);
insert into salgrade values (4, 2001, 3000);
insert into salgrade values (5, 3001, 9999);

commit;

 

 

 

 

 


 

 

 

 

 

DDL/ DML/ DCL

 

데이터 베이스는 SQL 문을 사용하여 작업을 하는데

그 종류로 위의 3가지가 있다.

여기서는 개요만을 볼 것이고 자세한 사용법은 뒤에 나온다.

 

 

 

1. DDL (Data Definition Language)

 

데이터의 전체 골격을 관장하는 명령어

 

Create : 데이터 베이스, 테이블 등을 생성

Alter : 데이터 베이스, 테이블을 수정

Drop : 데이터 베이스, 테이블을 삭제

Truncate : 테이블을 초기화

 

 

 

 

 

2. DML (Data Manipulation Language)

 

테이블의 행과 열을 조작하는 명령어

데이터를 조작하는 언어이다.

 

Select : 데이터를 조회

Insert : 데이터를 삽입

Update : 데이터를 수정

Delete : 데이터를 삭제

 

 

 

 

 

3. DCL (Data Control Language)

 

데이터 베이스에 접근하거나 객체에 권한을 주는 명령어

 

Grant : 특정 작업에 대한 수행권한을 부여

Revoke : 특정 작업에 대한 수행권한을 박탈

Commit : 트랜잭션의 작업이 정상적으로 완료 되었음을 관리자에게 알린다.

Rollback : 트랜잭션의 작업이 정상적으로 완료가 안되고 종료될 때 원래대로 돌린다.

 

 

 

 

 


 

 

 

 

 

SELECT A FROM B 함수

 

A를 B 테이블에서 뽑아서 보겠다라는 명령어이다.

A가 전체여도 상관없고, 특정 항목이여도 된다.

단, 여러 개의 항목일 경우, 적은 순서대로 결과가 나온다.

 

아래를 보면 바로 이해가 된다.

 

 

 

 

 

 

 

 

아래와 같이 A의 자리에 정해진 항목이 아닌 수식을 추가해서 볼 수도 있다.

 

 

 

 

 

 


 

 

 

 

 

NULL

 

- 이용X, 할당도 X, 적용 자체가 불가하다.
- NULL이란 0이나 공백하고 다르다.
- NULL값을 포함한 산술 표현식의 결과는 NULL이다.
- Column에 데이터 값이 없으면 그 값 자체가 NUL 또는 NULL값을 포함하고 있다.

 

 

 

아래의 예를 실행시켜보면,

NULL을 포함한 산술은 NULL 이 나오는 위험한 상황을 볼 수 있다.

 

Select ename, sal, comm, 12*sal + comm from emp;

 

 

 

 

 

 


 

 

 

 

 

이러한 NULL이 있는 것은 위험하다.

제대로 된 데이터를 못 뽑을 수도 있기 때문에.

이런 위험을 미리 대비하기 위해서 있는 함수가 바로

 

 

 

IFNULL 함수

 

- NULL 값을 어떤 특정한 값(실재값)으로 변환하는 함수.

- 가능한 데이터 타입은 날짜, 문자, 숫자이다.

- NVL 함수 사용 시 반환되는 값의 데이터 타입을 일치시켜야 한다.

 

 

 

이 함수의 구조는 아래와 같다.

 

IFNULL( A, B)

A : NULL 값을 포함하고 있는 column이나 표현식

B : NULL 일 경우, 대체 데이터

 

 

 

아래의 예를 보면서 이해해보자.

 

select ename, sal, comm, 12*sal + IFNULL(comm, 0) from emp;

 

 

 

 

 

 


 

 

 

 

 

Alias 함수 (as는 생략 가능)

 

특정 항목이 수식으로 되어 있을 때,

해당 항목의 이름을 다른 이름으로 깔끔하게 바꿔서 볼 때 사용하는 함수다.

변수 선언 같은 거라고 보면 된다.

 

 

 

구조는 아래와 같다.

결론은 원래이름을 적고 띄어쓰기 후 바꾸고자하는 이름을 쓰면 이름이 바뀐다는 것.

 

-- c항목이 d라는 이름으로 바뀐다.
-- 아래의 결과 같은 같다. as는 생략이 가능하다.
select a, b, c d from emp;
select a, b, c as d from emp;

 

 

 

 

 

아래의 예를 보며 이해해보자.

 

select ename, sal, comm, 12*ifnull(comm, 0) '연봉 + 커미션' from emp;
select ename, sal, comm, 12*ifnull(comm, 0) as '연봉 + 커미션' from emp;

 

 

 

 

 

 


 

 

 

 

 

CONCAT (연결 연산자) 함수

 

입력한 항목들을 입력한 순서대로 붙여서 출력해주는 함수.

 

구조는 아래와 같다.

 

CONCAT(문자열1, 문자열2 ...) as 항목의이름 from 테이블;

 

 

 

 

 

아래의 예를 보면서 이해해보자.

 

select concat(ename, job) as '사원' from emp;

 

 

SMITH + CLERK

ALLEN + SALESMAN

 

이런 식으로 문자들이 붙어서 값을 보여준다.

항목은 사원으로 바뀐 것을 볼 수 있다.

 

 

 

 

 


 

 

 

 

 

distinct (중복행 제거) 함수

 

특정 항목에 중복되는 데이터가 많다라고 한다면,

이러한 중복 데이터를 한번에 없애주는 함수이다.

 

구조는 아래와 같다.

 

select distinct 항목이름 from 테이블;

 

 

 

 

아래의 예를 보면서 이해해보자.

아래와 같이 중복 데이터가 많은 테이블이 있다라고 한다면

 

 

 

 

 

 

 

 

아래처럼 함수를 사용하면 간결해진다.

 

select distinct deptno from emp;

 

 

 

 

 

 


 

 

 

 

 

desc / describe 함수

 

정의된 테이블의 구조를 보고 싶을 때 사용하는 함수이다.

 

 

 

아래의 예를 보면서 이해해보자.

 

desc emp;
describe emp;

 

 

 

 

아래는 처음에 emp 세팅 시 코드이다.

위의 결과와 같이 참고해서 보면 이해가 빠르다.

 

 

 

 

 

 


 

 

 

 

 

WHERE ( 특정 데이터 뽑아내기 ) 절

 

테이블에서 특정 데이터를 뽑아내는 조건절이다.

원하는 조건은 연산자 사용이 가능하다.

 

 

 

아래의 예를 보면서 이해해보자.

 

-- 사원테이블(emp)에서 사원의 이름과 급여, 직책을 출력해주세요
-- 단, 월급이 800이 넘는 평사원(clerk)에 한해서
select ename, sal, job from emp where sal > 800 and job = 'clerk';

 

 

 

 

 

 

특정 범위는 between~ and 구문을 사용하면 훨씬 쉽다.

 

-- 사원테이블(emp)에서 사원의 이름과 급여를 출력해주세요
-- 월급 1000 이상 1500 이하인 사원에 한해
select ename, sal from emp where sal >= 1000 and sal <= 1500;



-- between A and B : A 이상 B 이하
select ename, sal from emp where sal between 1000 and 1500;

 

 

 

 

 

 


 

 

 

 

 

In / not In 연산자

 

In () 에서 괄호 안의 목록에 있는 값을 출력하기 위해서 사용.

개별 선택 목록이 많을 때 사용하면 용이하다.

개별 데이터가 아닌 서브 쿼리가 들어가도 동작한다.Not In () 의 경우, 괄호 안의 데이터를 제외한 값을 도출 할 때 사용한다.

다만, Null 값이 있게 되면 정확한 데이터가 도출이 안될 수 있는 문제점이 있다.

 

 

 

아래의 예를 보면서 이해해보자.

 

-- 사원번호, 사원이름, 월급, 매니져(mgr) 을 출력하세요.
-- 단, 매니져의 코드가 7902, 7566, 7788에 해당하는 사원에 한해서
select empno, ename, sal, mgr from emp
where mgr = 7902 || mgr = 7566 or mgr = 7788 ;



-- IN을 사용하면 아래와 같다
select empno, ename, sal, mgr from emp
where mgr IN (7902, 7566, 7788) ;

 

 

 

 

OR의 경우, || 기호와 함께 사용해도 무방하다.

AND도 마찬가지.

 

 

 

 

 


 

 

 

 

 

LIKE / Not Like 연산자

 

- 와일드 카드 검색을 위해서 사용한다.
- 검색 조건은 문자나 숫자 포함이 가능하다.

- % 는 없거나 하나 이상의 문자를 상징하고,   _ 는 문자 한 개를 상징한다.

   (% 와 _는 like 연산자를 쓸 때만 적용이 된다. 다른 연산자에서는 안써진다.)

- Not Like는 해당 지정어만 뺄 때 사용한다.

 

 

 

 

 

아래의 예를 보면서 이해해보자.

 

select ename from emp where ename like 'S%';

 

 

 

 

 

 

select ename from emp where ename like '%S%';

 

 

 

 

 

 

select ename from emp where ename like '_O%';

 

 

 

 

 

 


 

 

 

 

 

IS NULL / IS NOT NULL

 

NULL을 찾거나 안찾을 때 사용한다.

 

 

 

아래의 예를 보면서 이해해보자.

 

아래와 같은 전체 데이터가 있다.

 

select ename, mgr from emp;

 

 

 

 

 

 

여기서 null 값이 있는 데이터만 뽑고 싶다.

 

select ename, mgr from emp where mgr is null;

 

 

 

 

 

 

여기서 null 값이 없는 데이터만 뽑고 싶다.

 

select ename, mgr from emp where mgr is not null;

 

 

 

 

 

 


 

 

 

 

 

연산자 우선순위

 

괄호 > 비교연산자 > NOT > AND > OR

 

 

 

우선순위에 따라 반환되는 데이터가 다르다.

아래의 비교 예를 보면서 이해해보자.

 

SELECT ename, job, sal
from emp
where job = 'salesman' or job = 'resident' and sal > 1500; -- 5건

SELECT ename, job, sal
from emp
where ( job = 'salesman' or job = 'resident') and sal > 1500; -- 2건

 

 

 

위, 아래의 각각의 결과이다.

 

 

 

 

 

 

 


 

 

 

 

 

데이터 정렬 ( ASC / DESC )

 

- ORDER BY 절을 사용하여 행을 정렬한다.
- ASC : 오름차순(기본)  /  DESC : 내림차순
- ORDER BY 절은 SELECT 문의 맨 뒤에 적는다.

 

 

 

-- 직원이 이름, 직책, 부서번호, 입사일자를 출력하는데, 입사일자순으로 보여주세요.
SELECT ename, job, deptno, hiredate
FROM emp
ORDER BY hiredate DESC;

 

 

 

 

 

 

-- Column Alias 에 의한 정렬
SELECT ename, job, sal, sal*12 annual
FROM emp
ORDER BY annual DESC;

 

 

 

 

 

 

다중 열도 정렬이 가능하다.

 

-- 부서별, 월급 순으로 보여주자
SELECT ename, deptno, sal
FROM emp
ORDER BY deptno DESC, sal DESC;

 

 

 

 

 

 

SELECT절에 포함되지 않은 Column으로도 정렬이 가능하다.

 

SELECT ename, deptno, sal
FROM emp
ORDER BY hiredate DESC;

 

 

 

 

 

728x90
반응형

댓글