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인 칼럼의 데이터를 지울 때도 에러가 발생한다.
설명하다 보니 너무 복잡해져서 교재 이미지를 첨부하자면
이후에 내가 다시 볼 때 이해가 될까 싶지만 천천히 보면 문제없으리라 믿고 이번 문제에선 위의 세 가지 조건을 알 수 있다.
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건으로 처리해서 출력한다.
트랜젝션이란?
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일 데이터만 나오게 된다는 차이
아래는 이해하는데 살짝 애 좀 먹었던 문제 ㅎㅎ
날짜형 데이테
'프로그래밍 > SQLD' 카테고리의 다른 글
6. 2과목 제 2장 SQL 활용 (1) - alias (1) | 2022.08.27 |
---|---|
5. 2과목 제 1장 SQL 기본 (3) 43~64 (0) | 2022.08.23 |
3. 2과목 제 1장 SQL 기본 (1), 알아야 할게 너무 많다ㅠ (1) | 2022.08.22 |
2. 1 과목 제 2장 데이터 모델과 성능 (0) | 2022.08.20 |
1. 1과목 제 1장 데이터 모델링의 이해 - 자격증 도전기 (0) | 2022.07.25 |