본문 바로가기
Database/MySQL

MySQL 기본 코드 복습 2

by java나유 2022. 10. 11.

4.SQL 분류

1) DDL(Data Definition Language) 정의어

 

CREATE

ALTER

DROP

TRUNCATE

 

 

2)DML (Data Manipulation Language)조작어 🤍사용많이함

select -DQL로 따로 분류하는 경우도 있음

 

INSERT

UPDATE

DELETE

 

=>4개의 작업은 CRUD라고도 함

 

3)DCL (Data Control Language)제어어 🤍사용많이함

COMMIT, ROLLBACK, SAVEPOINT-TCL로 분류하기도 함 

 

GRANT,REVOKE

 

5.DML과 TCL

 

1)DML

=>INSERT:데이터삽입

=>UPDATE:데이터 수정

=>DELETE:데이터 삭제

 

2)TCL

=>COMMIT:현재까지 작업 내역 원본에 반영

=>ROLLBACK:현재까지 작업 내역 취소

=>SAVEPOINT:ROLLBACK할 지점을 만드는 것

 

3)AUTO COMMIT 되는 상황

=>접속 프로그램을 정상 종료하는 경우

=>DDL이나 DCL를 성공적으로 수행하는 경우

 

4)AUTO ROLLBACK 되는 상황

=>접속 프로그램이 비 정상적으로 종료된 경우

 

default 가 뭔지 알고있어야 함

 

5)Transaction

=>한번에 이루어져야하는 논리적 작업 단위

=>이전 트랜잭션이 없는 상태에서 insert,delete,update 작업을 수행하면 시작

commit이나 rollback을 만나면 종료됨

 

6)데이터 삽입과 트랜잭션 적용

=>tCity 테이블에 데이터 삽입

INSERT INTO tCity

values('평택',453,51,'n','경기');

 

INSERT INTO tCity
values('평택',453,51,'n','경기');

select *
from tCity;
--현재 평택 데이터는 tCity에 삽입되어있음

--트랜잭션이 생성된 시점으로 돌아가는 것
rollback;

select *
from tCity;

 

=>DML 작업을 정상적으로 완료하고 나면 COMMIT을 하는데 트랜잭션이 많은 곳에서는

다른 방법을 사용

원본에 기록하는 동안에는 데이터베이스에 X_LOCK이 걸려서 쓰기 금지되어있음

 

7)수정

 

8)삭제

delete from 테이블 이름

[where 조건];

=>조건이 없으면 모든 데이터가 삭제

 

9)테이블의 모든 데이터 삭제

Truncate table 테이블이름; 

 

6.SubQuery

1)SubQuery

=>쿼리안에 다른 쿼리가 존재하는 경우

=>INSERT 나 SELECT 구문안에 SELECT가 내부에 존재하는 경우가 있는데 이경우를 SubQuery라고 하고

FROM절에 SELECT가 들어가는 경우는 INLINE VIEW라고 한다.

=> SubQuery는 반드시 괄호로 감싸야하고 Main Query가 수행되기 전 한번만 수행됨

=>JOIN문제 중에서 하나의 테이블에 존재하는 속성만 조회하는 경우는

SubQuery로 변환 가능 -SQL은 길어지지만 실행 효율은 더 높다.

관계형 데이터베이스에서 속도를 느리게하는 가장 큰 요인 중 하나는 JOIN이기 때문

=>EMP테이블에서 ENAME이 MILLER인 사원이 근무하는 부서이름을 조회 

근무하는 부서의 이름은 DEPT 테이블의 DNAME컬럼이 가지고 있다.

두 테이블에 모두 존재하는 컬럼은 DEPTNO이다.

 

SLECT DNAME 

FROM DEPT

WHERE DEPTNO=

       (SELECT DEPTNO

       FROM EMP

       WHERE ENAME ='MILLER'); 

 

 

2)종류

=>단일 행 서브쿼리:서브쿼리의 결과가 하나의 행이나 없는 경우

=>다중 행 서브쿼리:서브쿼리의 결과가 2개 이상의 행 인 경우

 

=>tCity 테이블에서 popu가 최대인 데이터의 popu값과 name을 조회

SELECT MAX(popu),name

FROM tCtity;

 

이 경우는 에러인데 집계 함수는 GRUOP BY절의 데이터와 함꼐 조회하는 것이 가능합니다.

GRUOP BY로 묶이지 않은 컬럼은 집계 함수와 같이 조회할 수 없습니다.

 

이런 경우는 popu의 최대값을 구하고 그 최대값과 일치하는 popu를 가진 데이터의 name을 조회

 

SELECT popu,name
FROM tcity
WHERE popu = (SELECT MAX(popu) FROM tCity);

 

=> EMP 테이블에서 SAL의 평균보다 더 많은 SAL을 받는 사원의  ENAME과 SAL을 조회

SELECT ENAME,SAL
FROM EMP
WHERE SAL > (SELECT AVG(SAL) FROM EMP);

 

3)다중 행 서브쿼리

=>서브쿼리의 결과가 2개 이상의 행인 경우

이 경우는 단일 행 연산자를 사용할 수 없음  (>,>=,<,<=,<>,!=,=)를 사용할 수 없음

=>이런 경우에는 다중 행 연산자를 활용해야 합니다.

IN(NOT IN)을 이용해서 =나 <>, !=를 대체

 

>,>=,<,<=는 ANY와 ALL을 이용해서 작성

ANY는 조회된 행 중 하나만이라도 조건을 만족하면 조회하는 것이고

ALL은 모든 행이 만족해야 한다.

728x90

'Database > MySQL' 카테고리의 다른 글

JOIN2  (0) 2022.10.12
JOIN  (0) 2022.10.12
MySQL 기본 코드 복습  (0) 2022.10.11
MariaDB 상태 확인 하는 법 *** \status  (0) 2022.09.22
기존 테이블에 원하는 위치로 칼럼 추가 하는 방법  (0) 2022.08.24

댓글