해설 :트랜잭션을 제어하는 명령어는 TCL(Transaction Control Language)이다.
문제 4
Q. 데이터베이스를 정의하고 접근하기 위해서는 데이터베이스 관리 시스템과의 통신 수단이 필요한데 이를 데이터 언어(Data Language)라고 하며, 그 기능과 사용 목적에 따라 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)로 구분된다. 다음 중 데이터 언어와 SQL 명령어에 대한 설명으로 가장 부적절한 것은?
① 비절차적 데이터 조작어(DML)는 사용자가 무슨 데이터를 원하며, 어떻게 그것을 접근해야 되는지를 명세하는 언어이다. ② DML은 데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터베이스를 실질적으로 접근하는데 사용되며 SELECT, INSERT, DELETE, UPDATE 등이 있다. ③ DDL은 스키마, 도메인, 테이블, 뷰, 인덱스를 정의하거나 변경 또는 제거할 때 사용되며 CREATE, ALTER, DROP, RENAME 등이 있다. ④ 호스트 프로그램 속에 삽입되어 사용되는 DML 명령어들을 데이터 부속어(Data Sub Language)라고 한다.
해설 : 비절차적 데이터 조작어(DML)는 사용자가 무슨(What) 데이터를 원하는 지만을 명세한다. 비절차적 데이터 조작어(DML)는 사용자가 무슨(What) 데이터를 원하는 지만을 명세하지만, 절차적 데이터 조작어는 어떻게(How) 데이터를 접근해야 하는지 명세한다. 절차적 데이터 조작어로는 PL/SQL(오라클), T-SQL(SQL Server) 등이 있다.
문제 5
Q. 다음 중 데이터베이스 시스템 언어의 종류와 해당하는 명령어를 바르게 연결한 것을 2개 고르시오.
① DML - SELECT ② TCL - COMMIT ③ DCL - DROP ④ DML - ALTER
해설 : ①은 PK를 지정하는 ALTER TABLE 문장에 문법 오류가 존재하고, 올바른 문법이 사용된 문장은 다음과 같다.
=> ALTER TABLE PRODUCT ADD CONSTRAINT PRODUCT_PK PRIMARY KEY (PROD_ID);
②는 NOT NULL 칼럼에 대해서 NOT NULL 제약조건을 지정하지 않았다.
③은 테이블을 생성할 때 PK를 지정하는 문장에 문법 오류가 존재한다.
문제 7
Q. 아래와 같이 데이터가 들어있지 않은 왼쪽 기관 분류 테이블 (가)를 오른쪽 기관 분류 테이블 (나)처럼 변경하고자 할 때 다음 중 올바른 SQL 문장은? (단, DBMS는 SQL Server로 가정한다.)
① ALTER TABLE 기관분류 ALTER COLUMN (분류명 VARCHAR(30), 등록일자 DATE NOT NULL); ② ALTER TABLE 기관분류 ALTER COLUMN (분류명 VARCHAR(30) NOT NULL, 등록일자 DATE NOT NULL); ③ ALTER TABLE 기관분류 ALTER COLUMN 분류명 VARCHAR(30); ALTER TABLE 기관분류 ALTER COLUMN 등록일자 DATE NOT NULL; ④ ALTER TABLE 기관분류 ALTER COLUMN 분류명 VARCHAR(30) NOT NULL; ALTER TABLE 기관분류 ALTER COLUMN 등록일자 DATE NOT NULL;
해설 :테이블명과 칼럼명은 반드시 문자로 시작해야 한다. 사용되는 글자는 A-Z, a-z, 0-9, _, $, # 만 허용한다.
※ 테이블 생성 시 주의사항
- 테이블명온 객체를 의미할 수 있는 적정한 이름을 사용한다. 가능한 단수형을 권고한다. - 테이블명은 다른 테이블의 이름과 중복되지 않아야 한다. - 한 테이블 내에서는 칼럼명이 중복되게 지정할 수 없다. - 테이블 이름을 지정하고 각 칼럼들은 괄호 "( )" 로 묶어 지정한다. - 각 칼럼들은 콤마 "," 로 구분되고. 테이블 생성문의 끝은 항상 세미콜론 ";" 으로 끝난다. - 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용하는 것이 좋다. (데이터 표준화 관점) - 칼럼 뒤에 데이터 유형은 꼭 지정되어야 한다. - 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다. - 벤더에서 사전에 정의한 예약어(Reserved Word)는 쓸 수 없다. - A-Z, a-z, 0-9, _, $, # 문자만 허용된다.
문제 12
Q. 아래와 같은 테이블 구조를 정의하려고 한다. 이때 아직 부서가 정의되지 않은 사원은 기본부서(코드 : '0000')로 배치하고, 입사일자(JOIN_date) 기준으로 많은 조회가 발생하므로 입사일자에 INDEX를 생성하려고 한다. 다음 중 올바른 SQL 문장을 2개 고르시오.
① CREATE TABLE EMP (EMP_NO VARCHAR2(10) PRIMARY KEY, EMP_NM VARCHAR2(30) NOT NULL, DEPT_CODE VARCHAR2(4) DEFAULT '0000' NOT NULL, JOIN_DATE DATE NOT NULL, REGIST_DATE DATE NULL ); CREATE INDEX IDX_EMP_01 ON EMP (JOIN_DATE); ② CREATE TABLE EMP (EMP_NO VARCHAR2(10) PRIMARY KEY, EMP_NM VARCHAR2(30) NOT NULL, DEPT_CODE VARCHAR2(4) DEFAULT '0000', JOIN_DATE DATE NOT NULL, REGIST_DATE DATE ); CREATE INDEX IDX_EMP_01 ON EMP (JOIN_DATE); ③ CREATE TABLE EMP (EMP_NO VARCHAR2(10) NOT NULL, EMP_NM VARCHAR2(30) NOT NULL, DEPT_CODE VARCHAR2(4) DEFAULT '0000' NOT NULL, JOIN_DATE DATE NOT NULL, REGIST_DATE DATE ); ALTER TABLE EMP ADD CONSTRAINT EMP_PK PRIMARY KEY (EMP_NO); CREATE INDEX IDX_EMP_01 ON EMP (JOIN_DATE); ④ CREATE TABLE EMP (EMP_NO VARCHAR2(10) NOT NULL PRIMARY KEY, EMP_NM VARCHAR2(30) NOT NULL, DEPT_CODE VARCHAR2(4) DEFAULT '0000' NOT NULL, JOIN_DATE DATE NOT NULL, REGIST_DATE DATE NULL ); ALTER TABLE EMP ADD CONSTRAINT EMP_PK PRIMARY KEY(EMP_NO); CREATE INDEX IDX_EMP_01 ON EMP (JOIN_DATE);
② SQL 문장은 정상적으로 수행되지만, DEPT_CODE 칼럼에 NOT NULL 제약조건이 생성되지 않는다. NOT NULL 제약 조건이 생성되지 않으면 명시적으로 DEPT_CODE 칼럼에 NULL을 입력하게 되면 NULL이 입력되는 문제가 발생한다.
④ 테이블 생성문과 인덱스 생성문은 정상적으로 수행되지만, 테이블 생성문장에서 이미 PRIMARY KEY를 지정하였으므로 ALTER TABLE 문장에서 오류가 발생한다.
문제 13
Q. 다음 중 아래와 같은 문장으로 '학생' 테이블을 생성한 후, 유효한 튜플(Tuple)들을 삽입하였다. SQL 1, SQL 2 문장의 실행 결과로 가장 적절한 것은?
생성)
createtable 학생 (학번 char(8) primary key, 장학금 integer);
SQL1 : select count(*) from 학생 SQL2 : select count(학번) from 학생
① SQL1, SQL2 문장의 실행 결과는 다를 수 있으며, 그 이유는 장학금 속성(Attribute)에 널(Null) 값이 존재할 수 있기 때문이다. ② SQL1, SQL2 문장의 실행 결과는 항상 다르다. ③ SQL1, SQL2 문장의 실행 결과는 항상 같다. ④ SQL1, SQL2 문장의 실행 결과는 다를 수 있으며, 그 이유는 학번 속성(Attribute)에 널(Null) 값이 존재할 수 있기 때문이다.
Q. 다음 중 데이터베이스 테이블의 제약조건(Constraint)에 대한 설명으로 가장 부적절한 것은?
① Check 제약조건(Constraint)은 데이터베이스에서 데이터의 무결성을 유지하기 위하여 테이블의 특정 칼럼(Column)에 설정하는 제약이다. ② 기본키 (Primary Key ) 는 반드시 테이블 당 하나의 제약만을 정의할 수 있다. ③ 고유키(Unique Key)로 지정된 모든 칼럼들은 Null 값을 가질 수 없다. ④ 외래키(Foreign Key)는 테이블간의 관계를 정의하기 위해 기본키(Primary Key)를 다른 테이블의 외래키가 참조하도록 생성한다.
- RENAME OLD_OBJECT_NAME TO NEW_OBJECT_NAME (ANSI 표준 기준, 오라클과 동일함.)
문제 19
Q. 표준 SQL(SQL:1999)에서 테이블 생성시 참조 관계를 정의하기 위해 외래키(Foreign Key)를 선언한다. 관계형 데이터베이스에서 Child Table의 FK 데이터 생성시 Parent Table에 PK가 없는 경우, Child Table 데이터 입력을 허용하지 않는 참조 동작(Referential Action)인 것은?
① INSERT INTO 고객 VALUES ('C003', '강감찬', '2014-01-01'); ② INSERT INTO 주문 VALUES ('0005', 'C003', '2013-12-28'); ③ DELETE FROM 주문 WHERE 주문번호 IN ('0001', '0002'); ④ DELETE FROM 고객 WHERE 고객ID = 'C002';
② 고객 테이블에 존재하지 않는 고객ID의 주문을 입력하라고 하여 무결성 제약 오류 발생 (①번 SQL 수행 후에는 정상 작동)
④ 고객 테이블의 고객ID 'C002'를 삭제하려고 할 때 SQL에 의해 추가된 CONSTRAINT에 따라 주문 테이블의 고객ID를 NULL로 업데이트하려고 DBMS에서 시도하지만, 주문 테이블 고객ID 컬럼의 NOT NULL 제약조건에 의해 실패한다.
문제 23
Q. 개발 프로젝트의 표준은 모든 삭제 데이터에 대한 로그를 남기는 것을 원칙으로 하고, 테이블 삭제의 경우는 허가된 인력만이 정기적으로 수행 가능하도록 정하고 있다. 개발팀에서 사용 용도가 없다고 판단한 STADIUM 테이블의 데이터를 삭제하는 가장 좋은 방법은 무엇인가?
① DELETE FROM STADIUM; ② DELETE * FROM STADIUM; ③ TRUNCATE TABLE STADIUM; ④ DROP TABLE STADIUM;
해설 : 데이터의 중복을 제거하는 명령어는 'DISTINCT' 이다. GROUP BY 문을 사용하여 다음과 같이 중복 데이터를 제거할 수 있다.
SELECT 거주지, 근무지
FROM 고객지역
GROUPBY 거주지, 근무지;
※ 테이블에 입력된 데이터 조회
SELECT [ALL/DISTINCT] 보고싶은칼럼명, 보고싶은칼럼명, ...
FROM 해당_칼럼들이_있는_테이블명;
- ALL : Default 옵션이므로 별도로 표시하지 않아도 된다. 중복된 데이터가 있어도 모두 출력한다. - DISTINCT : 중복된 데이터가 있는 경우 1건으로 처리해서 출력한다.
문제 25
Q. 다음 중 아래와 같은 상황에서 사용할 수 있는 SQL 명령어는?
우리가 관리하는 데이터베이스의 "매출" 테이블이 너무나 많은 디스크 용량을 차지하여 "매출" 테이블에서 필요한 데이터만을 추출하여 별도의 테이블로 옮겨 놓았다. 이후 "매출" 원본 테이블의 데이터를 모두 삭제함과 동시에, 디스크 사용량도 초기화 하고자 한다. (단, "매출' 테이블의 스키마 정의는 유지한다.)
① TRUNCATE TABLE 매출; ② DELETE FROM 매출; ③ DROP TABLE 매출; ④ DELETE TABLE FROM 매출;
해설 : 특정 테이블의 모든 데이터를 삭제하고, 디스크 사용량을 초기화 하기 위해서는 TRUNCATE TABLE 명령을 사용해야 한다.
② DELETE TABLE은 테이블의 데이터를 모두 삭제하지만, 디스크 사용량을 초기화 하지는 않는다.
③ DROP TABLE은 테이블의 데이터를 모두 삭제하고, 디스크 사용량도 없앨(초기화) 수 있지만, 테이블의 스키마 정의도 함께 삭제된다.
④ DELETE TABLE FROM은 존재하지 않는 명령이다.
※ TRUNCATE TABLE은 테이블 자체가 삭제되는 것이 아니고, 해당 테이블에 들어있던 모든 행들이 제거되고 저장 공간을 재사용 가능하도록 해제 한다. 테이블 구조를 완전히 삭제하기 위해서는 DROP TABLE을 실행하면 된다.
문제 26
Q. 다음 중 DELETE와 TRUNCATE, DROP 명령어에 대해 비교한 설명으로 가장 부적절한 것을 2개 고르시오.
① 특정 테이블에 대하여 WHERE 조건절이 없는 DELETE 명령을 수행하면 DROP TABLE 명령을 수행했을 때와 똑같은 결과를 얻올 수 있다. ② DROP 명령어는 테이블 정의 자체를 삭제하고, TRUNCATE 명령어는 테이블을 초기 상태로 만든다. ③ TRUNCATE 명령어는 UNDO를 위한 데이터를 생성하지 않기 때문에 동일 데이터량 삭제시 DELETE보다 빠르다. ④ DROP은 Auto Commit이 되고, DELETE와 TRUNCATE는 사용자 Commit으로 수행된다.
테이블이 사용했던 Storage 중 최초 테이블 생성시 할당된 Storage만 남기고 Release
데이터를 모두 Delete 해도 사용했던 Storage는 Relase 되지 않음.
테이블의 정의 자체를 완전히 삭제함.
테이블을 최초 생성된 초기 상태로 만듦.
데이터만 삭제
문제 27
Q. 데이터베이스 트랜잭션에 대한 설명으로 가장 부적절한 것을 2개 고르시오.
① 원자성(atomicity) : 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다. ② 일관성(consistency) : 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다. ③ 고립성(isolation) : 트랜잭션이 실행와는 도중에 다른 트랜잭션의 영향올 받아 잘못된 결과를 만들어서는 안된다. ④ 지속성(durability) : 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다.
트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다. (All or Nothing)
일관성 (Consistency)
트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다.
고립성 (Isolation)
트랜잭션이 실행와는 도중에 다른 트랜잭션의 영향올 받아 잘못된 결과를 만들어서는 안된다.
지속성 (Durability)
트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.
문제 28
Q. 데이터베이스의 트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제점으로 가장 부적절한 것을 2개 고르시오.
① Dirty Read : 다른 트랜잭션에 의해 수정되었고, 이미 커밋된 데이터를 읽는 것을 말한다. ② Non-Repeatable Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상을 말한다. ③ Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫번째 쿼리에서 없던 유렁 레코드가 두 번째 쿼리에서 나타나는 현상을 말한다. ④ Isolation : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
① Dirty Read : 다른 트랜잭션에 의해 수정되었지만, 아직 커밋되지 않은 데이터를 읽는 것
④ Isolation(트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다)은 데이터베이스 트랜잭션의 4가지 특성으로 문제점이 아니고 목표라 할 수 있다.
문제 29
Q. 테이블 A에 대해 아래와 같은 SQL을 수행하였을 때 테이블 A의 ID '001'에 해당하는 최종 VAL의 값이 ORACLE에서는 200, SQL Server에서는 100이 되었다. 다음 설명 중 가장 부적절한 것은? (단, AUTO COMMIT은 FALSE로 설정되어 있다.)
[SQL]
UPDATE A SET VAL =200WHERE ID ='001';
CREATETABLE B (ID CHAR(3) PRIMARY KEY);
ROLLBACK;
① ORACLE에서는 CREATE TABLE 문장을 수행한 후, 묵시적으로 COMMIT이 수행되어 VAL 값은 200이 되었다. ② SQL Server에서는 ROLLBACK 문장에 의해 UPDATE가 취소되어 VAL 값은 100이 되었다. ③ ORACLE에서는 CREATE TABLE 문장 수행에 의해 VAL 값은 200이 되었지만, ROLLBACK 실행으로 인하여 최종적으로 B 테이블은 생성되지 않았다. ④ SQL Server에서는 ROLLBACK 실행으로 인하여 UPDATE가 취소되었으며, 최종적으로 B 테이블은 생성되지 않았다.
※ 테이블 내 입력한 데이터나, 수정한 데이터, 삭제한 데이터에 대하여 COMMIT 이전에는 변경 사항을 취소할 수 있는데 데이터베이스에서는 롤백(ROLLBACK) 기능을 사용한다. 롤백 (ROLLBACK)은 데이터 변경 사항이 취소되어 데이터의 이전 상태로 복구되며, 관련된 행에 대한 잠금(LOCKING)이 풀리고 다른 사용자들이 데이터 변경을 할 수 있게 된다.
문제 30
Q. 아래 내용의 ( ㄱ ), ( ㄴ ), ( ㄷ ) 에 해당하는 단어를 순서대로 작성하시오.
( ㄱ ) 은 데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리킨다. ( ㄱ )의 종료를 위한 대표적 명령어로서는 데이터에 대한 변경사항을 데이터베이스에 영구적으로 반영하는 ( ㄴ )과 데이터에 대한 변경사항을 모두 폐기하고 변경 전의 상태로 되돌리는 ( ㄷ )이 있다.
해설 : ROLLBACK 구문은 COMMIT 되지 않은 상위의 모든 트랜잭션을 모두 롤백한다.
※ BEGIN TRANSACTION(BEGIN TRAN 구문도 가능)으로 트랜잭션을 시작하고 COMMIT TRANSACTION(TRANSACTION은 생략 가능) 또는 ROLLBACK TRANSACTION(TRANSACTION은 생략 가능)으로 트랜잭션올 종료한다. ROLLBACK 구문을 만나면 최초의 BEGIN TRANSACTION 시점까지 모두 ROLLBACKOI 수행된다
문제 32
Q. 아래의 상품 테이블의 데이터에 대하여 관리자가 아래와 같이 SQL 문장을 실행하여 데이터를 변경하였다. 데이터 변경 후의 상품ID '001'의 최종 상품명을 작성하시오.
해설 :ROLLBACK TRANSACTION SP2 문장에 의해 UPDATE 상품 SET 상품명 = '평면-TV' WHERE 상품ID = '001' 이 ROLLBACK 되었고, 첫 번째 UPDATE 문장만 유효한 상태에서 COMMIT 되었으므로 첫 번째 UPDATE한 내역만 반영 된다. 그러므로 LCD-TV가 된다.
※ 저장점(SAVEPOINT)을 정의하면 롤백(ROLLBACK) 할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백할 수 있다.
[Oracle]
SAVEPOINT SVPT1;
...
ROLLBACK TO SVPT1;
[SQL Server]
SAVE TRANSACTION SVTR1;
...
ROLLBACK TRANSACTION SVTR1;
문제 33
Q. 아래의 ( ㄱ ) 에 들어갈 내용을 적으시오.
SQL을 사용하여 데이터베이스에서 데이터를 조회할 때 원하는 데이터만을 검색하기 위해서 SELECT, FROM 절과 함께 ( ㄱ ) 을(를) 이용하여 조회되는 데이터의 조건을 설정하여 데이터를 제한할 수 있다.
- NULL 결과의 연산(+, -, *, / 등)은 NULL 값을 리턴 - NULL 값과의 비교 연산(=, >, >=, <, <=)은 거짓(FALSE)을 리턴 - 특정 값보다 크다, 적다라고 표현할 수 없음.
문제 36
Q. 다음 SQL 문장 중 COLUMN1의 값이 널(NULL)이 아닌 경우를 찾아내는 문장으로 가장 적절한 것은? (ANSI 표준 기준)
① SELECT * FROM MYTABLE WHERE COLUMN1 IS NOT NULL ② SELECT * FROM MYTABLE WHERE COLUMN1 <> NULL ③ SELECT * FROM MYTABLE WHERE COLUMN1 != NULL ④ SELECT * FROM MYTABLE WHERE COLUMN1 NOT NULL
해설 : NULL 값을 조건절에서 사용하는 경우 IS NULL, IS NOT NULL 이란 키워드를 사용해야 한다.
※ 부정 비교 연산자
- != : 같지 않다. - ^= : 같지 않다. - <> : 같지 않다. (ISO 표준, 모든 운영체제에서 사용 가능) - NOT 칼럼명 = : ~와 같지 않다. - NOT 칼럼명 > : ~보다 크지 않다.
문제 37
Q. 아래와 같은 DDL 문장으로 테이블을 생성하고, SQL들을 수행했을 때 다음 설명 중 옳은 것은?
CREATETABLE 서비스
(
서비스번호 VARCHAR2(10) PRIMARY KEY,
서비스명 VARCHAR2(100) NULL,
개시일자 DATENOTNULL
);
[SQL]
(ㄱ) SELECT*FROM 서비스 WHERE 서비스번호 =1;
(ㄴ) INSERTINTO 서비스 VALUES ('999', '2015-11-11');
(ㄷ) SELECT*FROM 서비스 WHERE 서비스명 ='';
(ㄹ) SELECT*FROM 서비스 WHERE 서비스명 ISNULL;
① 서비스번호 칼럼에 모든 레코드 중에서 ‘001’과 같은 숫자 형식으로 하나의 레코드만이라도 입력되어 (ㄱ)은 오류 없이 실행된다. ② ORACLE에서 (ㄴ)과 같이 데이터를 입력하였을 때. 서비스명 칼럼에 공백문자 데이터가 입력된다. ③ ORACLE에서 (ㄴ)과 같이 데이터를 입력하고, ㄷ)과 같이 조회하였을 때, 데이터는 조회된다. ④ SQL Server에서 (ㄴ)과 같이 데이터를 입력하고, (ㄹ)과 같이 조회하였을 때, 데이터는 조회되지 않는다.
해설 :①, ②, ③번 SQL은 모두 가입이 2014년 12월 01일 00시에 발생했고, 서비스 종료일시가 2015년 01월 01일 00시 00분 00초와 2015년 01월 01일 23시 59분 59초 사이에 만료되는 데이터를 찾는 조건이지만, ④번 SQL은 가입 조건은 동일하지만, 서비스 종료 일시가 2015년 01월 01일 00시 00분 00초에 종료되는 SQL을 찾는 조건이다.
※ SQL 연산자의 종류
구분
연산자
의미
비교 연산자
=
같다.
>
보다 크다.
>=
보다 크거나 같다.
<
보다 작다.
<=
보다 작거나 같다.
SQL 연산자
BETWEEN s AND b
a와 b의 값 사이에 있으면 된다. (a와 b 값이 포함됨.)
IN (list)
리스트에 있는 값 중에서 어느 하나라도 일치하면 된다.
LIKE '비교문자열'
비교 문자열과 형태가 일치하면 된다. (%, _ 사용)
IS NULL
NULL 값인 경우
논리 연산자
AND
앞에 있는 조건과 뒤에 오는 조건이 참(TRUE)이 되면 결과도 참(TRUE)이 된다. 즉, 앞의 조건과 뒤의 조건을 동시에 만족해야 한다.
OR
앞의 조건이 참(TRUE)이거나 뒤의 조건이 참(TRUE)이 되어야 결과도 참(TURE)이 된다. 즉, 앞의 조건과 뒤의 조건 중 하나만 참(TRUE)이면 된다.
NOT
뒤에 오는 조건에 반대되는 결과를 되돌려 준다.
부정 비교 연산자
!=
같지 않다.
^=
같지 않다.
<>
같지 않다. (ISO 표준, 모든 운영체제에서 사용 가능)
NOT 칼럼명 =
~와 같지 않다.
NOT 칼럼명 >
~보다 크지 않다.
부정 SQL 연산자
NOT BETWEEN a AND b
a와 b의 값 사이에 있지 않다. (a, b 값을 포함하지 않는다.)
NOT IN (list)
list 값과 일치하지 않는다.
IS NOT NULL
NULL 값을 갖지 않는다.
문제 40
Q. 아래와 같은 내장 함수에 대한 설명 중에서 옳은 것을 모두 묶은 것은?
가) 함수의 입력 행수에 따라 단일행 함수와 다중행 함수로 구분할 수 있다. 나) 단일행 함수는 SELECT, WHERE, ORDER BY, UPDATE의 SET절에 사용이 가능하다. 다) 1:M 관계의 두 테이블을 조인할 경우 M쪽에 다중행이 출력되므로 단일행 함수는 사용할 수 없다. 라) 단일행 함수는 다중행 함수와 다르게 여러 개의 인수가 입력 되어도 단일 값만을 반환한다.
다) 1:M 조인이라 하더라도 M쪽에서 출력된 행이 하나씩 단일행 함수의 입력값으로 사용되므로 사용할 수 있다.
라) 다중행 함수도 단일행 함수와 동일하게 단일 값만을 반환한다.
※ 함수는 벤더에서 제공하는 함수인 내장 함수(Built-In Function)와 사용자가 정의할 수 있는 함수(User Defined Function)로 나눌 수 있다. 내장 함수는 다시 단일행 함수(Single Row Function)와 다중행 함수(Multi Row Function)로 나눌 수 있으며, 다중행 함수는 집계 함수(Aggregate Function), 그룹 함수(Group Function), 윈도우 함수(Window Function)로 구분된다.