별의 공부 블로그 🧑🏻‍💻
728x90
728x170

SQLD 실전 문제 : SQL 기본 ①

문제 1

Q. 다음 중 데이터 제어어(DCL)에 해당하는 명령어는?
① INSERT
② RENAME
③ COMMIT
④ REVOKE

 

더보기

정답 : ④

해설 : 데이터 제어어(DCL: Data Control Language)에는 GRANT, REVOKE가 있다.

 

※ SQL 문장들의 종류

- 데이터 조작어(DML: Data Manipulation Language) : SELECT, INSERT, UPDATE, DELETE
- 데이터 정의어(DDL : Data Definition Language) : CREATE, ALTER, DROP, RENAME
- 데이터 제어어(DCL : Data Control Language) : GRANT, REVOKE
- 트랜잭션 제어어(TCL: Transaction Control Language) : COMMIT, ROLLBACK

 

문제 2

Q. 다음 중 아래 내용의 범주에 해당하는 SQL 명령어로 옳지 않은 것은?
테이블의 구조를 생성, 변경, 삭제하는 등 데이터 구조를 정의하는데 사용되는 명령어이다.

① CREATE
② GRANT
③ ALTER
④ DROP

 

더보기

정답 : ②

해설 : 데이터의 구조를 정의하는 명령어는 DDL(데이터 정의어)에 해당하며, DDL문으로는 CREATE, ALTER, DROP, RENAME이 있다.

 

문제 3

Q. 아래 내용에 해당하는 SQL 명령문의 종류를 작성하시오.
논리적인 작업의 단위를 묶어 DML에 의해 조작된 결과를 작업(Transaction)별로 제어하는 명령어인 Commit, Rollback, Savepoint 등이 여기에 해당하며, 일부에서는 DCL(Data Control Language)로 분류하기도 한다.

 

더보기

정답 : TCL

해설 : 트랜잭션을 제어하는 명령어는 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

 

더보기

정답 : ①, ②

해설 : 

- DML(Data Manipulation Language) : SELECT, INSERT, UPDATE, DELETE
- DDL(Data Definition Language) : CREATE, ALTER, DROP, RENAME
- DCL(Data Control Language) : GRANT, REVOKE
- TCL(Transaction Control Language) : COMMIT, ROLLBACK

 

문제 6

Q. 다음 중 아래의 데이터 모델과 같은 테이블 및 PK 제약조건을 생성하는 DDL 문장으로 올바른 것은? (단, DBMS는 Oracle을 기준으로 한다.)

① CREATE TABLE PRODUCT
   ( PROD_ID VARCHAR2(10) NOT NULL
    ,PROD_NM VARCHAR2(100) NOT NULL
    ,REG_DT DATE NOT NULL
    ,REGR_NO NUMBER(10) NULL );
    ALTER TABLE PRODUCT AND PRIMARY KEY PRODUCT_PK ON
   (PROD_ID);
② CREATE TABLE PRODUCT
    ( PROD_ID VARCHAR2(10)
    ,PROD_NM VARCHAR2(100)
    ,REG_DT DATE
    ,REG_NO NUMBER(10) );
    ALTER TABLE PRODUCT ADD CONSTRAINT PRODUCT_PK 
                             PRIMARY KEY (PROD_ID);
CREATE TABLE PRODUCT
   ( PROD_ID VARCHAR2(10) NOT NULL
    ,PROD_NM VARCHAR2(100) NOT NULL
    ,REG_DT DATE NOT NULL
    ,REGR_NO NUMBER(10) NULL 
    ,ADD CONSTRAINT PRIMARY KEY (PROD_ID) );
CREATE TABLE PRODUCT
   ( PROD_ID VARCHAR2(10) NOT NULL
    ,PROD_NM VARCHAR2(100) NOT NULL
    ,REG_DT DATE NOT NULL
    ,REGR_NO NUMBER(10) 
    ,CONSTRAINT PRODUCT PK PRIMARY KEY (PROD_ID) ); 

 

