SQL
: Structured Query Language의 약자, 관계형 데이터베이스에 있는 데이터를 분석하는 언어
관계형 데이터베이스 (RDB)
: Relational DataBase의 약자, 행과 열로 구성된 테이블이 다른 테이블과 관계를 맺고 모여있는 집합체
즉, SQL로 RDB를 다루는 것 !!
MySQL Server
: 오라클에서 관리 및 지원하는 오픈 소스 관계형 데이터베이스
➡️ Workbench: MysQL Server를 관리하기 위한 소프트웨어 (SQL 실행 및 결과 확인 가능)
기본 명령어 | 역할 |
---|---|
데이터 정의어 | 테이블 생성, 변경, 삭제 |
데이터 조작어 | 데이터 삽입, 조회, 수정, 삭제 |
데이터 제어어 | 데이터 접근 권한 부여, 제거 |
트랜젝션 제어어 | 데이터 조작어 명령어 실행, 취소, 임시저장 |
: 테이블 생성, 변경, 삭제 명령어
테이블의 데이터 타입: 숫자형, 문자형, 날짜형, 논리타입 (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 테이블명;
: 데이터 삽입, 조회, 수정, 삭제 명령어
// 테이블에 데이터 삽입
INSERT INTO 테이블명 VALUES (형식에 맞는 데이터들, 쉼표로 구분, ...)
// 테이블 모든 열 조회
SELECT * FROM 테이블명;
// 특정 열 조회
SELECT 특정열, 여러개도, 쉼표로, 구분하면, 한방에가능 FROM 테이블명;
// 특정 열 이름을 변경한 뒤 그 열 조회
SELECT 바뀌기전이름 AS 바꿀이름 FROM 테이블명;
---
// 테이블 속 모든 데이터 수정
UPDATE 테이블명 SET 바꿀열이름 = 바꿀데이터값;
// 특정 조건 데이터 수정
UPDATE 테이블명 SET 바꿀행이름 = 바꿀데이터값 WHERE 특정조건열이름 = 특정조건;
---
// 모든 데이터 삭제
DELETE FROM 테이블명;
// 테이블 속 특정 데이터 삭제
DELETE FROM 테이블명 WHERE 삭제할조건 = 삭제할특정조건;
: 데이터 접근 권한 부여, 제거 명령어, 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;
: 데이터 조작어 명령어 실행, 취소, 임시저장 명령어
트랜젝션(Transaction): 분할할 수 없는 최소 단위, 논리적인 작업 단위 (실행 혹은 취소만 있음)
➡️ 임시 저장소인 SAVE POINT(ROLLBACK 저장점) 지정 가능
// 트랜젝션 시작
BEGIN;
// 데이터 삽입
INSERT INTO 테이블명 VALUES (데이터들, 쉼표로, 형식맞춰서);
// 취소 -> 삽입이 취소된 것 !
ROLLBACK;
---
// 트랜젝션 시작
BEGIN;
// 데이터 삽입
INSERT INTO 테이블명 VALUES (데이터들, 쉼표로, 형식맞춰서);
// 실행 -> 삽입이 실행된 것
COMMIT;
---
// SAVE POINT 지정
SAVEPOINT 포인트명;
// SAVE POINT로 돌아가기
ROLLBACK TO 포인트명;
절 | 역할 |
---|---|
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;
관계의 종류: 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