본문 바로가기

STUDY/국비과정

[JAVA 웹 개발 공부] 국비지원 39일차 - 데이터베이스(DB), MySQL

프로젝트에 jar파일 추가하기

 

이클립스에서 내가 프로젝트 내에 있는 특정 클래스를 다른 프로젝트의 클래스에서 라이브러리처럼 사용하고 싶을 때 Jar파일로 압축하여 사용할 수 있다.

 

*외부에서 jar파일 가져와서 다른 프로젝트에서 사용하기

프로젝트 우클릭 > Properties > Java Build Path > Libraries 탭 > Add External JARs > Apply and Close > jar 파일 선택 >import문 추가

 

*다른 프로젝트내에 있는 클래스 사용하기

프로젝트 우클릭 > Properties > Projects 탭 > Add > 프로젝트 선택 > Apply and Close > import문 추가

 

 

데이터베이스(DB)

 

1. 데이터베이스

데이터베이스를 한 마디로 정의하면 ‘데이터의 집합’이라고 할 수 있다.

이는 중복된 데이터를 없애고, 자료를 구조화하여, 효율적인 처리를 할 수 있도록 관리된다.

따라서, 여러 업무에 여러 사용자가 데이터 베이스를 사용할 수 있다.

 

2. 데이터베이스의 장점

*데이터의 중복 제거

*원하는 정보를 쉽게 검색

*인증과 권한 → 데이터 보안유지에 도움

*조직화된 데이터 구성 → 데이터 유지하는데 편리

 

3. DBMS

데이터베이스를 관리하고 운영하는 소프트웨어를 DBMS(Database Management System)라고 합니다. 다양한 데이터가 저장되어 있는 데이터베이스는 여러 명의 사용자나 응용 프로그램과 공유하고 동시에 접근이 가능해야 한다.

 

4. DBMS의 분류

DBMS의 유형은 계층형(Hierarchical), 망형(Network), 관계형(Relational), 객체지향형(Object-Oriented), 객체관계형(Object-Relational) 등으로 분류된다. 현재 사용되는 DBMS 중에는 관계형 DBMS가 가장 많은 부분을 차지하며, MySQL도 관계형 DBMS에 포함된다. 

관계형 DBMS(Relational DBMS)는 줄여서 RDBMS라고 부른다. MySQL뿐만 아니라, 대부분의 DBMS가 RDBMS 형태로 사용된다. RDBMS의 데이터베이스는 테이블(table)이라는 최소 단위로 구성되며, 이 테이블은 하나 이상의 열(column)과 행(row)으로 이루어져 있다.

 

 

서버-클라이언트(server-client)

 

서버-클라이언트(server-client) 구조란 데이터를 저장하고 관리하는 서버 부분과 해당 서버에 접속하여 데이터를 열람하는 클라이언트 부분으로 구성된 네트워크 구조를 말한다.

 

서버(server)란 통신망 상에서 다른 컴퓨터에 대하여 회선, 디스크 장치 등에 대한 접속을 제어하는 관리소프트웨어 또는 컴퓨터를 말한다. 서버는 그 역할에 따라 웹(Web) 서버, 와스(WAS) 서버, 디비(DB) 서버 등이 있다. 

 

클라이언트(client)란 네트워크를 이용하여 서버 시스템에 연결된 PC나 스마트폰 등 사용자 측을 말한다. 클라이언트는 서버에서 받아온 데이터를 단말기 화면에 표시하고 사용자의 요청을 서버에 전달하기 위해 웹브라우저를 사용한다.

 

서버는 데이터 관리하는 주체이며, 서버의 데이터들은 네트워크(연결망, 인터넷)를 기반으로 Client 프로그램으로 접속한다. 보안을 위해 인증과 권한을 확인하는 절차가 있을 수 있으며, 접속 후에는 Client 프로그램에서 명령어를 통해 데이터를 조작하려고 서버에 부탁하고, 서버는 수행결과를 반환하는 형식으로 구성되어있다.

 

데이터 조작 요청하는 명령어 → 하나의 언어로 구성

데이터베이스를 조작하는 언어 → SQL

 

 

SQL

 

SQL 관계형 데이터베이스에서 사용하기 위하여 설계된 언어이다. 표준적인 SQL 명령어들이 있으며 이것은 모든 관계형 데이터베이스에 의하여 지원된다. 

SQL 명령어들은 두 가지의 카테고리로 나누어진다. 

데이터 정의 명령어(Data Definition Language)들은 테이블을 생성하거나 변경한다.

데이터 조작 명령어(Data Manipulation Language)는 데이터를 추출, 추가, 삭제, 수정한다.