더보기

정답 : ④

해설 : ①은 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;
더보기

정답 : ④

해설 : ①, ② SQL Server에서는 여러개의 칼럼을 동시에 수정하는 구문은 지원하지 않으므로 오류가 발생한다. 또한 SQLServer 에서는 괄호를 사용하지 않는다.

③ 분류명을 수정할 때 NOT NULL 구문을 지정하지 않으면, 기존의 NOT NULL 제약조건이 NULL로 변경되므로 NOT NULL 요건을 만족하지 않는다.

 

※ 테이블 칼럼에 대한 정의 변경

Oracle
ALTER TABLE 테이블명 MODIFY (칼럼명1 데이터유형 [DEFAULT 식] [NOT NULL],
                             칼럼명2 데이터유형 ...);

 

SQL Server
ALTER TABLE 테이블명 ALTER (칼럼명1 데이터유형 [DEFAULT 식] [NOT NULL],
                            칼럼명2 데이터유형 ...);

 

문제 8

Q. 다음 중 NULL의 설명으로 가장 부적절한 것은?
① 모르는 값을 의미한다.
② 값의 부재를 의미한다.
③ 공백 문자(Empty String) 혹은 숫자 0을 의미한다.
④ NULL과 모든 비교(IS NULL 제외)는 알 수 없음(Unknown)을 반환한다.

 

더보기

정답 : 

해설 : NULL은 공백문자(Empty String) 혹은 숫자 0과 동일하지 않다.

 

※ NULL

- 아스키(ASCII) 코드 0번

- 공백(BLANK, ASCII 코드 32번)이나 숫자 0(ZERO, ASCII 코드 48번)과는 전혀 다른 값

- 조건에 맞는 데이터가 없을 때의 공집합과도 다르다.

- 아직 정의되지 않은 미지의 값

- 현재 데이터를 입력하지 못하는 경우를 의미한다.

 

문제 9

Q. 아래 테이블 T, S, R이 각각 다음과 같이 선언되었다. 다음 중 DELETE FROM T; 를 수행한 후에 테이블 R에 남아있는 데이터로 가장 적절한 것은?
CREATE TABLE T
(C INTEGER PRIMARY KEY,
 D INTEGER);
 
CREATE TABLE S
(B INTEGER PRIMARY KEY,
 C INTEGER REFERENCES T(C) ON DELETE CASCADE);
 
CREATE TABLE R
(A INTEGER PRIMARY KEY,
 B INTEGER REFERENCES S(B) ON DELETE SET NULL);

현재 테이블 T, S, R의 상태는 다음과 같다.

 

① (1, NULL)과 (2, 2)
② (1, NULL)과 (2, NULL)
③ (2, 2)
④ (1, 1)

 

더보기

정답 : ②

해설 : DELETE FROM T; 이후 데이터 현황

- T 테이블 : 두 건 모두 삭제됨.

- S 테이블 (CASCADE 옵션) : 두 건 모두 삭제됨.

- R 테이블 (SET NULL 옵션) : Child 해당 필드(FK: B칼럼) 값이 NULL로 변경됨.

 

문제 10

Q. 다음 중 테이블 생성시 칼럼별 생성할 수 있는 제약조건(Constraints)에 대한 설명으로 가장 부적절한 것은?
① UNIQUE : 테이블 내에서 중복되는 값이 없으며 NULL 입력이 불가능하다.
② PK : 주키로 테이블당 1개만 생성이 가능하다.
③ FK : 외래키로 테이블당 여러 개 생성이 가능하다.
④ NOT NULL : 명시적으로 NULL 입력을 방지한다.

 

더보기

정답 : ①

해설 : PK는 UNIQUE & NOT NULL 의 특징을 가진다. UNIQUE는 테이블 내에서 중복되는 값이 없지만, NULL 입력이 가능하다.

 

※ 제약조건의 종류

