개발하는 무민

[코드프레소] Java 웹개발 트랙 체험단 - 처음 시작하는 SQL 프로그래밍 본문

Project/[코드프레소] JAVA웹개발트랙

[코드프레소] Java 웹개발 트랙 체험단 - 처음 시작하는 SQL 프로그래밍

무민_ 2022. 2. 4. 18:27

데이터베이스 소개

데이터베이스란 무엇인가?

데이터는 다양한 방법으로 관리가 가능하다. (파일, 엑셀 등)

여러 사람이 공유하여 사용할 목적으로, 통합하여 관리되는 데이터의 집합

자료 항목의 중복을 없애고 자료를 구조화하여 저장함으로써 자료 검색과 갱신의 효율성을 높인다.

 

 

DBMS (DataBase Management System)

데이터베이스를 관리하기 위한 프로그램.

 

SQL 소개

SQL이란 무엇인가?

SQL (Structured Query Language)

데이터베이스에 데이터를 요청하는 언어이다.

인간과 데이터베이스간의 언어이다.

 

SQL은 문법이 단순해서 배우기 쉽다.

SQL은 ANSI, ISO 표준을 따른다. (누구나 따라야 함)

각 DBMS마다 자기만의 방언을 가진다. (데이터베이스마다 고유의 언어가 약간 있다)

핵심 문법은 유사하다.

 

인공지능의 발전 등에 따라서 SQL이 상위에 랭크되고 있음.

분석과 처리에 많이 사용됨.

 

MySQL 소개

MySQL이란?

오픈소스 RDMS이다.

가장 많이 사용되는 DBMS중 하나이다.

페이스북 초기에 얘를 사용함

 

데이터가 실제 저장되는 데이터베이스 서버가 있고, 클라이언트의 요청을 받아서 저장하거나 조회한 내용을 보여주거나 한다.

클라이언트는 사용자와 상호작용한다. (GUI 기반, 커맨드라인 기반의 클라이언트 등 종류가 다양하다)

이게 일반적인 구조이다.

 

 


02강. 실습 환경 구성

Windows 에서 MySQL 설치

https://dev.mysql.com/downloads/file/?id=510039

 

MySQL :: Begin Your Download

The world's most popular open source database

dev.mysql.com

설치할 때 데이터베이스 오류가 나서 PC 이름 영문으로 바꾸고 계속 재설치 시도를 여러번 했다..

 

Workbench의 활용법

MySQL을 다루기 위한 도구

SQL 작성, 실행, 결과 조회 가능

CSV파일 export, import 가능

그 외 MySQL 관리 기능 제공

 

워크벤치 설치하는데 환경변수, WMI 등의 오류가 너무 많이나서 온갖 방법 다 써보느라 강의까지 밀렸다.

어떻게 해결한건진 모르겠는데 여러번 설치하고 cmd 통해서 낮은 버전의 sql(8.0.20)을 설치한 다음

워크벤치도 버전을 낮춰서 설치하니까 일단 되기는 하는거 같았다.

 

나를 3일간 고생시킨 워크벤치 ....

 


03강. SQL 명령어를 이용한 데이터 정의

데이터베이스의 구성요소

데이터베이스의 주요 구성 요소

Schema : application 마다 1개가 있다.

Table : 각 application의 세부 기능마다 정의한다. 스키마 내부에 여러개의 테이블이 있다.ㄴ

Column : 각 기능에 필요한 요소들

Row : 데이터 1건 (Record)

 

엑셀과 비교한다면,

스키마 : 엑셀 파일 1개

테이블 : 시트1개

컬럼 : 열

로우 : 행

 

 

주요 구성 요소의 예

스키마 : 게시판 어플리케이션

유저 테이블 : 유저 관련 컬럼

포스트 테이블 : 포스트 관련 컬럼

리플레이 테이블 : 리플레이 관련 컬럼

 

MySQL의 데이터 타입

주요 데이터 타입

데이터 타입 : 칼럼에 어떠한 형태의 자료를 저장할지 미리 결정한 것

ex.

숫자 - 정수형, 실수형

나이, 점수, 가격, 유니크한 id 등

문자 - 고정 문자형, 변동 문자형

이름, 성별, 상품명 등 ..

날짜/시간 - 날짜형, 시간형, 날짜시간형 ..

저장하는 시점의 날짜 시간, 수정하는 시점의 날짜 시간 등

 

데이터베이스 Schema 생성

Schema 생성

테이블 생성 전 스키마 생성이 선행되어야 함.

워크벤치에서 스키마 생성

 

 

데이터베이스 Table 생성

테이블 생성

 

테이블 생성시 옵션 약어

