프로그래밍/SQLD

4. 2과목 제 1장 SQL 기본 (2) 20~42

량아이 2022. 8. 23. 16:12

SQLD 준비 글들은 모두 SQL 자격검정 실전문제를 풀며 정리한 내용이므로 최대한 정리해보려고는 하지만 대체적으로 단원 등이 맞지 않을 수 있음에 유의!

생각보다 양이 방대해 이게 될까 싶지만 한번 시도는 해 보자규요!!

 

#대문자로 쓴 건 형식, 소문자는 테이블이나 칼럼에 따라 바뀔 수 있음을 표시.


INSERT INTO table_name VALUES (1, 100)

이  SQL문이 틀린 이유는 테이블에 있는 칼럼이 3개인데 2개만 풀면서 어느 칼럼인지 표시하지 않았기 때문이다.

답이 되려면 INSERT INTO table_name (id, amt) VALUES (1, 100) 로 작성해야 한다.

이때 모든 칼럼을 다 작성하였을 때, 위와 같이 작성하지 않아도 됨

*칼럼들 중 NOT NULL인 칼럼은 제외시키면 안 된다.

 

 

  • 다른 테이블의 칼럼 1과 FK로 연결되어있는 칼럼 2에 INSERT로 칼럼 1에 없는 데이터를 칼럼2에 입력하려고 할 시 에러가 발생한다.
  • FK인 칼럼은 삭제할 때 제한을 받는다.
  • NOT NULL인 칼럼의 데이터를 지울 때도 에러가 발생한다.

 

설명하다 보니 너무 복잡해져서 교재 이미지를 첨부하자면

50페이지 22번 문제

이후에 내가 다시 볼 때 이해가 될까 싶지만 천천히 보면 문제없으리라 믿고 이번 문제에선 위의 세 가지 조건을 알 수 있다.

 

 

DELETE FROM table_name; - 데이터를 삭제하지만 로그를 남김, 롤백(복구) 가능

ㄴ(사용자 COMMIT)

TRUNCATE TABLE table_name; - 테이블을 초기 상태로 만듦, 롤백 못함

ㄴ(AUTO COMMIT)

DROP TABLE table_name; - 테이블 자체를 없앰, 롤백 못함

ㄴ(AUTO COMMIT)

 

<테이블에 입력된 데이터 조회>

SELECT [ALL/DISTINCT] 보고 싶은 칼럼명 1,...

FROM table_name;

- ALL : 모든 데이터, 표시하지 않아도 됩

- DISTINCT : 중복된 데이터가 있는 경우 1건으로 처리해서 출력한다.

51페이지 24번

 

트랜젝션이란?

DB의 논리적 연산 단위로서 밀접히 관련되어 분리될 수 없는 한 개 이상의 DB 조작을 가리킨다.

트랜잭션의 특성 - A.C.I.D (애씨드)

  • 원자성 (atomicity)

트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아있어야 한다. (all or nothing)

  • 일관성 (consistency)

트랜젝션이 실행되기 전의 데이터베이스 내용이 잘못되어 있지 않다면 트랜잭션이 실행된 이후에도 DB의 내용에 잘못이 있으면 안 된다.

  • 고립성 (isolation)

트랜젝션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안 된다.

  • 지속성 (durability)

트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 DB의 내용은 영구적으로 저장된다.

 

 

<격리성이 낮으면 발생할 수 있는 문제점>

Non-Repeatable Read - 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상

Phantom Read - 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫 번째 쿼리에서 없던 유령 레코드가 두 번째 쿼리에서 나타나는 현상

=> 격리성이 낮으면(고립성을 띄지 않으면) 데이터 결과가 바뀔 수 있다.

 

 

ROLLBACK 과 SAVEPOINT

ORACLE -> CREATE TABLE 문장을 수행한 후, 묵시적으로 COMMIT이 되어 이후엔 ROLLBACK이 수행되지 않는다.

                   (DDL은 롤백이 되지 않는다.)

SAVEPOINT sp1,
...
ROLLBACK TO sp1;

SQL Server -> CREATE TABLE 문장을 수행하더라도 ROLLBACK에 의해 사용자 COMMIT 이후 문장들은 취소된다.

SAVE TRANSACTION sp1,
...
ROLLBACK TRANSACTION  sp1;

 

공백 문자와 NULL

ORACLE -> Empty string ( ' ' )은 NULL로 입력됨, ' = '로 공백문자 데이터 조회를 해도 조회되지 않는다

SQL Server -> Empty string ( ' ' ) 그대로 입력되기 때문에 IS NULL로 조회하더라도 조회되지 않는다.

 

데이터 조회 (58페이지 39번)

3.
...
WHERE '201501' = TO_CHAR(SVC_END_DATE, 'YYYYMM')
...

4.
...
WHERE TO_DATE('201501', 'YYYYMM') = SVC_END_DATE
...;

2015년 1월이라는 정보를 입력받아 'DATE' 형식으로 바꿔 서비스 종료 일자와 ' = '로 비교

이는 2015년 1월 1일 00시의 데이터만 찾게 한다.

 

3번은 월까지만 잘라 비교해서 1원 전체가 정상적으로 나오지만,

4번은 일까지 비교해서 1월 1일 데이터만 나오게 된다는 차이

 

 

단일 행 함수

 

다중 행 함수

 

아래는 이해하는데 살짝 애 좀 먹었던 문제 ㅎㅎ

60페이지 41문제

 

날짜형 데이테

 

SQL 날짜형 데이터