- PRIMARY KEY(기본키)

- UNIQUE KEY(고유키)

- NOT NULL

- CHECK

- FOREIGN KEY(외래키)

 

728x90

 

문제 11

Q. 다음 중 물리적 테이블 명으로 가장 적절한 것은?
① EMP_10
② 100-EMP
③ EMP-100
④ 100_EMP

 

더보기

정답 : ①

해설 : 테이블명과 칼럼명은 반드시 문자로 시작해야 한다. 사용되는 글자는 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 문장의 실행 결과로 가장 적절한 것은?
생성)
create table 학생 (학번 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) 값이 존재할 수 있기 때문이다.

 

더보기

정답 :

해설 : 학번 칼럼이 PK 이기 때문에 NULL 값이 없다. count(*)와 COUNT(학번)의 결과는 항상 같다.

 

문제 14

Q. 다음 외래키에 대한 설명으로 가장 부적절한 것을 2개 고르시오.
① 테이블 생성시 설정할 수 있다.
② 외래키 값은 널 값을 가질 수 없다.
③ 한 테이블에 하나만 존재해야 한다.
④ 외래키 값은 참조 무결성 제약을 받을 수 있다.

 

더보기

정답 : ②, ③

해설 : 외래키 값은 널 값을 가질 수 있으며, 한 테이블에 여러 개 존재할 수 있다.

 

문제 15

Q. 다음 중 데이터베이스 테이블의 제약조건(Constraint)에 대한 설명으로 가장 부적절한 것은?
① Check 제약조건(Constraint)은 데이터베이스에서 데이터의 무결성을 유지하기 위하여 테이블의 특정 칼럼(Column)에 설정하는 제약이다.
② 기본키 (Primary Key ) 는 반드시 테이블 당 하나의 제약만을 정의할 수 있다. 
③ 고유키(Unique Key)로 지정된 모든 칼럼들은 Null 값을 가질 수 없다.
④ 외래키(Foreign Key)는 테이블간의 관계를 정의하기 위해 기본키(Primary Key)를 다른 테이블의 외래키가 참조하도록 생성한다.

 

더보기

정답 :

해설 : 고유키(Unique Key)로 지정된 모든 칼럼은 Null 값을 가질 수도 있다.

 

문제 16

Q. 4개의 칼럼으로 이루어진 EMP 테이블에서 COMM 칼럼을 삭제하고자 할 때, 아래 SQL 문장의 (  ㄱ  ), (  ㄴ  ) 안에 들어갈 내용을 기술하시오.
(    ㄱ    ) TABLE EMP
(    ㄴ    ) COMM;

 

더보기

정답 : (ㄱ) : ALTER, (ㄴ): DROP COLUMN

해설 : Table 스키마 변경 시 사용하는 SQL문은 DDL(Data Definition Language)로, 칼럼 삭제 시 활용되는 문장은 다음과 같다.

ALTER TABLE 테이블명
DROP COLUMN 칼럼명

 

문제 17

Q. 아래 7개의 SQL 문장이 성공적으로 수행되었다고 할 때, A, B, C 세 개의 SQL 문장을 차례대로 실행하면 A와 C의 SELECT 문장 수행 결과는 각각 무엇인가?
CREATE TABLE 부서 (부서번호 CHAR(10), 부서명 CHAR(10), PRIMARY KEY(부서번호));

CREATE TABLE 직원 (직원번호 CHAR(IO), 소속부서 CHAR(IO), PRIMARY KEY(직원번호),
FOREIGN KEY(소속부서) REFERENCES 부서(부서번호) ON DELETE CASCADE);

INSERT INTO 부서 VALUES('1O', '영업과');
INSERT INTO 부서 VALUES('2O', '기획과');