구분 명령어 설명
데이터 정의 명령어
(Data Definition Language)
CREATE 사용자가 제공하는 컬럼 이름을 가지고 테이블을 생성한다. 사용자는 컬럼의 데이터 타입도 지정하여야 한다. 데이터 타입은 데이터베이스에 따라 달라진다. CREATE TABLE은 보통 DML보다 적게 사용된다. 왜냐하면 이미 테이블이 만들어져 있는 경우가 많기 때문이다.
ALTER 테이블에서 컬럼을 추가하거나 삭제한다.
DROP 테이블의 모든 레코드를 제거하고 테이블의 정의 자체를 데이터베이스로부터 삭제하는 명령어이다.
USE 어떤 데이터베이스를 사용하는지를 지정한다.
데이터 조작 명령어
(Data Manipulation Language)
SELECT 데이터베이스로부터 데이터를 쿼리하고 출력한다. SELECT 명령어들은 결과 집합에 포함시킬 컬럼을 지정한다. SQL 명령어 중에서 가장 자주 사용된다.
INSERT 새로운 레코드를 테이블에 추가할 때 사용된다.
DELETE 지정된 레코드를 테이블로부터 삭제한다.
UPDATE 테이블에서 레코드에 존재하는 값을 변경한다.

 

 

MySQL 설치

 

https://dev.mysql.com/downloads/

 

MySQL :: MySQL Community Downloads

The world's most popular open source database Contact MySQL  |  Login  |  Register

dev.mysql.com

*Workbench - 삭제 옵션 설정
Edite > Preferences > SQL Editors > Safe Updates 해제 > OK

 

 

MySQL 기본 명령어

 

명령어 설명
USE DB 사용 명령어 
SHOW DB, 테이블을 보는 명령어
CREATE DB, 테이블을 만드는 명령어
SELECT 데이터를 보는 명령어
INSERT 레코드를 삽입하는 명령어
UPDATE 데이터를 업데이트하는 명령어
DELETE 레코드를 삭제하는 명령어
DROP DB, 테이블을 삭제하는 명령어
ALTER 각종정보를 수정하는 명령어

 

 

MySQL 연습

 

*기본 연산

select 50 + 20;
select 2 * 4;
select 60 / 2;
select 7 % 4;
 -- true:1 false:0
select 30 < 50;
select 40 != 40;
select 40 <> 30;
-- 행 (row), 열 (Column)
SELECT * FROM country;

-- 모든 정보 다보여달라할 때 *
SELECT Name, Population FROM country; -- 행의 개수는 그대로, 열(Column)만 정해서 정보보기

-- country 테이블에서 Code 열, GNP 열 조회
SELECT Code, GNP FROM country;

 

*테이블 정보 조회

DESC city;

-- city 테이블의 5개의 컬럼을 조회해보세요.
SELECT * FROM city;
SELECT ID, Name, CountryCode, District, Population FROM city;


SELECT * FROM country;
SELECT * FROM country WHERE Name = 'South Korea';
-- country 테이블의 Name 컬럼 값이 'Japan'인 행의 모든 컬럼 조회하기
SELECT * FROM country WHERE Name = 'Japan';
SELECT * FROM country WHERE Continent = 'Asia';
-- 한 중 일 3행 조회하기
SELECT * FROM country WHERE Name = 'South Korea' OR Name = 'China' OR Name = 'Japan';
SELECT * FROM country WHERE Name IN ('South Korea', 'China', 'Japan');

-- Population 컬럼 값이 40,000,000 이상인 국가 조회하기(모든 컬럼)
SELECT * FROM country WHERE Population >= 40000000;

-- 인구 40,000,000 이상 50,000,000 이하
SELECT * FROM country WHERE Population >= 40000000 AND Population <= 50000000;
SELECT * FROM country WHERE Population BETWEEN 40000000 AND 50000000;

-- Continent 컬럼 값이 Asia, North America를 제외한 국가들 조회
SELECT * FROM country WHERE Continent <> 'Asia' AND Continent <> 'North America';
SELECT * FROM country WHERE Continent NOT IN ('Asia', 'North America');

-- GNP 값이 100~1000 범위가 아닌 국가들 조회
SELECT * FROM country WHERE GNP NOT BETWEEN 100 AND 1000;

 -- Continent Asia, North America, Europe을 제외한 국가들 중
 -- 인구가 10,000,000 이상인 국가들 조회하기
 SELECT * FROM country WHERE Continent NOT IN ('Asia', 'North America', 'Europe') 
 AND Population >= 10000000;

 

*round 반올림

 -- 국가명(Name), 인구(Population), 면적(SurfaceArea), 인구 / 면적
 -- 인구가 0보다 큰 국가들만.
 select Name, Population, SurfaceArea, round(Population / SurfaceArea, 1) as "인구 밀도" 
 from country 
 where Population > 0;

 

*null

 select null / 4; -- null은 모든 연산을 해도 null
 select Code, Name, GNP, GNPOld, GNP - GNPOld as "GNP 변화량" from country where GNPOld is not null;

 

*정렬

select Code, Name, Population 
from country 
where Population <> 0 
order by Population desc; -- desc 내림차순 정렬// asc 오름차순

