'전체 글'에 해당되는 글 256건

  1. 2013.09.26 SQL 연산자
  2. 2013.09.24 비교 연산자
  3. 2013.09.24 SAVEPOINT
  4. 2013.09.23 ROLLBACK

 

과목 II SQL 기본 및 활용

제1장 SQL 기본

제5절 WHERE 절

4. SQL 연산자

 

 

* IN (list) 연산자

 

[예제] 소속팀 코드와 관련된 IN (list) 형태의 SQL 비교 연산자를 사용하여 WHERE 절에 사용한다.

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

1) 소속팀코드 IN (삼성블루윙즈 코드(K02), 전남드래곤즈 코드(K07))

2) 포지션 LIKE 미드필더(MF)

3) 키 BETWEEN 170 센티미터 AND 180 센티미터

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

 SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

 FROM PLAYER

 WHERE TEAM_ID IN ('K02','K07');

첫 번째 조건만 WHERE 절로 작성했습니다.

 

 

[실행결과]

(100개 행이 영향을 받음)

 

 


 

 

[준비] 별도 제공한 SQL SCRIPT를 통해 모든 테이블의 데이터를 새롭게 생성 (SQL 전문가 가이드 실습용 파일.zip)

압축파일의 [2.부서_사원_sqlserver용_2010년.sql] 을 이용하여 입력합니다.

 

 

[예제] 사원 테이블에서 JOB이 MANAGER이면서 20번 부서에 속하거나, JOB이 CLERK이면서 30번 부서에 속하는 사원의 정보를 IN 연산자의 다중 리스트를 이용해 출력하라. 

 SELECT ENAME, JOB, DEPTNO
 FROM EMP
 WHERE JOB IN ('MANAGER','CLERK') AND DEPTNO IN (20,30);

 

 

[실행결과] 

(5개 행이 영향을 받음)

 

 


 

 

 

* LIKE 연산자

 

[예제] 요구 사항의 두 번째 조건에 대해서 LIKE 연산자를 WHERE 절에 적용해서 실행한다.

 SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
 FROM PLAYER
 WHERE POSITION LIKE 'MF';

 

 

[실행결과]

(162개 행이 영향을 받음)

 

 


 

 

 

[예제] “장”씨 성을 가진 선수들의 정보를 조회하는 WHERE 절을 작성한다.

 SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
 FROM PLAYER
 WHERE PLAYER_NAME LIKE '장%';

 

 

[실행결과]

(13개 행이 영향을 받음)

 

 


 

 

* BETWEEN a AND b 연산자

 

[예제] 세 번째로 키가 170 센티미터 이상 180센티미터 이하인 선수들의 정보를 BETWEEN a AND b 연산자를 사용하여 WHERE 절을 완성한다.

SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
 FROM PLAYER
 WHERE HEIGHT BETWEEN 170 AND 180;

 

 

[실행결과]

(259개 행이 영향을 받음)

 

 


 

 

* IS NULL 연산자

 

[준비]

 UPDATE PLAYER
 SET POSITION = NULL
 WHERE POSITION = '';

처음 테이블 생성시에 몇 선수들의 POSITION 칼럼 값을 NULL이 아닌 공백으로 입력했었습니다.

따라서 POSITION 칼럼의 공백 값들을  NULL 값으로  수정 합니다.

 

 

[예제] POSITION 칼럼(Column) 값이 NULL 값인지를 판단하기 위해서는 IS NULL을 사용하여 다음과 같이 SQL 문장을 수정하여 실행한다.

 SELECT PLAYER_NAME 선수이름, POSITION 포지션, TEAM_ID
 FROM PLAYER
 WHERE POSITION IS NULL;

 

 

[실행결과]

(3개 행이 영향을 받음)

 

'SQL 전문가 가이드' 카테고리의 다른 글