INSERT INTO 직원 VALUES('1000', '10');
INSERT INTO 직원 VALUES('2000', '20');
INSERT INTO 직원 VALUES('3000', '20');
COMMIT;​
A. SELECT COUNT(직원번호) FROM 직원
B. DELETE FROM 부서 WHERE 부서번호 = '20';
C. SELECT COUNT(직원번호) FROM 직원
COMMIT;


① 3, null
② 3, 1
③ 3, 2
④ 3, 3

 

더보기

정답 : ②

해설 : 참조 무결성 규정

DELETE FROM 부서 WHERE 부서번호 = '20';  ─▶ CASCADE 참조 무결성 규정이므로 직원 테이블의 '2000', '3000' 도 같이 삭제된다.

 

SELECT COUNT(직원번호) FROM 직원 ─▶ 직원 테이블 '1000'에 대한 1건이 출력된다.

 

※ DELETE(/MODIFY) Action : CASCADE, SET NULL, SET DEFAULT, RESTRICT (부서→사원)

(1) CASCADE : Master 삭제 시, Child 같이 삭제

(2) SET NULL : Master 삭제 시, Child 해당 필드 Null

(3) SET DEFAULT : Master 삭제 시, Child 해당 필드 Default 값으로 설정

(4) RESTRICT : Child 테이블에 PK 값이 없는 경우만 Master 삭제 허용

(5) NO ACTION : 참조 무결성을 위반하는 삭제/수정 액션을 취하지 않음. 

 

문제 18

Q. STADIUM 테이블의 이름을 STADIUM_JSC로 변경하는 SQL을 작성하시오. (ANSI 표준 기준)

 

더보기

정답 : RENAME STADIUM TO STADIUM_JSC;

해설 : 테이블 이름은 다음과 같이 변경할 수 있다.

- 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)인 것은?
① CASCADE
② RESTRICT
③ AUTOMATIC
④ DEPENDENT

 

더보기

정답 :

해설 : 

※ DELETE(/MODIFY) Action : CASCADE, SET NULL, SET DEFAULT, RESTRICT (부서→사원)

(1) CASCADE : Master 삭제 시, Child 같이 삭제

(2) SET NULL : Master 삭제 시, Child 해당 필드 Null

(3) SET DEFAULT : Master 삭제 시, Child 해당 필드 Default 값으로 설정

(4) RESTRICT : Child 테이블에 PK 값이 없는 경우만 Master 삭제 허용

(5) NO ACTION : 참조 무결성을 위반하는 삭제/수정 액션을 취하지 않음. 

 

※ INSERT Action : AUTOMATIC, SET NULL, SET DEFAULT, DEPENDENT (부서→사원)

(1) AUTOMATIC : Master 테이블에 PK가 없는 경우, Master PK를 생성한 후 Child 입력

(2) SET NULL : Master 테이블에 PK가 없는 경우, Child 외부키를 Null 값으로 처리

(3) SET DEFAULT : Master 테이블에 PK가 없는 경우, Child 외부키를 지정된 기본값으로 입력

(4) DEPENDENT : Master 테이블에 PK가 존재할 때만 Child 입력 허용

(5) NO ACTION : 참조 무결성을 위반하는 입력 액션을 취하지 않음. 

 

문제 20

Q. 아래와 같은 SQL문에 대해 삽입이 성공하는 SQL문은?
CREATE TABLE TBL
(
    ID NUMBER PRIMARY KEY,
    AMT NUMBER NOT NULL,
    DEGREE VARCHAR2(1)
)

1. INSERT INTO TBL VALUES(1, 100)
2. INSERT INTO TBL(ID, AMT, DEGREE) VALUES(2, 200, 'AB')
3. INSERT INTO TBL(ID, DEGREE) VALUES(4, 'X')
4. INSERT INTO TBL(ID, AMT) VALUES(3, 300)
5. INSERT INTO TBL VALUES(5, 500, NULL)

① 1, 2
② 2, 3
③ 3, 4
④ 4, 5

 

더보기

정답 : ④

해설 : 

① 삽입 칼럼을 명시하지 않았을 경우 모든 칼럼을 삽입해야 한다.

