728x90
반응형
SMALL

* Youtube Link - https://www.youtube.com/watch?v=j-Zh1kR8s8Q&list=PLVsNizTWUw7FzFgU1qe-n7_M7eMFA9d-f&index=14

 

CTE (공통 테이블 표현)

WITH CTE_테이블이름(열이름)

AS

(

            <쿼리문>

)

SELECT 열이름 FROM CTE_테이블이름;

실습

WITH절을 통해서 abc 라는 cte, 임시 테이블을 만들 수 있다.

WITH절에서 정의한 함수와 가로 안의 SELECT문의 열이 1:1로 매치가 되어야 한다.

userID -> userID, SUM(price*amount) -> total

중복 CTE (공통 테이블 표현)

각 지역별 최고키 평균을 구하였다.

지역별 최고키를 구하고

cte를 만든 다음

 지열별 최고키의 평균을 구하였다.

재귀 cte를 통해서 다음과 같은 여러 cte테이블들을 사용해서

전체 평균값을 구해보았다.

 

 

SQL의 분류

DML문은 실수할 수도 있다. 그래서 ROLLBACK을 시키면 입력하고 변경한 것을 취소할 수 있다.

COMMIT을 시키면 입력하고 변경한 것을 확정을 지을 수 있다.

트랜잭션을 완전 적용할 수 있는 것은 COMMIT 그리고 취소시킬 수 있는 것은 ROLLBACK이다.

DDL문은 CREATE, DROP, ALTER이다. COMMIT이나 ROLLBACK이 필요 없다. 그래서 DDL문은 실행 즉시 Oracle에 적용된다.

DCL문은 GRANT/REVOKE/DENY 등이 이에 해당한다.

DML문

INSERT INTO 테이블(열1, 열2, ...) VALUES (값1, 값2, ...)

열을 입력하지 않으면 테이블에 정의된 모든 열들을 차례대로 값을 입력해주면 된다.

MERGE

멤버 테이블은 굉장히 중요한 테이블이다.

변경 테이블을 만들어 놓을 것이다.

1주일에 한번씩 변경 작업을 일괄적으로 할 것이다.

사유에 따라서 한꺼번에 적용되게끔 어떻게 하는지 한번 살펴보겠다.

changeTBL을 토대로 

memberTBL의 userID값과 같은 값들을 체크해서

주소를 변경하고

만약 변경 사유가 '회원탈퇴'라면

DELETE 한다.

만약 MATCH가 되지 않는다면

memberTBL에 새로 INSERT한다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 SQL를 보고 학습한 자료를 남깁니다.

 

데이터 변경을 위한 SQL문

테이블의 내용을 변경하는 구문이다.

 

손코딩 실습

먼저, USE market_db; 를 실행한다.

■ CREATE문 및 INSERT문

1) CREATE TABLE hongong1 VALUES (toy_id INT, toy_name CHAR(4), age INT);

hongong1 테이블을 다음과 같은 열들을 갖게 해서 생성한다.

2) INSERT INTO hongong1 VALUES (1, '우디', 25);

hongong1 테이블에 다음과 같은 쿼리문을 수행해서 데이터를 입력할 수 있다.

3) INSERT INTO hongong1(toy_id, toy_name) VALUES (2, '버즈');

만일 나이는 입력하지 않고 싶다. 그러면 컬럼명을 직접 입력하고 값을 입력할 수 있다.

4) INSERT INTO hongong1 (toy_id, age, toy_name) VALUES ('제시', 20, 3);

컬럼명을 직접 입력해서 데이터를 입력하면 임의대로 값의 순서를 변경해서 맞춰서 데이터를 입력할 수 있다.

 

  AUTO_INCREMENT

AUTO_INCREMENT는 반드시 PRIMARY KEY로 지정을 해주어야 한다.

AUTO_INCREMENT 를 많이 사용을 한다.

NULL 값을 id값으로 입력을 해도 자동으로 증가하는 값을 입력해준다.

SELECT LAST_INSERT_ID();

마지막 AUTO_INCREMENT된 값을 확인할 수 있다.

AUTO_INCREMENT=${VALUE};

ALTER TABLE hongong2 AUTO_INCREMENT=100; 

을 입력을 하면 테이블의 AUTO_INCREMENT 값이 변경된 것을 확인할 수 있다.

값을 입력을 하고 조회를 해보면 

다음과 같이 toy_id값에 100이 입력된 것을 볼 수 있다.

