STUDY/자격증

DB SQL 조작어 DML (정보처리기사 / 산업기사 실기)

NightOwl 2018. 10. 6. 12:40
728x90

SQL조작문은 SELECT 문, INSERT문, UPDATE문, DELETE문 4가지가 있다.


SELECT 검색문


SELECT문은 테이블에서 자료를 검색할 때 사용되는 명령문이며, 산술식 계산도 수행한다.


예시)

SELECT 속성 FROM 테이블

[WHERE 조건]

[GROUP BY 속성 [HAVING 그룹조건]]

[ORDER BY 속성[ASC | DESC]];



1. SELECT 절

  - 검색하고자 하는 속성이름, 계산식

  - DISTINCT : 검색 결과에 중복되는 값이 있으면 한번만 표현하도록 하는 옵션


2. FROM 절


3. WHERE 절

 - 관계연산자와 논리연산자 등을 수행 할 수 있음


4. GROUP BY 절

 - 속성값을 그룹으로 분류하고자 할때

 - HAVING : 그룹바이에 의해 분류한 후 조건 제시시


5. ORDER BY 절

 - 속성값을 정렬 하고자 할때

 - ASC : 오름차순

 - DESC : 내림차순

 - 생략시 오름차순 정렬



*SQL연산자의 종류

 종류

연산자 

설명 

관계 연산자 

=, <, <=, >, >= 

값의 크기를 비교하여 검색 

범위 연산자 

BETWEEN 

검사값이 두 값의 사이인지 검색 

리스트 연산자

IN 

검사값이 리스트에 속하는지 검사 

패턴 매칭 연산자 

LIKE 

문자열의 일부가 같은지 검색  

논리연산자 

AND, OR, NOT 

 AND, OR, NOT 을 사용하여 탐색 조건을 결합하여 검색


Q) [학생]테이블에서 수학을 수강하는 학생의 학번과 성명을 검색.

A) SELECT 학번, 성명 FROM 학생 WHERE 수강과목 = '수학';


Q) [학생] 테이블에서 2학년 학생의 모든 속성을 검색.

A) SELECT * FROM 학생 WHERE 학년 = 2;


Q) [학생] 테이블에서 학년이 2학년이고, 수강과목이 '수학'인 학생의 성명과 연락처 검색.

A) SELECT 성명 연락처 FROM 학생 WHERE 학년 = 2 AND 수강과목 = '수학'


Q) [학생] 테이블에서 학생의 점수가 70점 이상 90점 이하인 학생의 성명 검색.

A) SELECT 성명 FROM 학생 WHERE 점수 BETWEEN 70 AND 90


Q) [학생] 테이블에서 2학년 이상인 학생의 수강과목을 검색하고, 같은 수강과목 값은 한번만 검색.

A) SELECT DISTINCT 수강과목 FROM 학생 WHERE 학년 >= 2;




*집계함수 검색문

함수 

의미 

SUM(속성) 

속성의 합계 

AVG(속성) 

속성의 평균 

MAX(속성) 

속성의 최대값 

MIN(속성) 

속성의 최소값 

COUNT(속성) 

속성의 튜플 수 




Q) [학생] 테이블에서 1학년 학생의 점수 합계

A) SELECT SUM(점수) FROM 학생 WHERE 학년=1;

SELECT SUM(점수) AS 1학년합계 FROM 학생 WHERE 학년=1; //속성이름을 표에 표현하고싶을때 RENAME


Q) [학생] 테이블에서 1학년과 2학년 학생의 학번과 성명을 검색.

A) SELECT 학번, 성명 FROM 학생 WHERE 학년 IN(3,4) // 원소함수 IN은 논리연산자 OR과 같은의미


Q) [학생] 테이블에서 점수가 80점 이상인 학생을 학번 오름차순으로 성명 검색.

SELECT 성명 FROM 학생 WHERE 점수 >= 80 ORDER BY 학번 ASC;  //ASC는 기본값으로 생략해도됨


Q) [학생] 테이블에서 점수가 80점 이상인 20명 이상인 학년을 검색.

A) SELECT 학년 FROM 학생 WHERE 점수 = 80 GROUP BY 학년 HAVING COUNT(*) =2;



* 부속 질의문 / 중첩질의문

- 부속질의문은 질의문 안에 또 하나의 하위 질의문을 갖고 있는 형태고 여러테이블을 이용해야하는 경우 사용

- 처음 나오는 질의문을 메인질의문(외부), 두번째 질의문을 부속(내부, 하위) 질의문

- 메인 질의문과 부속질의문은 =, IN, NOT IN, EXISTS, NOT EXISTS 로 연결



* 부분매치질의문

 : 부분 매치 질의문은 자료의 일부를 가지고 와서 비교하여 검색하는 질의문을 말한다.

Q. [학생] 테이블에서 연락처의 번호가 '8882'로 끝나는 학생의 성명 검색.

SELECT 성명 FROM 학생 WHERE 연락처 LIKE '%7588"; //여러자리를 대신하는경우 %, 한자리는 _ ,같은 경우는  = 사용


*NULL 값과 비교하는 질의문

 : NULL값과 비교하는 경우 WHERE 절에 = 대신에 IS를 사용하며 >,<대신에는 IS NOT을 사용



* JOIN 질의문

 : 두 테이블을 JOIN 연산 한 뒤 자료를 검색하는 형태의 질의문, 테이블1 JOIN 테이블2 ON 조인조건

Q. [학생]테이블과 [학과인원] 테이블에서 학과명을 JOIN 하여 이름,학과,학생수를 검색.

A. SELECT 이름,학과,학생수 FROM 학생 JOIN 학과인원 ON(학생.학과=학과인원.학과);

   SELECT 이름,학과,학생수 FROM 학생 JOIN 학과인원 USING 학과;



INSERT 삽입문

INSERT 문은 기존의 테이블에 새로운 튜플을 삽입하는 경우 사용


INSERT INTO 테이블이름 [(속성...)] VALUES (자료..);

Q. [학생] 테이블에 학번 112233, 성명 '이종인', 학년 3 수강과목 '수학' 인 학생을 삽입.

A. INSERT INTO 학생(학번, 성명, 학년, 수강과목)

VALUES (112233, '이종인', 3, '수학');



UPDATE 갱신문

UPDATE문은 테이블의 튜플중에서 값을 변경 하는 경우 사용


Q. [학생] 테이블에서 '이종인' 학생의 점수를 92점으로 수정.

A. UPDATE 학생 SET 점수 = 92 WHERE 성명='이종인';



DELETE 삭제문

DELETE문은 테이블의 튜플을 삭제할 경우 사용

WHERE 절의 조건에 맞는 튜플만 사용하며, WHERE절이 없으면 모든 튜플이 삭제됨 (DROP과 같은 기능)


728x90