기록이 힘이다.

[SQL 쿡북] 4. 삽입, 갱신, 삭제(18) p105 본문

SQL

[SQL 쿡북] 4. 삽입, 갱신, 삭제(18) p105

dev22 2023. 3. 7. 08:22
728x90

4.1 새로운 레코드 삽입하기

4.2 기본값 삽입하기

create table D (id integer default 0)
--------------------------------------------------------------------
insert into D values (default)
--------------------------------------------------------------------
insert into D (id) values (default)

모든 데이터베이스는 열에 대한 기본값을 명시적으로 지정하는 방법으로 DEFAULT 키워드 사용을 지원합니다.

 

4.3 null로 기본값 오버라이딩하기

4.4 한 테이블에서 다른 테이블로 행 복사하기

4.5 테이블 정의 복사하기

CTAS(Create Table As Select) 문을 사용하는 경우 WHERE 절에 거짓 조건을 지정하지 않으면 쿼리의 모든 행으로 생성 중인 새 테이블을 채웁니다. 제공된 해법에서 쿼리의 WHERE 절에 있는 1=0 표현식으로 인해 행이 반환되지 않습니다. 따라서 CTAS 문의 결과는 쿼리의 SELECT 절에 있는 열에 기반을 두는 빈 테이블입니다. 

 

4.6 한 번에 여러 테이블에 삽입하기

MySQL -> 다중 테이블 삽입을 지원하지 않음.

 

4.7 특정 열에 대한 삽입 차단하기

뷰에 있는 세 개의 필드만 채울 수 있도록 허용된 사용자 및 프로그램에, 이 뷰에 대한 액세스 권한을 부여합니다. 이들 사용자에게 EMP 테이블에 대한 삽입 액세스 권한은 부여하지 마세요.

 

뷰에 삽입하는 기능을 사용하려면 해당 문제에 관한 벤더 문서를 참조하고 완전히 이해해야 합니다. 

 

4.8 테이블에서 레코드 수정하기

 

급여 인상은 두 개의 열로 나뉩니다. 하나는 기존 급여에 대한 인상분을 표시하고 다른 하나는 새로운 급여를 표시합니다. 

 

4.9 일치하는 행이 있을 때 업데이트하기 

4.10 다른 테이블 값으로 업데이트하기

결과

DEPTNO        SAL

--------------   ------------------

10                4000

 

DEPTNO 열은 NEW_SAL 테이블의 기본 키 입니다. EMP.DEPTNO와 NEW_SAL.DEPTNO 같이 일치할 경우, NEW_SAL 테이블을 사용하여 EMP 테이블에서 특정 사원의 급여 및 커미션을 업데이트하고 EMP.SAL을 NEW_SAL.SAL로 업데이트한 뒤에 EMP.COMM을 NEW_SAL.SAL의 50%로 업데이트하려고 합니다. EMP의 행은 다음과 같습니다. 

LIMIT 또는 TOP을 통해 또는 결과셋에서 반환하는 행 수를 제한하기 위해 벤더가 제공하는 메커니즘에 따라 수행하지 않는 한, SQL에서 테이블의 행을 제한하는 유일한 방법은 WHERE 절을 사용하는 것입니다. 이 UPDATE 문을 올바르게 수행하려면 업데이트하는 테이블의 WHERE 절과 함께 상관 서브쿼리에서도 WHERE 절을 사용해야 합니다. 

 

4.11 레코드 병합하기

해당하는 레코드가 있는지 여부에 따라 조건부로 테이블의 레코드를 삽입, 업데이트 또는 삭제할 수 있습니다.(레코드가 있으면 업데이트하고, 없으면 삽입하고, 업데이트 후 행이 특정 조건을 충족하지 못하면 삭제합니다.)

MySQL에는 MERGE문이 없습니다. 그 외에 이 책의 모든 RDBMS에서 이 쿼리는 작동하며 그 이외의 데이터베이스 플랫폼에서도 잘 작동합니다. 

 

3행에 있는 조인에서 이미 존재하는 행과 업데이트될 행을 결정합니다. 조인이 성공하면 두 행이 '일치'한 것으로 간주되고 WHEN MATCHED 절에 지정된 UPDATE가 실행됩니다. 그렇지 않으면 일치하는 항목이 없고 WHEN NOT MATCHED의 INSERT가 실행됩니다. 

 

4.12 테이블에서 모든 레코드 삭제하기

4.13 특정 레코드 삭제하기

4.14 단일 레코드 삭제하기

4.15 참조 무결성 위반 삭제하기

삭제는 실제로 '선택'에 관한 문제입니다. 실제 작업은 삭제하려는 레코드를 올바르게 설명하고자 WHERE 절 조건을 작성하는 것입니다. 

 

4.16 중복 레코드 삭제하기

4.17 다른 테이블에서 참조된 레코드 삭제하기

서브쿼리와 집계함수 COUNT를 사용하여 세 번 이상 사고가 발생한 부서를 찾습니다. 그런 다음 해당 부서에서 일하는 모든 사원을 삭제합니다. 

 

4.18 마치며

데이터를 삽입하고 업데이트하는 작업은 데이터를 쿼리하는 작업보다 시간이 덜 걸리는 것처럼 보일 수 있으므로, 책의 나머지 부분에서는 쿼리에 집중할 것입니다. 데이터를 제거하거나 삭제하는 명령은 데이터 유지 및 관리에 지속적인 영향을 미칠 수 있습니다. 삭제하려는 데이터를 항상 미리 확인하고 의도한 대상만 실제로 삭제하고 있는지 확인하며, 특정 RDBMS에서 실행 취솰 수 있는 것과 취소할 수 없는 것을 미리 숙지하고 있어야 합니다.

 

https://github.com/devcys22/SQLCookbook/blob/main/ch4%EC%82%BD%EC%9E%85%2C%EA%B0%B1%EC%8B%A0%2C%EC%82%AD%EC%A0%9C.sql

 

GitHub - devcys22/SQLCookbook: SQL쿡북을 학습합니다.

SQL쿡북을 학습합니다. Contribute to devcys22/SQLCookbook development by creating an account on GitHub.

github.com