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은 모든 행이 만족해야 한다.
'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 |
댓글