김미썸코딩

11/27 - SQL(1) : Maria DB , SELECT, FROM, WHERE, DISTINCT 본문

빅데이터 플랫폼 구축을 위한 자바 개발자 양성과정

11/27 - SQL(1) : Maria DB , SELECT, FROM, WHERE, DISTINCT

김미썸 2020. 11. 28. 15:41
728x90

 

 

데이터베이스 기초


영구데이터 저장없이 프로그램을 만들기 매우 힘들기 때문에 데이터베이스가 아주 중요하다.

데이터베이스를 관리하는 시스템을 DBMS라고 부르며

주로 사용하는 DBMS로는 오라클, MySQL, MS SQL 서버 등이 있다. 

데이터베이스와 DBMS를 통합해서 데이터베이스라고 부르기도 한다. (거의 그렇게 부름)

데이터베이스는 데이터를 지속적으로 관리하고, 보호하는 것이 주목적이다. 

DBMS는 데이터를 안정적으로 보관 할 수 있는 다양한 기능을 제공하고 있다. (ex. 백업 기능)

 

 

 

1. 데이터베이스와 DBMS

DBMS - 관리자(DBA) - > 백업이 중요

                                        ↓ 
    (cpu가 여러개인 컴퓨터를 쓰는 곳에 꼭 필요)

 

ㅇ 대형 데이터베이스 - IBM DB2(Unix) / Oracle Oracle / MS MSSQL

ㅇ 중형 데이터베이스 - Oracle MySQL(Opensource -> Oracle)

                                   - 개발자 :  MySQL -> MariaDB (오픈소스 MySQL이라고 보면됨 - 오픈소스가 두개가 같음)

ㅇ 소형 데이터베이스 - mSQL, sqlite

 

+> 개발자 +> DBA

 

DBA가 하는 일

  • 데이터의 추가/조회/변경/삭제
  • 데이터의 무결성(integrity)유지
  • 트랜잭션 관리
  • 데이터의 백업 및 복원
  • 데이터 보완

 

 

데이터베이스

  1. SQL(Structured Query Lang.)(*) <-  명령어      -    개발자
  2. 관리방법 - 튜닝(최적화) 어려움 ㅜㅜ   -   관리자

 

 

2. 테이블과 레코드

테이블의 구조와 관련된 정보를 테이블 '스키마(Schema)' 라고 부른다. (스키마는 테이블 행의 정의 이다.)

테이블의 구조는 각각의 정보를 저장하는 칼럼과 칼럼 타입 그리고 각 칼럼의 길이로 구성된다. 

테이블에 저장되는 값의 길이에도 제약이 있다.

테이블의 행 각각을 레코드(Record)라고 한다.

하나의 테이블은 여러 개의 레코드로 구성된다. 각 레코드는 테이블의 스키마에 정의된 칼럼에 해당하는 값을 갖는다.

 

 


 

 

 

 

 

 

 

 

 

 

 

maria DB 설치


 

MariaDB - Windows 업데이트 한상태로 해라!

https://mariadb.org

https://mariadb.com  

내 컴터에서는 3306포트가 이미 사용중이래서 3307포트로 함

 

 

 

1. maria DB 실행 방법

 

(1) Command Prompt  - 개발자용

 

 

 

 

 

mysql -u root -p

password : !123456

 

 

 

 

 

 

 

(2) MySQL Client  - 관리자용

 

 

관리자용

 

 

 

(3) HeidiSQL

 

 

 

 

2. 접속 명령어

데이터베이스

            테이블

                        레코드 / 컬럼

            테이블

 

대소문자 신경 안씀

 

 

(1) 데이터베이스  목록  명령어

show databases;

 

(2) 사용할 데이터베이스 선택 명령어

use 데이터베이스명;

use mysql;  

 

 

(3) 테이블 목록 보기 명령어

show tables;

 

 

(4) 테이블에 대한 규정/구조 (스키마) 보기 명령어

describe 테이블명;

describe user;

약자 -> desc

 

 


 

 

 

 

 

 

 

 

 

SQL


내용 조회

 

DML - Data Manipulation(조작) Lang.

               select      -  데이터 검색

               insert      -  데이터 삽입

               update   -  데이터 수정

               delete     -  데이터 삭제

DDL - Data Definition(정의) Lang.

               Create         -  생성 ( 테이블 ...)

               Alter             -  수정

               Drop             -  삭제

               Rename      -  이름 변경

               Truncate    -  삭제

DCL - Data Control(제어) Lang.

                 ... 

TCL - Transaction Control(Lock) Lang.

 


 

 

 

 

 

 

 

 

 

maria DB 실습


 

 

 

* 데이터베이스 생성

create database sample;

use sample;

 

 

* 테이블 생성

CREATE TABLE dept ( 
deptno      int(2) primary key,
dname       varchar(14),
loc         varchar(13)
);