PK : 테이블 당 1개만 존재 가능(프라이머리 키), 유니크한 값. (Not Null 필수.)

NN : Not Null, 데이터가 반드시 저장되어야 함

UQ : 유니크한 값 (Null 가능), 중복되면 안됨

UN : Unsigned

AI : Auto Increment, 자동으로 값이 늘어남

Default : 디폴트 값

 

예제 데이터를 이용한 Table 생성 실습

다운로드 받은 파일에서 create의 내용을 쿼리에 복붙해줌.

쿼리가 실제 SQL문을 작성하는 공간이다.

populate 파일도 동일하게 진행해줌.

 

SQL문을 모두 선택한 뒤 번개 모양 버튼을 누르면 SQL문이 모두 실행된다.

새로고침 버튼을 누르면 쿼리문으로 인해 생성된 테이블들을 확인할 수 있다.

 

INSERT 명령어를 이용한 데이터 추가

populate 파일은 데이터를 생성해주는 쿼리이다.

 

INSERT INTO

기존 테이블에 새로운 row를 추가한다.

 

한 테이블에 컬럼이 여러개가 있으면 그 컬럼명을 적어주고,

모든 컬럼에 추가할거면 안적어줘도 됨

Value 안에 데이터를 넣어주면 매핑이 된다.

컬럼 개수와 value 개수를 일치하게 넣어주어야한다.

 

-- popilate 파일 내용 예시 --

INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)
VALUES('1000000001', 'Village Toys', '200 Maple Lane', 'Detroit', 'MI', '44444', 'USA', 'John Smith', 'sales@villagetoys.com');
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact)
VALUES('1000000002', 'Kids Place', '333 South Lake Drive', 'Columbus', 'OH', '43333', 'USA', 'Michelle Green');
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)
VALUES('1000000003', 'Fun4All', '1 Sunny Place', 'Muncie', 'IN', '42222', 'USA', 'Jim Jones', 'jjones@fun4all.com');
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)
VALUES('1000000004', 'Fun4All', '829 Riverside Drive', 'Phoenix', 'AZ', '88888', 'USA', 'Denise L. Stephens', 'dstephens@fun4all.com');
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact)
VALUES('1000000005', 'The Toy Store', '4545 53rd Street', 'Chicago', 'IL', '54545', 'USA', 'Kim Howard');

이런식으로!

 

 

 


04강. SQL 명령어를 이용한 데이터의 조회

SELECT 명령어를 이용한 데이터의 조회

데이터 조회

SELECT문을 사용하여 테이블의 데이터를 조회할 수 있다.

SELECT 뒤에는 조회를 원하는 컬럼명을 기재하고,

From은 컬럼을 조회할 테이블의 정보를 입력해준다.

 

-- 데이터 조회 예제

SELECT cust_id, cust_name
FROM Customers;

SELECT vend_id, vend_address, vend_state
FROM Vendors;

 

-- 연습문제
-- Customer 테이블에서 cust_id, cust_address, cust_city 컬럼 조회하기
SELECT cust_id, cust_address, cust_city
FROM customers;

-- Product 테이블에서 prod_id, prod_name, prod_price 컬럼 조회하기
SELECT prod_id, prod_name, prod_price
FROM products;

-- Orders 테이블에서 order_num, order_date, cust_id 컬럼 조회
SELECT order_num, order_date, cust_id
FROM orders;

 

전체 컬럼 조회하기

SELECT 문에 *별 을 사용하여 전체 컬럼을 조회할 수 있다.

-- 전체 컬럼 조회하기
SELECT *
FROM customers;
-- 연습문제
-- Vendors 테이블에서 전체 컬럼 데이터 조회
SELECT *
FROM Vendors;

-- Products 테이블에서 전체 컬럼 데이터 조회
SELECT *
FROM Products;

 

WHERE 절을 이용한 데이터 필터링

데이터 필터링

where 절을 이용하여 원하는 조건으로 데이터(Row)를 필터링 할 수 있다.

where절 다음에 원하는 조건을 명시해준다.

where절은 select 문 외에 update, delete 문에서도 사용 가능하다.

 

데이터 필터링 예제

where 다음에 조건을 입력해서 조회해준다.

문자열에는 따옴표 ‘ 가 들어가지만, 숫자열에는 따옴표를 따로 붙여주지 않는다.

-- 데이터 필터링 예제
SELECT *
FROM Customers
WHERE cust_state = 'MI';

SELECT *
FROM Orders
WHERE order_num = 20005;

컬럼을 따로 기재해주지 않고, 모든 컬럼에서 검색하는 것이 편하니까 *을 넣어서 모든 컬럼을 지정해준다.

 