hongong3이라는 테이블을 새로 만들고

toy_id 값을 AUTO_INCREMENT로 해준다.

ALTER TABLE로 AUTO_INCREMENT 값을 1000으로 입력을 해주면

1000부터 입력이 된다.

만일 3씩 건너뛰고 싶다면

SET @@auto_increment_increment=3;

을 입력해주면 된다.

다시 이전에 만들었던 hongong2 테이블에 데이터를 입력해 보면 

SET @@auto_increment_increment=3;이 적용되어서

103, 106, 109 이렇게 ID값이 자동으로 입력되는 것을 볼 수 있다.

INSERT INTO ~ SELECT

INSERT문을 수행할 때 SELECT문을 사용해서도 INSERT문이 실행될 수 있다.

대량의 데이터를 빠르게 SELECT문을 이용하여 INSERT문으로 데이터를 입력할 수 있다.

world 데이터베이스의 city의 수를 조회하면 다음과 같다.

4079개의 도시의 수를 전부 다 조회할 수 있다.

DESC world.city;

DESC를 사용하면 해당 테이블의 정보를 조회할 수 있다.

모두 조회를 하면 검색 속도가 오래 걸리니

LIMIT을 사용해서 데이터를 조회한다.

우리는 world의 city테이블의 정보를 가져오고 싶은 것이다.

먼저 새 테이블을 생성해 볼 것이다.

city_popul 이라는 테이블을 만든다.

그리고 INSERT INTO ~ SELECT문을 사용해서 

약 4,000건이 넘는 데이터를, world.city 테이블의 데이터를 city_popul 테이블에 저장한다.

SELECT * FROM city_popul 을 드래그 해서 번개 모양 버튼을 클릭 해서 실행을 하면 다음과 같은 결과를 얻어낼 수 있다.

UPDATE 문의 기본 문법

열 값의 순서를 마음대로 입력해도 무방하다.

city_popul 의 각 데이터들을 한글로 바꾸고 싶다.

그러면 먼저 city_name = 'Seoul' 인 값을 조회한다.

이 값을 한글로 바꿀 것이다.

그러기위해서 UPDATE문을 사용한다.

하지만 UPDATE문을 사용하는데 오류가 발생하는 것을 볼 수 있다.

Work bench에서 UPDATE문이 실행이 안 되도록 설정이 되어 있는 것이다.

다음과 같이 하여 이러한 오류를 해결할 수 있다.

Preferences > SQL Editor > Safe updates (rejects UPDATEs and DELETEs with no restrictions)

를 해제하고 OK 버튼을 클릭한다.

그리고 Work bench를 끄고 다시 실행한다.

USE market_db; 를 다시 실행하여 사용할 데이터베이스를 market_db로 설정해준다.

그리고 UPDATE문을 실행하여 city_name = '서울' 로 변경해준다.

그리고 SELECT문을 실행을 하면 다음과 같이 조회가 정상적으로 되는 것을 볼 수가 있다.

다음은 뉴욕을 한글로 바꾸어 보겠다.

UPDATE문을 실행을 하고 다시 SELECT문을 실행을 해보면

다음과 같이 city_name과 population이 변경된 것을 볼 수가 있다.

UPDATE문에 WHERE절을 빠뜨린 경우

절대로 실행하면 안 됩니다.

인구수를 너무 복잡하니 10,000 단위로 바꾸고 싶다.

다음과 같이 인구 단위가 10,000단위로 바뀐 것을 볼 수가 있다.

DELETE문

DELETE 문을 실행을 해서 city_name의 앞 글자가 'New'로 시작하는 행들을 삭제해보겠습니다.

그러면 총 11건이 실행된 것을 볼 수가 있습니다.

DELETE문에 LIMIT 문이 추가되어서 city_name이 앞에서 'New'글자로 시작하는 city_popul 테이블의 행을 삭제할 수 있다.

LIMIT문이 추가되었으므로 앞에서 5건만 삭제가 되고 남은 6건은 남아야 한다.

앞에서 이미 총 11건을 모두 삭제했으므로

이번에는 총 0건이 삭제됨을 확인할 수 있다.

 

감사합니다.

https://www.youtube.com/watch?v=WWAFAm9op2U&list=PLVsNizTWUw7GCfy5RH27cQL5MeKYnl8Pm&index=9

 

728x90
반응형
LIST

+ Recent posts