MySQL 강좌정리
1. 환경설정
1) MySQL8 다운 및 설치
- 커뮤니티 버전 ( 무료 )
- https://dev.mysql.com/downloads/installer/
- Windows (x86, 32-bit), MSI Installer 8.0.36 285.3M
2) 접속툴
- 자체적으로 설치: workbench ( GUI )
command line client ( CMD )
- 다운로드 설치: DBeaver.zip
==> http://dbeaver.io/download
Toad
...
3) 프로그램 언어(자바)
- JDBC( Java DataBase Connectivity) 기술이용
- JDBC 특징: DB 종류와 무관하게 연동 가능.
Java SE 및 Java EE(웹) 무관하게 사용 가능.
단점: SQLException이 발생됨.( 무조건 try~cacth 필요)
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. 데이터베이스 vs 데이터베이스 관리 시스템
1) 데이터베이스(DataBase : DB)
- 개인,회사,관공서등에서 업무적으로 필요한 데이터 의미.
2) 데이터베이스 관리 시스템 ( DataBase Management System : DBMS )
- DataBase(데이터)를 전문적으로 관리해주는 S/W 의미.
- 관리 방법? 보안
CRUD ( Create: 데이터 생성
Read : 데이터 조회
Update: 데이터 수정
Delete: 데이터 삭제 )
사용자 생성
Role 부여
...
- 데이터 저장 방법? 계층형 데이터베이스
망형 데이터베이스
객체지향 데이터베이스
관계형 데이터베이스 (*): 행(레코드)과 열(컬럼)로 구성된 2차원 테이블형식으로 관리
..
3) 관계형 데이터베이스 (Relational DataBase : RDB )
가. 개념
행(레코드)과 열(컬럼)로 구성된 2차원 테이블형식으로 관리
나. 종류
- Oracle
- MySQL ( MariaDB 는 MySQL 문법이 거의 99% 비슷)
- MSSQL
- DB2
...
3. SQL (Structured Query Language )
1) 개요
- RDB 에서 사용하는 프로그램 언어이다.
- 대소문 구별 안함. ( 식별자 의미 )
- 연산자
- 조건문
- 함수 ( 자바의 메서드 역할 )
2) 종류 1
가. ANSI SQL
- 표준화된 SQL 의미.
- DBMS에 독립적 ==> 모든 DBMS에서 사용 가능(Oracle, MySQL, ... )
나. 비 ANSI SQL
- 표준화되지 않은 SQL 의미.
- DBMS에 의존적 ==> MySQL에서만 사용가능한 문법이 있다는 의미.
3) 종류 2 ( 역할 )
가. 조회 ==> query 라고 부름.
- select 문 이용
나. 레코드-생성/수정/삭제 ==> DML(Data Manipulation Language) 라고 부른다.
- 레코드 생성: insert 문
- 레코드 수정: update 문
- 레코드 삭제: delete 문
다. 테이블-생성/수정/삭제 ==> DDL ( Data Definition Language ) 라고 부른다.
- 테이블 생성: create 문
- 테이블 수정: alter 문
- 테이블 삭제: drop 문
라. 트랜잭션 명령어 ==> TCL( Transaction Control Language ) 라고 부른다.
- DML과 매우 밀접한 관련있음.
- commit 문
- rollback 문
마. etc
- 사용자생성/권한부여/권한취소 ...
4. select 문
1) 기능 3가지
- selection: 행 선택
- projection: 열 선택
- join: : 2 개 이상의 테이블 연결해서 selection 및 projection 처리.
2) 문법
select 절
from 절; ( mysql 생략 가능, Oracle 생략 불가 )
========> 항상 테이블의 모든 레코드 대상이다.
따라서 emp는 항상 14개가 반환된다.
- select 절: * (모든컬럼,all)
컬럼명,컬럼명2,...
컬럼명+10 ==> 연산가능
컬럼명 as 별칭 ==> 가독성
리터럴(값)
함수명(컬럼명) ==> 함수가능
distinct 컬럼명 ==> 중복 제거
- from 절; 테이블 명
3) sql문에서 "" 와 '' 사용 ( ANSI )
- "" 는 별칭에서만 사용하자.
- '' 는 문자(열)값, 날짜값 ==> 리터럴(literal)
예> 'hello', 'a'
'2024-03-28'
4) null 값
가. 정의?
- 테이블의 컬럼에 값이 없는 것.( 값 없음을 의미 )
select 하면 비워져서 보여짐.
나. 특징
- 기본적으로 테이블의 모든 컬럼은 null 값을 가질 수 있다.
강제적으로 null이 아닌 값을 가지도록 할 수 있다. ( not null 제약조건 이용 )
- null 값 조회는 is null 연산자를 사용해야 된다.
- null 값의 연산결과는 null 값이 반환된다. (******)
예> 사원의 연봉 ?
sal*12 ==> (sal*12) + comm 가 null 값이 나오는 사원도 있다.
컬럼값이 null 인경우에는 연산 가능하도록 null값을 임의의 값으로 변경하는 함수가 필요.
- ifnull(컬럼명, 기본값) ( Oracle 에서는 NVL(컬럼명, 기본값) )
==> (sal*12) + ifnull(comm, 0)
- null 값은 가장 작은 값으로 처리한다. ( Oracle에서는 가장 큰 값으로 처리 )
- 기본인 null 허용 ---------------> not null 제약조건으로 허용 불가 ( 변경 )
5. select 문 + 조건지정
1) 문법:
select 절
from 절
where 절;
예> select *|컬럼명,컬럼명|컬럼명 as "별칭"|컬럼명+10|함수(컬럼명)|distinct 컬럼명|리터럴값 , projection기능
from 테이블명
where 조건식; // 조건식에 일치하는 레코드만 출력됨. selection 기능
2) 조건식에 사용되는 연산자
가. 비교연산자 1
= : 같냐? ( 자바에서는 == 사용됨 )
!= : 같지 않냐?
> : 크냐?
>= : 크거나 같냐?
< : 작냐?
<= : 작거나 같냐?
==> 수치, 날짜, 문자도 사용 가능
==> 날짜는 내부적으로 수치형으로 관리
기준시간: 1970-01-01 ------------------------> 현재
나. 비교 연산자 2
범위로 조회
- Between A and B: A 부터 B 까지 포함된 레코드 반환.
A와 B 포함됨.
- 수치, 날짜, 문자도 사용 가능
다. 비교연산자 3
한꺼번에 여러개 지정
- IN (값, 값2, 값3) : 값 또는 값2 또는 값3
- 수치, 날짜, 문자도 사용 가능
라. like 연산자
- 패턴으로 조회 가능
* 2개의 와일드카드 문자와 같이 사용 ==> 특정문자(들)와 치환이 된다.
% : 없거나 여러개 치환 가능
예> where ename LIKE '%A'; // A로 끝나는
where ename LIKE 'A%'; // A로 시작는
where ename LIKE '%A%'; // A가 포함되는
_ : 반드시 하나의 문자와 치환
예> where ename LIKE '__A'; // 3글자면서 A로 끝나는
%와 _ 혼합 사용 가능:
예> where ename LIKE '_A%'; // 두번째 글자가 A로 시작하는
* 산술연산자에서 % 가능하지만 MOD() 권장함.
- % 나 _ 를 포함하는 이름을 찾을 수 있다.
예> ename
------
AAA_BBB
AAA%BBB
_XXXYYY
==> ename LIKE '%\_%'; // \뒤에 오는 와일드카드 문자를 그냥 일반문자로 처리함. ( oracle 불가 )
==> ename LIKE '%$_%' ESCAPE '$'; // 임의의 문자 뒤에 오는 와일드카드 문자를 그냥 일반문자로 처리함.
( oracle 가능 )
마. null 조회
- IS NULL 사용
바. 정렬
- 정렬방법
오름차순(기본) : asc|ASC
내림차순 : desc|DESC
- 문법
select 컬럼명 as A, 컬럼명2 as B
from 테이블명
where 조건식(연산자)
order by 표현식(컬럼명|별칭|select절지정된위치1부터) ASC|DESC ;
use testdb;
-- SQL문 주석문
-- 1. 테이블내의 모든 데이터 보기
SELECT * FROM dept;
SELECT *
FROM dept;
select *
from dept;
-- 2. mysql 에서는 from 절 생략 가능 ( Oracle에서는 from절 생략 불가)
select 3455663 * 2245667;
select 3455663 * 2245667
from dual; -- dummy table
select now();
select now()
from dual;
-- 3. 특정 컬럼 데이터 보기
-- select 절에 지정된 컬럼순서대로 출력된다.
-- select 절에 지정된 표현식 그대로 컬럼헤더에 출력된다.
SELECT empno, ename, job, hiredate
FROM emp;
SELECT ename, empno, job, hiredate, sal+10
FROM emp;
-- limit 은 ANSI 아님
-- 4. 출력할 데이터 갯수 제한1 : limit len
SELECT empno, ename, job, hiredate
FROM emp
limit 3;
-- 4. 출력할 데이터 갯수 제한2 : limit start , len
SELECT empno, ename, job, hiredate
FROM emp
limit 0 , 5; -- 0 부터 5개
-- 5. 연산 가능 ( +, - , *, /, %(나머지))
-- % : mysql 에서 지원, 대신 mod( ) 함수 추천
SELECT empno, ename, sal, sal * 1.1, ROUND(sal * 1.1), ROUND(sal * 1.1, 2)
FROM emp;
SELECT empno, ename, sal, sal + 10, sal-10, sal*1.1 , sal / 3, sal % 3, mod(sal, 3)
FROM emp;
-- 6. 별칭
-- 컬럼헤더값을 별칭으로 출력
-- 문법: 표현식 as 별칭, as 생략 가능(권장안함)
-- 필요시 "별칭" 사용. (권장), '별칭' (홑따옴표 가능하지만 사용 안하는 것으로)
SELECT empno AS 사번, ename AS 성명, sal 급여 , sal * 12 as 연봉
FROM emp;
SELECT empno AS "사 번", ename AS "성명", sal "급여" , sal * 12 as "연봉"
FROM emp;
-- 7. 리터럴 (literal)
-- 문자(열)값, 날짜값: 반드시 '' (홑따옴표) 사용
-- 수치값: 10 3.14
SELECT empno , 10, 3.15 , 'hello', '2024-03-23'
FROM emp;
-- 8. null 값
-- null 값의 연산결과는 null 값이 반환된다. (******)
-- ifnull (컬럼명, 기본값) 사용하여 null 값인 경우 기본값으로 처리 가능.
SELECT empno, ename, sal, comm, (sal * 12) + comm as "연봉",
(sal*12) + ifnull(comm, 0) as "연봉"
FROM emp;
-- 9. 중복제거
-- distinct 키워드 이용
SELECT distinct job
FROM emp;
-- 10. where 절에 사용하는 연산자
-- 1) 비교연산자 ( =, !=, >, >= , <, <= )
SELECT empno, ename, job, deptno , sal
FROM emp
WHERE sal <= 1000;
SELECT empno, ename, job, deptno , sal
FROM emp
WHERE ename = 'SMITH';
SELECT empno, ename, job, deptno , sal
FROM emp
WHERE ename = 'smith'; -- 리터럴값은 oracle에서는 대소문자 구별됨.
--
SELECT empno, ename, job, deptno , sal, hiredate
FROM emp
WHERE hiredate = '1980-12-17';
SELECT empno, ename, job, deptno , sal, hiredate
FROM emp
WHERE hiredate > '1982-12-17';
-- 2) 비교연산자 : Between A and B
SELECT empno, ename, job, deptno, sal
FROM emp
WHERE sal BETWEEN 800 AND 2000;
SELECT empno, ename, job, deptno , sal, hiredate
FROM emp
WHERE hiredate BETWEEN '1980-01-11' AND '1982-12-17';
SELECT empno, ename, job, deptno , sal, hiredate
FROM emp
WHERE ename BETWEEN 'Adam' AND 'Dartin';
-- 3 ) 비교연산자 : in ( 값, 값2, 값3)
SELECT empno, ename, sal
FROM emp
WHERE empno IN (7369,7566,7698);
SELECT empno, ename, sal
FROM emp
WHERE ename IN ( 'SMITH', 'FORD', '홍길동');
SELECT empno, ename, sal, hiredate
FROM emp
WHERE hiredate IN ( '1980-12-17', '1980-01-11');
-- 4) like 연산자 : % , _ 패턴문자(와일드 카드문자)와 같이 사용
SELECT empno, ename, sal
FROM emp
WHERE ename LIKE'A%';
SELECT empno, ename, sal
FROM emp
WHERE ename LIKE '%T%';
SELECT empno, ename, sal
FROM emp
WHERE ename LIKE '_L%';
-- 5) is null 연산자: null 값 조회
SELECT empno, ename, sal, comm
FROM emp
where comm IS NULL;
SELECT empno, ename, sal, comm, mgr
FROM emp
where mgr IS NULL;
-- 6) 논리 연산자; and , or , not
SELECT empno, ename, job, deptno, hiredate, sal
FROM emp
WHERE job = 'salesman'AND sal >= 1500;
SELECT empno, ename, job, deptno, hiredate, sal
FROM emp
WHERE job = 'salesman' or sal >= 1500;
SELECT empno, ename, sal, comm, job
FROM emp
WHERE comm IS NOT NULL;
SELECT empno, ename, job, deptno , sal
FROM emp
WHERE NOT ename = 'SMITH';
SELECT empno, ename, job, deptno, sal
FROM emp
WHERE sal NOT BETWEEN 800 AND 2000;
SELECT empno, ename, sal
FROM emp
WHERE ename NOT IN ( 'SMITH', 'FORD', '홍길동');
SELECT empno, ename, sal
FROM emp
WHERE ename NOT LIKE'A%';
'[study]이론정리 > MySQL' 카테고리의 다른 글
MySQL 4일차 (0) | 2024.04.02 |
---|---|
MySQL 3일차정리 (0) | 2024.04.02 |
MySQL 3일차 (0) | 2024.04.01 |
MySQL 2일차 (0) | 2024.03.29 |
MySQL 1일차 수정 (0) | 2024.03.29 |