부정 연산자  (0) 2013.09.26
논리 연산자  (0) 2013.09.26
비교 연산자  (0) 2013.09.24
SAVEPOINT  (0) 2013.09.24
ROLLBACK  (0) 2013.09.23
Posted by G4.
,

 

과목 II SQL 기본 및 활용

제1장 SQL 기본

제5절 WHERE 절

3. 비교 연산자

 

 

[예제] 첫 번째 요구 사항인 소속팀이 삼성블루윙즈라는 조건을 WHERE 조건절로 옮겨서 SQL 문장을 완성하여 실행한다.

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

소속팀이 삼성블루윙즈이거나 전남드래곤즈에 소속된 선수들이어야 하고,

포지션이 미드필더(MF:Midfielder)이어야 한다.

키는 170 센티미터 이상이고 180 이하여야 한다.

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

1) 소속팀코드 = 삼성블루윙즈팀 코드(K02)

2) 소속팀코드 = 전남드래곤즈팀 코드(K07)

3) 포지션 = 미드필더 코드(MF)

4) 키 >= 170 센티미터

5) 키 <= 180 센티미터

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

 SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

 FROM PLAYER

 WHERE TEAM_ID = 'K02' ;

 

 

[실행결과]

(49개 행이 영향을 받음)

 

 


 

 

 

[예제] 세 번째 요구 사항인 포지션이 미드필더(MF)인 조건을 WHERE 조건절로 옮겨서 SQL 문장을 완성하여 실행한다.

 SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

 FROM PLAYER

 WHERE POSITION = 'MF';

 

 

[실행결과]

(162개 행이 영향을 받음)

 

 


 

 

[예제] 네 번째 요구 사항인 "키가 170 센티미터 이상"인 조건도 WHERE 절로 옮겨서 SQL 문장을 완성하여 실행한다.

 SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

 FROM PLAYER

 WHERE HEIGHT >= 170;

 

 

 

[실행결과]

(439개 행이 영향을 받음)

 

 

'SQL 전문가 가이드' 카테고리의 다른 글

논리 연산자  (0) 2013.09.26
SQL 연산자  (0) 2013.09.26
SAVEPOINT  (0) 2013.09.24
ROLLBACK  (0) 2013.09.23
COMMIT  (0) 2013.09.23
Posted by G4.
,

SAVEPOINT

SQL 전문가 가이드 2013. 9. 24. 16:04

 

과목 II SQL 기본 및 활용

제1장 SQL 기본

제4절 TCL (TRANSACTION CONTROL LANGUAGE)

4. SAVEPOINT

 

 

[준비] 별도 제공한 SQL SCRIPT를 통해 PLAYER 테이블의 데이터를 새롭게 생성 (SQL 전문가 가이드 실습용 파일.zip)

이번 예제를 수행하기 전에 [3. ROLLBACK] 예제를 하면서 PLAYER 테이블의 데이터를 지웠기 때문에 데이터를 다시 입력해줍니다.

 

 

[예제] SAVEPOINT를 지정하고, PLAYER 테이블에 데이터를 입력한 다음 롤백(ROLLBACK)을 이전에 설정한 저장점까지 실행한다.

 BEGIN TRAN;

 -- 명령이 완료되었습니다.

 SAVE TRAN SVTR1;

 -- 명령이 완료되었습니다.
 INSERT INTO PLAYER (PLAYER_ID, TEAM_ID, PLAYER_NAME, POSITION, HEIGHT, WEIGHT, BACK_NO)
 VALUES ('1999035', 'K02', '이운재', 'GK', 182, 82, 1);

 -- (1개 행이 영향을 받음)
 ROLLBACK TRAN SVTR1;

 -- 명령이 완료되었습니다.
 COMMIT;

 -- 명령이 완료되었습니다.

책에 나온 대로 하면 [활성 트랜잭션이 없을 때는 SAVE TRANSACTION을 실행할 수 없습니다.] 라는 오류 메세지가 발생합니다.

