1. 환경설정
1) MySQL8 다운 및 설치
2) 접속툴
3) 프로그램 언어 (자바)
- JDBC (Java Database Connectivity) 기술 이용
- JDBC 특징
: DB 종류와 무관하게 연동 가능
: Java SE 및 Java EE(웹) 무관하게 사용 가능
: 단점 - SQLException이 발생됨 (무조건 try~catch 필요)
4) Database 생성 및 테이블 생성
Database 명 : testdb
테이블:
- 수업 때 사용
scott_mysql.sql 이용
dept 테이블
emp 테이블
salgrade 테이블
- 워크샵 때 사용
MySQL용_SQL워크샵스크립트.txt
tb_class
tb_class_professor
tb_department
tb_grade
tb_professor
tb_student
2. 데이터베이스 (DB) vs 데이터베이스 관리 시스템 (DBMS)
1) 데이터베이스 (DataBase : DB)
: 개인, 회사, 관공서 등에서 업무적으로 필요한 데이터
2) 데이터베이스 관리 시스템 (DataBase Management System : DBMS)
: 데이터베이스를 전문적으로 관리해주는 S/W
(1) 관리 방법
- 보안
- CRUD
Create : 데이터 생성
Read : 데이터 조회
Update : 데이터 수정
Delete : 데이터 삭제
- 사용자 생성
- Role (권한)
(2) 데이터 저장 방법
- 계층형 데이터베이스
- 망형 데이터베이스
- 객체지향 데이터베이스
- 관계형 데이터베이스 : 행과 열로 구성된 2차원 테이블 형식으로 관리
3) 관계형 데이터베이스 (Relational DataBase : RDB)
<-> NoSQL (Not only SQL) : {key : value} : MongoDB, Casandra,...
: 행과 열로 구성된 2차원 테이블 형식으로 관리
(1) 종류
- Oracle
- MySQL (MariaDB는 MySQL과 문법이 거의 비슷)
- MSSQL
- DB2
3. SQL (Structured Query Language)
: RDB에서 사용하는 프로그램 언어
1) 특징
- 대소문자 구별 X (식별자)
- 연산자, 조건문, 함수 (자바의 메서드 역할)
2) 종류
(1) ANSI SQL
: 표준화된 SQL
- DBMS에 독립적 -> 모든 DBMS에서 사용 가능 (Oracle, MySQL,...)
(2) 비 ANSI SQL
: 표준화되지 않은 SQL -> MySQL에서만 사용가능한 문법이 있다는 의미
3) 역할
(1) 조회 -> query
(2) 레코드 -> DML (Data Manipulation Language)
- 레코드 생성 : insert 문
- 레코드 수정 : update 문
- 레코드 삭제 : delete 문
(3) 테이블 - DDL (Data Definition Language)
테이블 (객체 : 인덱스, 뷰, 프로시저, 사용자)
- 테이블 생성 : create 문
- 테이블 수정 : alter 문
- 테이블 삭제 : drop 문
(4) 트랜잭션 명령어 - TCL (Transaction Control Languate)
- DML과 매우 밀접한 관련이 있음
- commit 문
- rollback 문
(5) etc
4. select 문
1) 기능
- selection : 행 선택
- projection : 열 선택
- join ★ : 2개 이상의 테이블 연결해서 selection, projection 처리
2) 문법
SELECT 절
FROM 절; (mysql 생략 O, oracle 생략 X)
(1) select 절
- * (모든컬럼,all)
컬럼명,컬럼명2,...
컬럼명+10 ==> 연산가능
컬럼명 as 별칭 ==> 가독성
리터럴(값)
함수명(컬럼명) ==> 함수가능
distinct 컬럼명 ==> 중복 제거
(2) from 절;
3) "" 와 '' 사용 (ANSI)
- "" 는 별칭에서만 사용
- '' 는 문자(열)값, 날짜값 : 리터럴(literal)
예> 'hello', 'a'
'2024-03-28'
4) null 값
: 테이블의 컬럼에 값이 없는 것
: select시 비워져서 보임
(1) 특징
- 테이블의 모든 컬럼은 null 값을 가질 수 있다
- 강제적으로 null이 아닌 값을 갖게 할 수 있음 (not null 제약조건)
- null 값 조회 : IS NULL (부정은 IS NOT NULL)
- null의 연산 결과는 null이다
- null인 경우 연산 가능하도록 null의 값을 변경하는 함수 필요
- ifnull(컬럼명, 기본값)
예> (sal*12) + ifnull(comm, 0)
cf) Oracle에서는 NVL(컬럼명, 기본값)
5. select 문 + 조건 지정
1) 문법
SELECT 절
FROM 절
WHERE 절;
2) 조건식에 사용되는 연산자
https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/non-typed-operators.html
(1) 비교연산자 1
= : 같냐?
!- : 같지 않냐?
> : 크냐?
>= 크거나 같냐?
< : 작냐?
<= : 작거나 같냐?
(2) BETWEEN A AND B
- 범위로 조회
- BETWEEN A AND B : A 부터 B까지 포함된 레코드 반환 (A, B 포함)
- 수치, 날짜, 문자 사용 가능
(3) IN (값, 값2, 값3)
- 한 번에 여러 개 지정 가능
- IN (값, 값2, 값3) : 값 또는 값2 또는 값3 중에 있냐
- 수치, 날짜, 문자 사용 가능
(4) like 연산자
: 패턴으로 조회 가능
: 2개의 와일드카드 문자와 같이 사용
- % : 없거나 여러 문자 치환
- _ : 반드시 하나의 문자와 치환
- %와 _ 혼합 사용 가능
- %나 _가 들어간 이름 찾는 방법
예>
ename
AAA_BBB
AAA%BBB
_XXXYYY
ename LIKE '%\_%';
ename LIKE '%$_%' ESCAPE '$';
(5) NULL 조회
(6) 정렬
-
정렬 방법
오름차순 (기본) : ASC
내림차순 : DESC
-
문법
SELECT 컬럼명1 as A, 컬럼명2 as B
FROM 테이블명
WHERE 조건식/연산자
ORDER BY 표현식/컬럼명/별칭/select절에서의 위치 ASC/DESC;
-
다중 정렬
order by 표현식, 표현식2;
예> ORDER BY SAL DESC, EMPNO;
ORDER BY 별칭, 별칭;
ORDER BY 1 DESC, 3 DESC;