② DEGREE 칼럼의 길이는 VARCHAR2(1)이다. 'AB'는 칼럼 길이를 초과한다.

③ NOT NULL 칼럼인 AMT 칼럼을 명시하지 않았다.

 

문제 21

Q. 아래와 갈은 데이터 모델에서 데이터를 조작하려고 한다. 다음 중 오류가 발생하는 SQL 문장인 것은?

① INSERT INTO BOARD VALUES (1, 'Q&A', 'Y', SYSDATE, 'Q&A 게시판');
② INSERT INTO BOARD (BOARD_ID, BOARD_NM, USE_YN, BOARD_DESC) VALUES ('100', 'FAQ', 'Y',  'FAQ 게시판');
③ UPDATE BOARD SET USE_YN = 'N' WHERE BOARD_ID = '1';
④ UPDATE BOARD SET BOARD_ID = 200 WHERE BOARD_ID = '100';

 

더보기

정답 : ②

해설 : REG_DATE 칼럼에 NOT NULL 제약조건이 있지만, INSERT INTO 구문에는 REG_DATE 칼럼이 대입되지 않아 NULL로 입력되므로 오류가 발생한다.

 

※ 테이블에 데이터를 입력하는 2가지 유형

INSERT INTO 테이블명
	(COLUMN_LIST) VALUES(COLUMN_LIST에 넣을 VALUE_SET);
INSERT INTO 테이블명 VALUES(전체 COLUMN에 넣을 VALUE_LIST);

 

※ 입력 데이터의 수정

UPDATE 테이블명 SET 수정되어야 할 칼럼명 = 수정되기를 원하는 새로운 값;

 

문제 22

Q. 아래 데이터 모델과 같이 고객과 주문 테이블이 생성되어 있으며, 고객과 주문 테이블에 입력되어 있는 데이터는 아래 표와 같다. 이 때 FK_001 이라는 제약조건을아래 SQL과 같이 설정하였다. 다음 중 오류 없이 정상적으로 수행되는 SQL을 2개 고르시오.

[SQL]
ALTER TABLE 주문 ADD CONSTRAINT FK_001 FOREIGN KEY (고객ID)
	REFERENCES 고객 (고객ID) ON DELETE SET NULL;

① 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;

 

더보기

정답 :

해설 : TRUNCATE TABLEDROP TABLE로그를 남기지 않으므로 개발 기준과 맞지 않다. 로그를 남기는 ①번 방법이 가장 좋은 방법이다. (②번 방법은 문법에 맞지 않다.)

 

문제 24

Q. 아래의 고객지역 테이블을 대상으로 질의 결과와 같이 거주지와 근무지를 출력하고자 한다. 아래 SQL의 (  ㄱ  ) 안에 들어갈 내용을 작성하시오.
[SQL]
SELECT (    ㄱ    ) 거주지, 근무지
FROM 고객지역;​

 

더보기

정답 : DISTINCT

해설 : 데이터의 중복을 제거하는 명령어는 'DISTINCT' 이다. GROUP BY 문을 사용하여 다음과 같이 중복 데이터를 제거할 수 있다.

SELECT 거주지, 근무지
FROM 고객지역
GROUP BY 거주지, 근무지;

 

※ 테이블에 입력된 데이터 조회

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으로 수행된다.

 

더보기

정답 : ①, ④

해설 : 

DROP TRUNCATE DELETE
DDL DDL
(일부 DML 성격 가짐.)
DML
ROLLBACK 불가능 ROLLBACK 불가능 COMMIT 이전 ROLLBACK 가능
AUTO COMMIT AUTO COMMIT 사용자 COMMIT
테이블이 사용했던 Storage를
모두 Release
테이블이 사용했던 Storage 중 
최초 테이블 생성시 할당된
Storage만 남기고 Release
데이터를 모두 Delete 해도 사용했던
Storage는 Relase 되지 않음.
테이블의 정의 자체를 완전히 삭제함. 테이블을 최초 생성된 초기 상태로
만듦.
데이터만 삭제

 