-- LifeExpectancy 오름차순으로 조회
select Name, LifeExpectancy
from country 
where LifeExpectancy is not null
order by LifeExpectancy asc;

-- Name, Population, SurfaceArea, Population / SurfaceArea (인구밀도) 인구밀도의 내림차순
select Name, Population, SurfaceArea, Population / SurfaceArea as '인구밀도' 
from country 
order by `인구밀도` desc;
select * from country order by Population desc limit 10 offset 10; 
-- limit이 가장 마지막에 와야함! offset 10 -> 11등부터 볼 수 있음

-- SurfaceArea 면적이 큰 탑 5개 국가 조회
select * from country order by SurfaceArea desc limit 5;

-- Continent 'Asia' 국가 중 면적이 좁은 탑10개 국가
select * from country where Continent = 'Asia' order by SurfaceArea asc limit 10;

 

*문자열 패턴매칭

-- 국가명에 'Korea'를 포함하고 있는 국가 찾기
select * from country where Name like '%Korea%'; 

-- 국가명이 'K'로 시작하는 국가
select * from country where Name like 'K%';
-- 국가명이 'K'로 끝나는 국가
select * from country where Name like '%K';
-- 국가명에 'K'가 포함되어 있는 국가
select * from country where Name like '%K%';

-- 국가명이 'A'로 시작하고 'A'로 끝나는 국가
select * from country where Name like 'A%A';

-- 국가명이 다섯글자인 국가
select * from country where Name like '_____';

-- 국가명이 'A'로 시작하고 'A'로 끝나는 국가 (6글자)
select * from country where Name like 'A____A';

 

*연습

-- hr 데이터베이스를 사용하기 위한 명령어 작성 후 실행
use hr;

-- hr 데이터베이스 테이블 목록 보기
show tables;

-- employees 테이블 구조 조회
desc employees;

-- employees 테이블의 모든 행과 모든 열 조회하기
select * from employees;

-- 직원 테이블의 First_Name이 `James`인 행 조회
select * from employees where FIRST_NAME = 'James';

-- 직원 테이블의 Last_Name이 'Jo'로 시작하는 행 조회
select * from employees where LAST_NAME like 'Jo%';

-- 직원 테이블의 First_Name이 6자이고 Last_Name도 6자인 행 조회
select * from employees where FIRST_NAME like '______' and LAST_NAME like '______';
select * from employees where char_length(FIRST_NAME) = 6 and char_length(LAST_NAME) = 6;

-- 직원 테이블의 First_Name과 Last_Name을 결합하여 하나의 컬럼 (Full_Name)이라는 별명으로 조회하기
select concat(FIRST_NAME, ' ', LAST_NAME) as 'Full_Name' from employees;

-- 직원 테이블의 Hire_Date가 1987년 07월인 행 조회
select * from employees where HIRE_DATE like '1987-07-%';
select * from employees where HIRE_DATE between '1987-07-01' and '1987-07-31';

-- 직원 테이블의 Salary열의 값이 10000이상 15000이하인 행 조회
select * from employees where SALARY between 10000 and 15000;

-- 직원 테이블의 Salary(연봉) 상위 10명 조회
select * from employees order by SALARY desc limit 10;

-- 직원 테이블의 연봉 11등 ~ 20등 조회
select * from employees order by SALARY desc limit 10 offset 10;

-- 직원 테이블 First_Name, Last_Name, Salary, (Salary의 6%를 연산) 'tax' 별명 모든 행 조회
select FIRST_NAME, LAST_NAME, SALARY, SALARY * 0.06 as 'tax' from employees;

 

*테이블 만들기

create database my_db;
show databases;
use my_db;
show tables;

-- 이름 / 나이
-- 고정길이 문자열 / 가변길이 문자열(사이즈에 맞게 조절됨. 불필요한 공간 할당 줄일수 있음. 용량 줄일 수 있음.)
create table person (
	name varchar(10), -- 이름 가변길이문자열(길이제한10)
	age int -- 나이 정수형
);
select * from person;
desc person;

-- 행 정보 저장
insert into person (name, age) values ("홍길동", 22);
insert into person (name, age) values ("브루스 리", 33);
insert into person (age, name) values (44, "스티븐 킹");
insert into person values ("톰 크루즈", 55);
insert into person (name) values ("이름만");
insert into person (age) values (66);


-- 책 테이블을 생성합니다.
-- 컬럼 구성
-- 제목 : 가변길이 문자열 (25자 제한)
-- 가격 : 정수
create table book (
	name varchar(25),
	price int
);
select * from book;
desc book;

-- 책 테이블에 3행을 추가합니다.
-- 파워자바 25000원 
-- 구의 증명 6480원
-- 모든 것은 기본에서 시작한다 11200원
insert into book (name, price) values ("파워자바", 25000);
insert into book (name, price) values ("구의 증명", 6480);
insert into book (name, price) values ("모든 것은 기본에서 시작한다", 11200);