II. SQL 기본 활용

제 3장 SQL 관리 구문 - 개념

[TCL]
BEGIN TRANSACTION(BEGIN TRAN)로 트랜잭션을 시작하고
COMMIT (TRANSACTION) / ROLLBACK (TRANSACTION)로 종료한다.

-- [Oracle]
SAVEPOINT SVPT1;
...
ROLLBACK TO SVPT1;

-- [SQL Sever]
SAVE TRANSACTION SVTR1;
...
ROLLBACK TRANSACTION SVTR1;

제 3장 SQL 관리 구문 - 문제

문제 123.

CREATE TABLE 품목
(   품목ID  	VARCHAR (5)   NOT NULL,
	단가     NUMBER         NOT NULL);

INSERT INTO 	품목 (품목ID, 단가)
	VALUES 	    ('001', 1000);
INSERT INTO 	품목 (품목ID, 단가)
	VALUES 	    ('002', 2000);
INSERT INTO 	품목 (품목ID, 단가)
	VALUES 	    ('003', 1000);
INSERT INTO 	품목 (품목ID, 단가)
     VALUES 	('004', 2000);

BEGIN TRANSACTION;
INSERT INTO 품목(품목ID, 단가) VALUES('005', 2000);
COMMIT;
BEGIN TRANSACTION;
DELETE FROM 품목 WHERE 품목ID='200';
BEGIN TRANSACTION;
UPDATE 품목 SET 단가=2000 WHERE 단가=1000;
ROLLBACK;
SELECT COUNT(품목ID) FROM 품목
WHERE 단가=2000;

정답: 3
해설:

BEGIN TRANSACTION;
INSERT INTO 품목(품목ID, 단가) VALUES(005, 2000);
COMMIT;

BEGIN TRANSACTION;
DELETE FROM 품목 WHERE 품목ID='200';
BEGIN TRANSACTION;
UPDATE 품목 SET 단가=2000 WHERE 단가=1000;
ROLLBACK;

ROLLBACKCOMMIT되지 않은 상위 모든 TRANSACTION을 모두 롤백

SELECT COUNT(품목ID) FROM 품목
WHERE 단가=2000;
품목ID단가
0022000
0042000
0052000


문제 124.

[상품]

상품ID상품명
001LCD-TV
CREATE TABLE 상품
(   상품ID  	VARCHAR(5)    NOT NULL,
	상품명    VARCHAR(10)   NOT NULL);

INSERT INTO 	상품 (상품ID, 상품명)
	VALUES 	    ('001', 'TV');

[SQL]
BEGIN TRANSACTION;
SAVE TRANSACTION SP1;
UPDATE 상품 SET 상품명 ='LCD-TV' WHERE 상품ID = '001';
SAVE TRANSACTION SP2;
UPDATE 상품 SET 상품명 ='평면-TV' WHERE 상품ID = '001';
ROLLBACK TRANSACTION SP2;
COMMIT;

-- '001'의 최종 상품명 : LCD-TV

정답: LCD-TV
해설:

BEGIN TRANSACTION;
SAVE TRANSACTION SP1;
UPDATE 상품 SET 상품명 ='LCD-TV' WHERE 상품ID = '001';
SAVE TRANSACTION SP2;
상품ID상품명
001LCD-TV
UPDATE 상품 SET 상품명 ='평면-TV' WHERE 상품ID = '001';
ROLLBACK TRANSACTION SP2;
COMMIT;

ROLLBACK TRANSACTION SP2; 구문에 의해 첫 번째 UPDATE 문장만 유효한 상태에서 COMMIT되었으므로 최종 상품명은 'LCD-TV'.


문제 125.

팀별성적 테이블에서 승리건수가 높은 순으로 3위까지 출력하되 3위의 승리 건수가 동일한 팀이 있다면 함께 출력하기 위한 SQL?

CREATE TABLE 팀별성적
(   팀명  	VARCHAR(10)		NOT NULL,
	승리건수    NUMBER     	   NOT NULL,
    패배건수    NUMBER		   NOT NULL);

INSERT INTO 	팀별성적 (팀명, 승리건수, 패배건수)
     VALUES 	('A팀', 120, 80);
INSERT INTO 	팀별성적 (팀명, 승리건수, 패배건수)
     VALUES 	('B팀', 20, 180);
INSERT INTO 	팀별성적 (팀명, 승리건수, 패배건수)
	VALUES 		('C팀', 10, 190);
INSERT INTO 	팀별성적 (팀명, 승리건수, 패배건수)
	VALUES 		('D팀', 100, 100);
INSERT INTO 	팀별성적 (팀명, 승리건수, 패배건수)
	VALUES 		('E팀', 110, 90);
INSERT INTO 	팀별성적 (팀명, 승리건수, 패배건수)
     VALUES 	('F팀', 100, 100);
INSERT INTO 	팀별성적 (팀명, 승리건수, 패배건수)
     VALUES 	('G팀', 70, 130);

정답:

SELECT TOP(3) WITH TIES 팀명, 승리건수
FROM 팀별성적
ORDER BY 승리건수 DESC;
profile
ʚȉɞ

0개의 댓글

Powered by GraphCDN, the GraphQL CDN