문제 27

Q. 데이터베이스 트랜잭션에 대한 설명으로 가장 부적절한 것을 2개 고르시오.
① 원자성(atomicity) : 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다.
② 일관성(consistency) : 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.
③ 고립성(isolation) : 트랜잭션이 실행와는 도중에 다른 트랜잭션의 영향올 받아 잘못된 결과를 만들어서는 안된다.
④ 지속성(durability) : 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다.

 

더보기

정답 : ②, ④

해설 : 일관성지속성의 설명이 바뀌었다.

특성 설명
원자성
(Atomicity)
트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다. (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 = 200 WHERE ID = '001';
CREATE TABLE 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 테이블은 생성되지 않았다.

 

더보기

정답 :

해설 : ORACLE에서 DDL 문장의 수행은 내부적으로 트랜잭션을 종료시키므로 B 테이블은 생성된다.

 

※ 테이블 내 입력한 데이터나, 수정한 데이터, 삭제한 데이터에 대하여 COMMIT 이전에는 변경 사항을 취소할 수 있는데 데이터베이스에서는 롤백(ROLLBACK) 기능을 사용한다. 롤백 (ROLLBACK)은 데이터 변경 사항이 취소되어 데이터의 이전 상태로 복구되며, 관련된 행에 대한 잠금(LOCKING)이 풀리고 다른 사용자들이 데이터 변경을 할 수 있게 된다.

 

문제 30

Q. 아래 내용의 (  ㄱ  ), (  ㄴ  ), (  ㄷ  ) 에 해당하는 단어를 순서대로 작성하시오.
(    ㄱ    ) 은 데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리킨다. (    ㄱ    )의 종료를 위한 대표적 명령어로서는 데이터에 대한 변경사항을 데이터베이스에 영구적으로 반영하는 (    ㄴ    )과 데이터에 대한 변경사항을 모두 폐기하고 변경 전의 상태로 되돌리는 (    ㄷ    )이 있다.

 

더보기

정답 :

(ㄱ) : 트랜잭션(Transaction)

(ㄴ) : 커밋(Commit)

(ㄷ) : 롤백(Rollback)

 

문제 31

Q. 아래와 같은 테이블에 SQL 구문이 실행되었을 경우 최종 출력 값을 작성하시오.

[SQL 구문]
BEGIN TRANSACTION
INSERT INTO 품목(품목ID, 단가) VALUES('005', 2OOO)
COMMIT
BEGIN TRANSACTION
DELETE 품목 WHERE 품목ID='002'
BEGIN TRANSACTION
UPDATE 품목 SET 단가=2000 WHERE 단가=1000
ROLLBACK
SELECT COUNT(품목ID) FROM 품목 WHERE 단가=2000

① 0
② 2
③ 3
④ 4

 

더보기

정답 : ③

해설 : ROLLBACK 구문은 COMMIT 되지 않은 상위의 모든 트랜잭션을 모두 롤백한다.

 

※ BEGIN TRANSACTION(BEGIN TRAN 구문도 가능)으로 트랜잭션을 시작하고 COMMIT TRANSACTION(TRANSACTION은 생략 가능) 또는 ROLLBACK TRANSACTION(TRANSACTION은 생략 가능)으로 트랜잭션올 종료한다. ROLLBACK 구문을 만나면 최초의 BEGIN TRANSACTION 시점까지 모두 ROLLBACKOI 수행된다

 

문제 32

Q. 아래의 상품 테이블의 데이터에 대하여 관리자가 아래와 같이 SQL 문장을 실행하여 데이터를 변경하였다. 데이터 변경 후의 상품ID '001'의 최종 상품명을 작성하시오.

[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;

 

더보기

정답 : LCD-TV

해설 : 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 절과 함께 (    ㄱ    ) 을(를) 이용하여 조회되는 데이터의 조건을 설정하여 데이터를 제한할 수 있다.

 

더보기

정답 : WHERE 또는 WHERE 절

해설 : WHERE 절은 SQL을 이용하여 데이터베이스로부터 데이터를 검색할 때 조회되어야 하는 데이터를 필터링하는데 사용된다.

 

※ WHERE 절은 FROM 절 다음에 위치하며, 조건식은 아래 내용으로 구성된다.

- 칼럼(Column)명 (보통 조건식의 좌측에 위치)

- 비교 연산자

- 문자, 숫자, 표현식 (보통 조건식의 우측에 위치)

- 비교 칼럼명 (JOIN 사용시)

 

문제 34

Q. 다음 중 SQL의 실행 결과로 가장 적절한 것은?

[SQL 구문]
SELECT COUNT(*)
FROM EMP_TBL
WHERE EMPNO > 100 AND SAL >= 3000 OR EMPNO = 200;

① 0
② 1
③ 2
④ 3

 

더보기

정답 : ②

해설 : 논리 연산자의 우선순위는 NOT > AND > OR 순이다.

(EMPNO > 100 AND SAL >= 3000) OR EMPNO = 200

 

※ 연산자의 우선 순위

① 괄호로 묶은 연산

② 부정 연산자(NOT)

③ 비교 연산자(=, >, >=, <=)와 SQL 비교 연산자(BETWEEN a AND b, IN (list), LIKE, IS NULL)

④ 논리 연산자 중 AND, OR의 순으로 처리

 

문제 35

Q. 다음 중 SELECT COL1 + COL3 FROM TAB_A; 의 결과로 가장 적절한 것은?

① NULL
② 80
     10
     60
③ 150
④ 50
    NULL
    NULL

 

더보기

정답 : ④

해설 : NULL 값이 포함된 사칙 연산의 결과는 NULL이다.

30 + 20 = 50

NULL + 40 = NULL

50 + NULL = NULL

 

※ NULL의 연산

- 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들을 수행했을 때 다음 설명 중 옳은 것은?
CREATE TABLE 서비스
(
    서비스번호 VARCHAR2(10) PRIMARY KEY,
    서비스명 VARCHAR2(100) NULL,
    개시일자 DATE NOT NULL
);​


[SQL]

(ㄱ) SELECT * FROM 서비스 WHERE 서비스번호 = 1;
(ㄴ) INSERT INTO 서비스 VALUES ('999', '2015-11-11');
(ㄷ) SELECT * FROM 서비스 WHERE 서비스명 = '';
(ㄹ) SELECT * FROM 서비스 WHERE 서비스명 IS NULL;

① 서비스번호 칼럼에 모든 레코드 중에서 ‘001’과 같은 숫자 형식으로 하나의 레코드만이라도 입력되어 (ㄱ)은 오류 없이 실행된다.
② ORACLE에서 (ㄴ)과 같이 데이터를 입력하였을 때. 서비스명 칼럼에 공백문자 데이터가 입력된다.
③ ORACLE에서 (ㄴ)과 같이 데이터를 입력하고, ㄷ)과 같이 조회하였을 때, 데이터는 조회된다.
④ SQL Server에서 (ㄴ)과 같이 데이터를 입력하고, (ㄹ)과 같이 조회하였을 때, 데이터는 조회되지 않는다.

 

더보기

정답 :

해설 : 

① 서비스번호 칼럼의 모든 레코드가 '001'과 같은 숫자 형식으로 입력되어 있어야 오류가 발생하지 않는다.

② (ㄴ)과 같이 데이터를 입력하면 서비스명 칼럼의 데이터에 대해서 Oracle에서는 NULL로 입력된다.

③ (ㄴ)과 같이 데이터가 입력되어 있을 때, Oracle에서 데이터를 조회하려면 서비스명 IS NULL 조건으로 조회하여야 한다.

④ (ㄴ)과 같이 데이터가 입력되어 있을 때, SQL Server에서 데이터를 조회하려면 서비스명 = '' 로 조회하여야 한다.

 

문제 38

Q. 아래와 같이 월별매출 테이블에 데이터가 입력되어 있다. 다음 중 2014년 11월부터 2015년 03월까지의 매출금액 합계를 출력하는 SQL 문장으로 옳은 것은?

 

① 
SELECT SUM(매출금액) AS 매출금액합계
FROM 월별매출
WHERE 년 BETWEEN '2014' AND '2015'
AND 월 BETWEEN '03' AND '12';

② 
SELECT SUM(매출금액) AS 매출금액합계
FROM 월별매출
WHERE 년 IN ('2014', '2015')
AND 월 IN ('11', '12', '03', '04', '05');

③ 
SELECT SUM(매출금액) AS 매출금액합계
FROM 월별매출
WHERE (년 = '2014' OR 년 = '2015')
AND (월 BETWEEN '01' AND '03' OR 월 BETWEEN '11' AND '12');

④ 
SELECT SUM(매출금액) AS 매출금액합계
FROM 월별매출
WHERE 년 = '2014' AND 월 BETWEEN '11' AND '12'
OR 년 = '2015' AND 월 BETWEEN '01' AND '03';

 

더보기

정답 : 

해설 : 

①의 조건은 2014년 03월부터 12월까지 매출금액과 2015년 03월부터 2015년 12월까지의 매출금액의 합이다.

②의 조건은 ①의 조건과 동일하다.

③의 조건은 2014년 01월부터 12월까지의 매출금액과 2015년 01월부터 12월까지의 매출금액의 합이다. 즉, 전체 데이터의 합이다.

④의 조건은 2014년 11월부터 2015년 03월까지의 매출금액의 합이며, 연산자 우선순위(AND > OR)에 의해 괄호가 없어도 된다.

 

※ BETWEEN a AND b

- a와 b의 값 사이에 있으면 된다.

- a와 b 값이 포함된다. (a ≤ x ≤ b)

 

※ IN (list)

- 리스트에 있는 값 중에서 어느 하나라도 일치하면 된다.

 

문제 39

Q. 아래 테이블 스키마를 참조하여 SQL 문장을 작성하였다. 다음 중 결과가 다른 SQL 문장은?

 

① 
SELECT SVC_ID, COUNT(*) AS CNT
FROM SVC_JOIN
WHERE SVC_END_DATE >= TO_DATE('20150101000000', 'YYYYMMDDHH24MISS')
AND SVC_END_DATE <= TO_DATE('20150131235959', 'YYYYMMDDHH24MISS')
AND CONCAT(JOIN_YMD, JOIN_HH) = '2014120100'
GROUP BY SVC_ID;

 

② 
SELECT SVC_ID, COUNT(*) AS CNT
FROM SVC_JOIN
WHERE SVC_END_DATE >= TO_DATE('20150101', 'YYYYMMDD')
AND SVC_END_DATE < TO_DATE('20150201', 'YYYYMMDD')
AND (JOIN_YMD, JOIN_HH) IN (('20141201', '00'))
GROUP BY SVC_ID;


③ 
SELECT SVC_ID, COUNT(*) AS CNT
FROM SVC_JOIN
WHERE '201501' = TO_CHAR(SVC_END_DATE, 'YYYYMM')
AND JOIN_YMD = '20141201'
AND JOIN_HH = '00'
GROUP BY SVC_ID;


④ 
SELECT SVC_ID, COUNT(*) AS CNT
FROM SVC_JOIN
WHERE TO_DATE('201501', 'YYYYMM') = SVC_END_DATE
AND JOIN_YMD || JOIN_HH = '2014120100'
GROUP BY SVC_ID

 

더보기

정답 : 

해설 :  ①, ②, ③번 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)로 구분된다.

 

728x90
그리드형(광고전용)
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