[강의] MySQL 데이터베이스 한번에 끝내기

송히·2024년 2월 27일
0

개발 공부 🐨

목록 보기
7/15
post-thumbnail

강의: 기초 데이터 분석을 위한 핵심 SQL

SQL 기본 구조

  • SQL: Structured Query Language의 약자, 관계형 데이터베이스에 있는 데이터를 분석하는 언어

  • 관계형 데이터베이스 (RDB): Relational DataBase의 약자, 행과 열로 구성된 테이블이 다른 테이블과 관계를 맺고 모여있는 집합체

    즉, SQL로 RDB를 다루는 것 !!

  • MySQL Server: 오라클에서 관리 및 지원하는 오픈 소스 관계형 데이터베이스
    ➡️ Workbench: MysQL Server를 관리하기 위한 소프트웨어 (SQL 실행 및 결과 확인 가능)
    workbench


SQL 명령어

SQL 기본 명령어 4가지

  • 쿼리문은 대소문자 구분 없음 (그래서 다 대문자로 씀)
기본 명령어역할
데이터 정의어테이블 생성, 변경, 삭제
데이터 조작어데이터 삽입, 조회, 수정, 삭제
데이터 제어어데이터 접근 권한 부여, 제거
트랜젝션 제어어데이터 조작어 명령어 실행, 취소, 임시저장

1. 데이터 정의어 (DDL)

: 테이블 생성, 변경, 삭제 명령어

  • 테이블의 데이터 타입: 숫자형, 문자형, 날짜형, 논리타입 (0 / 1)
    ➡️ 각 테이블의 열은 1가지 데이터 타입만 가짐

  • 각 열마다 제약조건을 정의할 수 있음

// 데이터 베이스 생성
CREATE DATABASE 데이터베이스명;

// 데이터베이스 사용
USE 데이터베이스명;

// 데이터베이스의 테이블 생성
CREATE TABLE 테이블명(
	회원번호 INT PRIMARY KEY, // 열이름 | 타입(제한 바이트 수) | (제약조건)
	이름 VARCHAR(20),
	가입일자 DATE NOT NULL,
	수신동의 BIT
);

---

// 테이블 조회
SELECT * FROM 테이블명; // *은 전체 라는 뜻

---

// 테이블명 변경
ALTER TABLE 테이블명 RENAME 바꿀테이블명;

// 테이블에 열 추가
ALTER TABLE 테이블명 ADD 열이름 타입;

// 테이블 속 열 타입 변경
ALTER TABLE 테이블명 MODIFY 열이름 타입;

// 테이블 열 이름 변경
ALTER TABLE 테이블명 CHANGE 바꿀열이름 타입;

---

// 테이블 삭제
DROP TABLE 테이블명;

2. 데이터 조작어 (DML)

: 데이터 삽입, 조회, 수정, 삭제 명령어

  • 걸어둔 제약 조건을 위반하거나, 형식에 맞지 않게 데이터 삽입하면 오류 발생
// 테이블에 데이터 삽입
INSERT INTO 테이블명 VALUES (형식에 맞는 데이터들, 쉼표로 구분, ...)

// 테이블 모든 열 조회
SELECT * FROM 테이블명;

// 특정 열 조회
SELECT 특정열, 여러개도, 쉼표로, 구분하면, 한방에가능 FROM 테이블명;

// 특정 열 이름을 변경한 뒤 그 열 조회
SELECT 바뀌기전이름 AS 바꿀이름 FROM 테이블명;

---

// 테이블 속 모든 데이터 수정
UPDATE 테이블명 SET 바꿀열이름 = 바꿀데이터값;

// 특정 조건 데이터 수정
UPDATE 테이블명 SET 바꿀행이름 = 바꿀데이터값 WHERE 특정조건열이름 = 특정조건;

---

// 모든 데이터 삭제
DELETE FROM 테이블명;

// 테이블 속 특정 데이터 삭제
DELETE FROM 테이블명 WHERE 삭제할조건 = 삭제할특정조건;

3. 데이터 제어어 (DCL)

: 데이터 접근 권한 부여, 제거 명령어, DBA가 주로 사용함 (참고사항😉)

// 사용자 아이디 및 비번 생성
CREATE 테이블명 '아이디'@LOCALHOST IDENTIFIED BY '비번'; // @LOCALHOST는 로컬에서 접속 가능하다는 뜻

// 비번 변경
SET PASSWORD FOR '아이디'@LOCALHOST = '새로운비번';

--- 

// 특정 권한 부여
GRANT SELECT / DELETE / (...권한명들) ON 데이터베이스명.테이블명 TO '아이디'@LOCALHOST;

// 특정 권한 제거
REVOKE DELETE ON 데이터베이스명.테이블명 FROM '아이디'@LOCALHOST;

// 모든 권한 부여
GRANT ALL ON 데이터베이스명.테이블명 TO '아이디'@LOCALHOST;