저장점(SAVEPOINT)을 생성하기전에 트랜잭션을 활성화 시켜줘야 하기때문에 BEGIN TRAN 을 실행해줍니다.

*  가장 오래 전에 활성화된 트랜잭션 정보 확인 명령어

    DBCC OPEN TRAN

 

 


 

 

[예제] 먼저 SAVEPOINT를 지정하고 PLAYER 테이블에 있는 데이터를 수정한 다음 롤백(ROLLBACK)을 이전에 설정한 저장점까지 실행한다. 

 BEGIN TRAN;

 -- 명령이 완료되었습니다.
 SAVE TRAN SVTR2;

 -- 명령이 완료되었습니다.
 UPDATE PLAYER SET WEIGHT = 100;

 -- (480개 행이 영향을 받음)
 ROLLBACK TRAN SVTR2;

 -- 명령이 완료되었습니다.
 COMMIT;

 -- 명령이 완료되었습니다.

 

 


 

 

[예제] SAVEPOINT를 지정하고, PLAYER 테이블에 있는 데이터를 삭제한 다음 롤백(ROLLBACK)을 이전에 설정한 저장점까지 실행한다. 

 BEGIN TRAN;

 -- 명령이 완료되었습니다.
 SAVE TRAN SVTR3;
 -- 명령이 완료되었습니다.
 DELETE FROM PLAYER;
 -- (480개 행이 영향을 받음)

 ROLLBACK TRAN SVTR3;
 -- 명령이 완료되었습니다.
 COMMIT;

 -- 명령이 완료되었습니다.

 

 


 

 

 

[예제] 새로운 트랜잭션을 시작하기 전에 PLAYER 테이블의 데이터 건수와 몸무게가 100인 선수의 데이터 건수를 확인한다.

※ 몸무게를 확인할 수 있는 WHERE 절 조건과 데이터 건수를 집계하기 위한 COUNT 함수는 1장 5절과 6절에서 설명한다.

 SELECT COUNT(*)

 FROM PLAYER;

 

 -- (1개 행이 영향을 받음)

 SELECT COUNT(*)

 FROM PLAYER

 WHERE WEIGHT = 100;

  

 -- (1개 행이 영향을 받음)

 

 


 

 

[예제] [그림 Ⅱ-1-11]을 확인하기 위해 새로운 트랜잭션을 시작하고 SAVEPOINT A와 SAVEPOINT B를 지정한다.

 BEGIN TRAN;

 -- 명령이 완료되었습니다.
 INSERT INTO PLAYER (PLAYER_ID, TEAM_ID, PLAYER_NAME, POSITION, HEIGHT, WEIGHT, BACK_NO)
 VALUES ('1999035', 'K02', '이운재', 'GK', 182, 82, 1);

 -- (1개 행이 영향을 받음)
 SAVE TRAN SVTR_A;

 -- 명령이 완료되었습니다.
 UPDATE PLAYER SET WEIGHT = 100;

 -- (481개 행이 영향을 받음)
 SAVE TRAN SVTR_B;

 -- 명령이 완료되었습니다.
 DELETE FROM PLAYER;

 -- (481개 행이 영향을 받음)

책에는 Oracle 결과만 있어서 SQL Server 에 맞게 수정하였습니다.

BEGIN TRAN 으로 새로운 트랜잭션을 시작하고 지금까지는 COMMIT 으로 트랜잭션을 완료시켰었는데,

이번 예제에서 트랜잭션을 완료시키면 당연히 [예제] CASE 1,2,3 을 진행 할 수가 없습니다.

(이유는 책에 자세히 나와있습니다.)

[예제] CASE 3 에서 ROLLBACK 으로 트랜잭션을 완료합니다.

 

 