-- 연습문제
-- Products 테이블에서 vend_id가 'BRS01'인 데이터 조회
SELECT *
FROM Products
WHERE vend_id = 'BRS01';

-- OrderItems 테이블에서 order_item이 1인 데이터 조회
SELECT *
FROM OrderItems
WHERE order_item = 1;

 

비교 연산자를 이용한 데이터 필터링

비교연산자

같음 : =

같지 않음 : <>

큼 : >

작음 : <

크거나 같음 : >=

작거나 같음 : <=

 

비교 연산자 예제

-- 비교연산자 예제
-- Customer 테이블에서 cust_state가 'MI'가 아닌 데이터 조회
SELECT *
FROM Customers
WHERE cust_state <> 'MI';

-- Orders 테이블에서 order_num이 20007보다 큰 데이터 조회
SELECT *
FROM Orders
WHERE order_num > 20007;

웨어 절에 다양한 연산자를 사용할 수 있다.

 

-- 연습문제
-- Odrers 테이블에서 order_num이 20007보다 작거나 같은 데이터 조회
SELECT *
FROM Orders
WHERE order_num <= 20007;

-- Customers 테이블에서 cust_name이 'Fun4All'이 아닌 데이터 조회
SELECT *
FROM Customers
WHERE cust_name <> 'Fun4All';

-- OrderItems 테이블에서 order_item이 5보다 크거나 같은 데이터 조회
SELECT *
FROM OrderItems
WHERE order_item >= 5;

 

AND 연산자를 이용한 데이터 필터링

조건의 결합 - AND/OR 연산자

하나 이상의 조건들을 결합해서 필터링 할 수 있다.

AND 연산자 : 주어진 조건을 모두 만족시키는 데이터만 조회

OR 연산자 : 주어진 조건 중 하나 이상 만족시키는 데이터 조회

 

AND 연산자

주어진 모든 조건들을 다 만족시키는 데이터 조회

-- AND 연산자 예제
-- 이름이 Fun4All 이면서 IN 주에 거주하는 고객 조회
SELECT *
FROM customers
WHERE cust_name = 'Fun4All' AND cust_state = 'IN';

-- 미국 뉴욕주에 있는 벤더 조회
SELECT *
FROM Vendors
WHERE Vend_country = 'USA' AND vend_state = 'NY';

 

-- 연습문제
-- 미국 캘리포니아 주에 있는 벤더 조회
SELECT *
FROM Vendors
WHERE vend_country = 'USA' AND vend_state = 'CA';

-- 미국 IL 주에 거주하는 고객 조회
SELECT *
FROM customers
WHERE cust_country = 'USA' AND cust_state = 'IL';

-- 벤더 아이디가 BRS01이면서 가격이 6 이상인 제품 조회
SELECT *
FROM products
WHERE vend_id = 'BRS01' AND prod_price >= 6;

-- 주문번호가 20005 이면서 수량이 100임녀서 가격이 5보다 큰 주문아이템 조회
SELECT *
FROM orderitems
WHERE order_num = 20005 AND quantity = 100 AND item_price >= 5;

 

OR 연산자를 이용한 데이터 필터링

OR 연산자

주어진 조건 중하나라도 만족시키는 데이터 조회

 

-- OR 연산자 예제
-- MI 주에 거주하거나 OH 주에 거주하는 고객 조회
SELECT *
FROM Customers
WHERE Cust_state = 'MI' OR cust_state = 'OH';

-- 미국에 있거나 프랑스에 있는 벤더 조회
SELECT *
FROM vendors
WHERE vend_country = 'USA' OR vend_country = 'France';
-- 연습문제
-- 가격이 5보다 작거나 9보다 큰 제품 조회
SELECT *
FROM products
WHERE prod_price < 5 OR prod_price > 9;

-- 벤더 아이디가 'BRS01'이거나 'DLL01'인 벤더 조회
SELECT *
FROM vendors
WHERE vend_id = 'BRS01' OR vend_id = 'DLL01';

-- 이름이 'Village Toys' 이거나 'Fun4All' 이거나 'The Toy Store'인 고객 조회
SELECT *
FROM customers
WHERE cust_name = 'Village Toys' OR cust_name = 'Fun4All' OR cust_name = 'The Toy Store';

 


https://www.codepresso.kr/

 

노션 정리본 : https://rapid-run-744.notion.site/04-SQL-099ec8b83bf64551b17edfa97312bcf7

 

04강. SQL 명령어를 이용한 데이터의 조회

SELECT 명령어를 이용한 데이터의 조회

rapid-run-744.notion.site

 

정말 이번에는 MySQL 설치 때문에 애를 많이 먹었다.

프로그래밍은 처음에 환경설정하는게 제일 어려운거 같다 정말 ....