// 모든 권한 제거
REVOKE ALL ON 데이터베이스명.테이블명 FROM '아이디'@LOCALHOST;

---

// 사용자 삭제
DROP USER '아이디'@LOCALHOST;

4. 트랜젝션 제어어 (TCL)

: 데이터 조작어 명령어 실행, 취소, 임시저장 명령어

트랜젝션(Transaction): 분할할 수 없는 최소 단위, 논리적인 작업 단위 (실행 혹은 취소만 있음)
➡️ 임시 저장소인 SAVE POINT(ROLLBACK 저장점) 지정 가능

// 트랜젝션 시작
BEGIN;

// 데이터 삽입
INSERT INTO 테이블명 VALUES (데이터들, 쉼표로, 형식맞춰서);

// 취소 -> 삽입이 취소된 것 !
ROLLBACK;

---

// 트랜젝션 시작
BEGIN;

// 데이터 삽입
INSERT INTO 테이블명 VALUES (데이터들, 쉼표로, 형식맞춰서);

// 실행 -> 삽입이 실행된 것
COMMIT;

---

// SAVE POINT 지정
SAVEPOINT 포인트명;

// SAVE POINT로 돌아가기
ROLLBACK TO 포인트명;

SQL 문법

SELECT - 데이터 조회

  • 데이터 조작어, 분석에 필요한 데이터 조회
  • 여러 절들과 함께 사용됨

5가지 절 + SELECT

역할
FROM테이블 확인
WHERE테이블을 특정 조건으로 필터링
➡️ WHERE 열이름 IN (조건1, 조건2, 리스트들...) 으로 특정 조건 여러 개 필터링도 가능
GROUP BY열 별로 그룹화 (기존 테이블이 새로운 테이블로 변환됨)
➡️ 주로 집계함수와 함께 사용됨, 여러 열별로 그룹화 가능
HAVING그룹화된 새로운 테이블을 특정 조건으로 필터링
SELECT열 조회
ORDER BY열 정렬
SELECT ADDR, COUNT (MEM_NO) AS 회원수 // 그룹화하는 열 이름을 SELECT 뒤에도 써줘야함 (제대로 그룹화했는지 확인해야함)
FROM CUSTOMER
WHERE GENDER = 'MAN'
GROUP BY ADDR
HAVING COUNT (MEM NO) < 100
ORDER BY COUNT (MEM_NO) DESC;

JOIN - 테이블 결합

  • 관계의 종류: 1:1 / 1:N / N:N

  • ERM(Entity-Relationship Modeling): 개체-관계 모델링, 관계형 데이터베이스에 테이블을 모델링할 때 사용

  • ERD(Entity-Relationship Diagram): 개체 간의 관계를 도표로 표현할 때 사용

// 두 테이블의 공통 값이 매칭되는 데이터만 결합 -> INNER JOIN
SELECT * FROM CUSTOMER AS A
INNER JOIN SALES AS B
ON A.MEN_NO = B.MEN_NO; // 조건

// 두 테이블의 공통 값이 매칭되는 데이터만 결합 + 매칭되는 않는 왼쪽 테이블 데이터는 NULL로 표시(왼쪽은 있고 오른쪽 값만 없는 경우) -> LEFT JOIN
SELECT * FROM CUSTOMER AS A
LEFT JOIN SALES AS B
ON A.MEN_NO = B.MEN_NO;

// 두 테이블의 공통 값이 매칭되는 데이터만 결합 + 매칭되는 않는 오른쪽 테이블 데이터는 NULL로 표시(오른쪽은 있고 왼쪽 값만 없는 경우) -> RIGHT JOIN
SELECT * FROM CUSTOMER AS A
RIGHT JOIN SALES AS B
ON A.MEN_NO = B.MEN_NO
WHERE A.MEN_NO IS NULL;

// 결합된 테이블을 하나의 임시 테이블로 저장, 서버 연결 종료시 자동 삭제됨
CREATE TEMPORARY TABLE 임시테이블명 // 아래로는 만들 테이블 내용 적기~
SELECT A.*, B.ORDER_NO // A(CUSTOMER)의 전부와 B(SALES)의 ORDER_NO만
FROM CUSTOMER AS A
INNER JOIN SALES AS B
ON A.MEN_NO = B.MEN_NO;

// 3개 이상의 테이블 결합 -> 1번-2번 먼저 공통된 조건으로 JOIN 후, 1번-3번도 공통된 조건으로 JOIN
SELECT FROM SALES AS A
LEFT JOIN CUSTOMER AS B
ON A.MEM_NO = B.MEM_NO // A와 B는 조건이 MEM_NO
LEFT JOIN PRODUCT AS C
ON A.PRODUCT_CODE = C. PRODUCT_CODE; // A와 C는 조건이 PRODUCT_CODE
profile
데브코스 프론트엔드 5기

0개의 댓글

관련 채용 정보