[예제] CASE1. SAVEPOINT B 저장점까지 롤백(ROLLBACK)을 수행하고 롤백 전후 데이터를 확인해본다. 

 SELECT COUNT(*)

 FROM PLAYER; 

 

 -- (1개 행이 영향을 받음)

 ROLLBACK TRAN SVTR_B;

 SELECT COUNT(*)

 FROM PLAYER; 

 

 -- (1개 행이 영향을 받음)

 

 

[예제] CASE2. SAVEPOINT A 저장점까지 롤백(ROLLBACK)을 수행하고 롤백 전후 데이터를 확인해본다. 

 SELECT COUNT(*)

 FROM PLAYER

 WHERE WEIGHT = 100; 

 

 -- (1개 행이 영향을 받음)

 ROLLBACK TRAN SVTR_A;

 SELECT COUNT(*)

 FROM PLAYER

 WHERE WEIGHT = 100; 

 

 -- (1개 행이 영향을 받음)

 

 

[예제] CASE3. 트랜잭션 최초 시점까지 롤백(ROLLBACK)을 수행하고 롤백 전후 데이터를 확인해본다. 

 SELECT COUNT(*)

 FROM PLAYER; 

 

 -- (1개 행이 영향을 받음)

 ROLLBACK;
 SELECT COUNT(*)

 FROM PLAYER; 

 

 -- (1개 행이 영향을 받음)

 

'SQL 전문가 가이드' 카테고리의 다른 글

SQL 연산자  (0) 2013.09.26
비교 연산자  (0) 2013.09.24
ROLLBACK  (0) 2013.09.23
COMMIT  (0) 2013.09.23
산술 연산자와 합성 연산자  (2) 2013.09.23
Posted by G4.
,

ROLLBACK

SQL 전문가 가이드 2013. 9. 23. 15:29

 

과목 II SQL 기본 및 활용

제1장 SQL 기본

제4절 TCL (TRANSACTION CONTROL LANGUAGE)

3. ROLLBACK

 

 

[예제] PLAYER 테이블에 데이터를 입력하고 ROLLBACK을 실행한다.

 BEGIN TRAN
 INSERT INTO PLAYER (PLAYER_ID, TEAM_ID, PLAYER_NAME, POSITION, HEIGHT, WEIGHT, BACK_NO)
 VALUES ('1999035', 'K02', '이운재', 'GK', 182, 82, 1);

(1개 행이 영향을 받음)

 

 ROLLBACK;

명령이 완료되었습니다.

 

 

[출력결과]

 SELECT * FROM PLAYER; 

ROLLBACK 실행

 

 


 

 

[준비] 

 INSERT INTO PLAYER (PLAYER_ID, TEAM_ID, PLAYER_NAME, POSITION, HEIGHT, WEIGHT, BACK_NO)
 VALUES ('1999035', 'K02', '이운재', 'GK', 182, 82, 1);

(1개 행이 영향을 받음)

 

 

[예제] PLAYER 테이블에 있는 데이터를 수정하고 ROLLBACK을 실행한다. 

 BEGIN TRAN
 UPDATE PLAYER
 SET HEIGHT = 100;

(1개 행이 영향을 받음)

 

 ROLLBACK;

명령이 완료되었습니다.

 

 

[출력결과] 

 SELECT * FROM PLAYER; 

ROLLBACK 실행

 

 


 

 

[예제] PLAYER 테이블에 있는 데이터를 삭제하고 ROLLBACK을 실행한다.

 BEGIN TRAN

 DELETE FROM PLAYER;

(1개 행이 영향을 받음)

 

  ROLLBACK;

명령이 완료되었습니다.

 

 

[출력결과] 

 SELECT * FROM PLAYER; 

ROLLBACK 실행

 

'SQL 전문가 가이드' 카테고리의 다른 글

비교 연산자  (0) 2013.09.24
SAVEPOINT  (0) 2013.09.24
COMMIT  (0) 2013.09.23
산술 연산자와 합성 연산자  (2) 2013.09.23
SELECT  (1) 2013.09.16
Posted by G4.
,