CREATE TABLE emp ( 
empno       int(4) primary key,
ename       varchar(10),
job         varchar(9),
mgr         int(4),
hiredate    date,
sal         numeric(7,2),
comm        numeric(7,2),
deptno      int(2)
);

create table salgrade(
grade       int(1),
losal       numeric(7,2),
hisal       numeric(7,2)
);

 

 

* 데이터 입력
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-2011','%d-%m-%Y'), 5000, null, 10);
insert into emp values( 7698, 'BLAKE', 'MANAGER', 7839, STR_TO_DATE('1-5-2011','%d-%m-%Y'), 2850, null, 30);
insert into emp values( 7782, 'CLARK', 'MANAGER', 7839, STR_TO_DATE('9-6-2011','%d-%m-%Y'), 2450, null, 10);
insert into emp values( 7566, 'JONES', 'MANAGER', 7839, STR_TO_DATE('2-4-2011','%d-%m-%Y'), 2975, null, 20);
insert into emp values( 7788, 'SCOTT', 'ANALYST', 7566, STR_TO_DATE('13-7-2017','%d-%m-%Y') , 3000, null, 20);
insert into emp values( 7902, 'FORD', 'ANALYST', 7566, STR_TO_DATE('3-12-2011','%d-%m-%Y'), 3000, null, 20);
insert into emp values( 7369, 'SMITH', 'CLERK', 7902, STR_TO_DATE('17-12-2010','%d-%m-%Y'), 800, null, 20);
insert into emp values( 7499, 'ALLEN', 'SALESMAN', 7698, STR_TO_DATE('20-2-2011','%d-%m-%Y'), 1600, 300, 30);
insert into emp values( 7521, 'WARD', 'SALESMAN', 7698, STR_TO_DATE('22-2-2011','%d-%m-%Y'), 1250, 500, 30);
insert into emp values( 7654, 'MARTIN', 'SALESMAN', 7698, STR_TO_DATE('28-09-2011','%d-%m-%Y'), 1250, 1400, 30);
insert into emp values( 7844, 'TURNER', 'SALESMAN', 7698, STR_TO_DATE('8-9-2011','%d-%m-%Y'), 1500, 0, 30);
insert into emp values( 7876, 'ADAMS', 'CLERK', 7788, STR_TO_DATE('13-7-2017', '%d-%m-%Y'), 1100, null, 20);
insert into emp values( 7900, 'JAMES', 'CLERK', 7698, STR_TO_DATE('3-12-2011','%d-%m-%Y'), 950, null, 30);
insert into emp values( 7934, 'MILLER', 'CLERK', 7782, STR_TO_DATE('23-1-2012','%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);

 

 

 

 

 

---
create index idx_emp on emp ( deptno );

alter table emp add constraint fk_emp_dept foreign key ( deptno ) references dept( deptno ) on delete no action on update no action;

 


 

 

 

 

 

 

 

 

 

DML - select


select * from dept;

select * (엔터)

from dept;

 

select 컬럼명 from dept;

 

 

1. alias

select deptno as 부서번호, dname as 부서이름 from dept;

select deptno as '부서 번호', dname as '부서 이름' from dept;

select deptno '부서 번호', dname '부서 이름' from dept;

불러올땐

select '부서번호' from dept;

select "부서번호" from dept;

 

 

2. 산술연산

 

3. NULL   

 

 

4. 중복 제거  -  distinct

 

부서별로 직책을 중복되지 않게 보고 싶을 때

 

 

5. 검색 행 제한   -   where

select 컬럼명...

from 테이블명

where 컬럼 비교연산자 값 and/or 컬럼 비교연산자 값

  • 비교연산자 : =, !=, > >=, <=, <
  • 논리연산자 : and, or, !

항상 컬럼이 앞에 와야한다 

ex ) sal <= 1000 (O)   , 1000 >= sal (X)

 

부서번호가 20번인 사원에 대한 정보
급여가 1000이상 사원에 대한 사원번호, 사원이름, 급여, 부서번호  
사원이름이 king인 사원에 대한 사원번호, 사원이름, 부서번호

숫자는 상관없는데 문자는  ''를 붙여줘야한다.

maria DB는 대소문자 안가리지만 그래도 문자일때 대소문자면 그걸 구분해서 써주는게 좋다. 

다른 DB는 대소문자를 구분하는 게 있기때문에...

 

 

날짜비교도 가능하다.

 

입사일이 2011-09-08인 사원에 대한 사원번호, 사원이름, 부서번호

 

알파벳의 ascii 코드값 가지고도 비교가 가능하다.

 

사원이름이 b 이상으로 시작하는 사원에 대한 사원번호, 사원이름, 부서번호, 입사일자

 

비교연산자 사용시 앞에 칼럼값이 와야해서 1000 <= sal <= 2000이 안되기 때문에 둘로 나눠야한다.

 

급여가 1000 이상이고 2000 이하인 사원에 대한 사원번호, 사원이름, 급여, 부서번호
2011년에 입사한 사원의 사원번호, 사원이름, 입사일자, 부서번호

 

728x90
Comments