Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바의 정석 기초편 ch4
- 자바의 정석 기초편 ch11
- 자바의 정석 기초편 ch12
- 스프링 mvc1 - 서블릿
- 자바의 정석 기초편 ch14
- 자바의 정석 기초편 ch1
- 스프링 mvc2 - 검증
- 스프링 db1 - 스프링과 문제 해결
- jpa - 객체지향 쿼리 언어
- 자바의 정석 기초편 ch9
- 자바의 정석 기초편 ch8
- @Aspect
- 자바의 정석 기초편 ch5
- 2024 정보처리기사 수제비 실기
- 스프링 mvc2 - 타임리프
- 자바의 정석 기초편 ch7
- 코드로 시작하는 자바 첫걸음
- 자바의 정석 기초편 ch13
- 타임리프 - 기본기능
- 자바의 정석 기초편 ch3
- 자바의 정석 기초편 ch2
- 스프링 mvc2 - 로그인 처리
- 게시글 목록 api
- jpa 활용2 - api 개발 고급
- 자바의 정석 기초편 ch6
- 스프링 입문(무료)
- 스프링 db2 - 데이터 접근 기술
- 스프링 mvc1 - 스프링 mvc
- 2024 정보처리기사 시나공 필기
- 스프링 고급 - 스프링 aop
Archives
- Today
- Total
나구리의 개발공부기록
CHAPTER 01 - 데이터베이스 기본(2) 본문
2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비)/실기 7강 - SQL 응용
CHAPTER 01 - 데이터베이스 기본(2)
소소한나구리 2024. 6. 30. 19:532024년도 수제비 실기책(6판) 내용 정리
3) DML
(1) 데이터 조작어(DML; Data Manipulation Languge)의 개념
- 데이터 베이스에 저장된 자료들을 입력, 수정, 삭제, 조회하는 언어
(2) DML 명령어(세인업데)
유형 | 동작 | 설명 |
SELECT | 조회 | 테이블 내 컬럼에 저장된 데이터를 조회 |
INSERT | 삽입 | 테이블 내 컬럼에 데이터를 추가 |
UPDATE | 갱신 | 테이블 내 컬럼에 저장된 데이터를 수정 |
DELETE | 삭제 | 테이블 내 컬럼에 저장된 데이터를 삭제 |
(3) SELECT(데이터 조회) 명령어
[1] SELECT 명령어 개념
- 데이터의 내용을 조회할 때 사용하는 명령어(셀프웨그해오)
- SELECT 절, FROM 절, WHERE 절, GROUP BY 절, HAVING절, ORDER BY절로 구성
-- SELECT 구성
SELECT [ALL | DISTINCT] 속성명1, 속성명2 ... # DISTINCT는 중복된 튜플이 있으면 그 중 첫번째 한개만 검색
FROM 테이블명1, ...
[WHERE 조건]
[GROUP BY 속성명1, ...]
[HAVING 그룹조건]
[ORDER BY 속성 [ASC | DESC]];
구분 | 설명 |
SELECT 절 | 검색하고자 하는 속성명, 계산식을 기술하고 속성명 별칭은 AS를 사용하며 생략 가능함 2개 이상의 테이블을 대상으로 검색할 때는 '테이블명.속성명'으로 표현 술어 부분은 ALL이 기본값 |
ALL - 모든 튜플을 검색할 때 사용 - SELECT 뒤에 명시하지 않은 경우 ALL로 인식 |
|
DISTINCT - 중복된 속성이 조회될 경우 그중 한 개만 검색(SELECT 뒤에 명시된 속성이 중복될 경우 한 개만 검색) |
|
FROM절 | 질의에 의해 검색될 데이터들을 포함하는 테이블명을 기술 |
WHERE절 | 검색할 조건을 기술 |
GROUP BY 절 | 속성값을 그룹으로 분류하고자 할 때 사용 |
HAVING 절 | GROUP BY에 의해 분류한 후 그룹에 대한 조건 지정 |
ORDER BY 절 | 속성값을 정렬하고자 할 때 사용 (ASC : 오름차순, DESC : 내림차순, 기본값: ASC) |
SELECT 절 예제
- SELECT 절은 테이블에서 출력할 컬럼을 명시하기 위해 사용
[1-2] WHERE 절
- WHERE 절 조건 비교, 범위, 집합, 패턴, NULL, 복합조건이 있음
구분 | 연산자 | 설명 |
비교 | = | 값이 같은 경우 조회 |
<>, != | 같이 다른 경우 조회 | |
<, <=, >, >= | 비교 연산에 해당하는 데이터 조회 | |
범위 | BETWEEN | 컬럼 BETWEEN 값1 AND 값2 - 값1보다 크거나 같고 값2보다 작거나 같은 데이터 조회 컬럼 >= 값1 AND 컬럼 <= 값2; 와 동일한 결과 |
집합 | IN | 컬럼 IN (값1, 값2, ...) - 컬럼이 IN 안에 포함된 경우의 데이터 조회 |
NOT IN | 컬럼 NOT IN (값1, 값2, ...) - 컬럼이 IN 안에 포함되어 있지 않은 경우의 데이터 조회 |
|
패턴 | LIKE | 컬럼 LIKE 패턴 - 컬럼이 패턴에 포함된 경우의 데이터 조회 % : 0개 이상의 문자열과 일치 [ ] : 1개의 문자와 일치 [^] : 1개의 문자와 불일치 _ : 특정 위치의 1개의 문자와 일치 |
NULL | IS NULL | 컬럼 IS NULL - 컬럼이 NULL인 데이터 조회 |
IS NOT NULL | 컬럼 IS NOT NULL - 컬럼이 NULL이 아닌 데이터 조회 |
|
복합 조건 | AND | 조건1 AND 조건2 - 조건1과 조건2를 모두 만족하는 데이터 조회 |
OR | 조건1 OR 조건2 - 조건1과 조건2 둘 중 하나를 만족하는 데이터 조회 |
|
NOT | NOT 조건 - 조건에 해당하지 않는 데이터 조회 |
WHERE 절 예제
-- BETWEEN
-- 상품(PRODUCT) 테이블에서 가격(PRICE)이 50000보다 크거나 같고 80000보다 작거나 같은 튜플을 조회
SELECT * FROM PRODUCT WHERE PRICE BETWEEN 50000 AND 80000;
-- IN
-- 상품(PRODUCT) 테이블에서 가격(PRICE)이 40000또는 50000또는 60000인 튜플을 조회
SELECT * FROM PRODUCT WHERE PRICE IN (40000, 50000, 60000);
-- LIKE_1
-- 상품(PRODUCT) 테이블에서 이름(NAME)이 '정보'로 시작되는 문자열 조회
SELECT * FROM PRODUCT WHERE NAME LIKE '정보%';
-- LIKE_2
-- 이름(NAME)이 첫 번째 문자가 'A'또는 'B' 또는 'C'또는 'D'인 문자열과 일치하는 문자열 검색
SELECT * FROM PRODUCT WHERE NAME LIKE '[ABCD]%';
-- NULL
-- 상품(PRODUCT) 테이블에서 가격(PRICE)이 NULL값인 경우의 튜플을 조회
SELECT * FROM PRODUCT WHERE PRICE IS NULL;
[1-3] GROUP BY 절
- 속성값을 그룹으로 분류하고자 할 때 사용
GORUP BY 절 예제
** SELECT 절에서 '컬럼명 AS 별칭' 형태로 쓰면 출력 시 컬럼명이 별칭으로 표기되며 AS는 생략이 가능함
SELECT 직책, COUNT(직책), SUM(급여) FROM 급여 GROUP BY 직책; |
GROUP BY 절에 명시된 직책을 기준으로 그룹을 묶었을 때, 직책별 건수(COUNT)와 급여의 합계(SUM) |
SELECT 부서 SUM(급여) AS 급여합계 FROM 급여 GROUP BY 부서; |
GROUP BY 절에 명시된 부서를 기준으로 그룹을 묶었을 때, 부서별 급여의 합계(SUM)를 급여합계로 출력 |
SELECT 직책, 부서 SUM(부서) AS 급여합계 FROM 급여 GROUP BY 직책, 부서; |
GROUP BY 절에 명시된 직책, 부서를 기준으로 그룹을 묶었을 때, 각 직책, 부서에 대한 급여 합계(SUM) |
SELECT COUNT(*) FROM 급여; |
GROUP BY 절이 없을 경우 전체 테이블이 하나의 그룹이 되고, 그룹에 해당하는 총 튜플의 수(COUNT)를 출력 |
[1-4] HAVING 절
- GROUP BY에 의해 분류한 후 그룹에 대한 조건을 지정할 때 사용
HAVING 절 예제
SELECT 직책, 부서 SUM(급여) AS 급여합계 FROM 급여 GROUP BY 직책, 부서 HAVING 급여합계 >= 5000; 또는 HAVING SUM(급여) >= 5000; |
GROUP BY 절에 명시된 직책, 부서를 기준으로 그룹을 묶었을 때, 각 직책, 부서에 대한 급여합계가 5000 이상인 급여합계 |
[1-5] ORDER BY 절
- 속성값을 정렬하고자 할 때 사용
ORDER BY 절 예제
SELECT * FROM 성적 ORDER BY 이름; |
ORDER BY 절에 ASC와 DESC가 명시되어 있지 않은 경우 ASC가 기본값 문자열일 경우 가나다 순으로 정렬 이름에 대해 오름차순 정렬 |
SELECT * FROM 성적 ORDER BY 과목, 이름; |
ORDER BY 절에 2개 이상의 속성이 있는 경우 먼저 선언 된 속성으로 정렬 후, 같은 값일 때 다음 속성으로 정렬 과목, 이름을 오름차순 정렬 |
SELECT * FROM 성적 ORDER BY 학점 DESC, 이름; |
ORDER BY 절에 2개 이상의 속성에 대해서 오름차순과 내림차순을 섞어서 사용할 수 있음 학점을 내림차순으로 정렬하고 같은 값일 때 이름을 오름차순으로 정렬 |
[2] 조인 (Join)
- 두 개 이상의 테이블을 연결하여 데이터를 검색하는 방법
- 두 릴레이션으로부터 관련된 튜플들을 결합하여 하나의 튜플로 만드는 가장 대표적인 데이터 연결 방법
유형 | 설명 |
내부 조인(Inner Join) | 공통 존재 컬럼의 값이 같은 경우를 추출하는 기법 |
외부 조인(Outer Join) | 왼쪽 외부 조인(Left Outer Join) - 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일한 데이터를 추출하는 기법 |
오른쪽 외부 조인(Right Outer Join) - 오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 동일한 데이터를 추출하는 기법 |
|
완전 외부 조인(Full Outer Join) - 양쪽의 모든 데이터를 추출하는 기법 |
|
교차 조인(Cross Join) | 조인 조건이 없는 모든 데이터 조합을 추출하는 기법 |
셀프 조인(Self Join) | 자기 자신에게 별칭을 지정한 후 다시 조인하는 기법 |
세타 조인(Theta Join) | 비교조건 >, =, < 을 만족하는 조인 |
동등 조인(Equal Join) | 비교조건 = 을 만족하는 조인, 내부조인, 외부 조인에서도 사용가능 |
자연 조인(Natural Join) | 동등 조인 Equal Join 에서 중복 속성을 제거한 조인 |
[2-1] 내부 조인
SELECT A.컬럼1, A.컬럼2, ..., B.컬럼1, B.컬럼2, ... FROM 테이블1 A [INNER] JOIN 테이블2 B ON 조인조건 [WHERE 검색조건]; |
같은 이름의 컬럼이 여러 테이블에 있을 경우 '별칭.컬럼명' 형태로 표시 INNER라는 키워드는 생략해도 내부 조인이 됨 WHERE 절 추가 시 조인된 값에서 조건에 맞은 결과만 출력 |
[2-2] 왼쪽, 오른쪽, 완전 외부 조인
SELECT A.컬럼1, A.컬럼2, ..., B.컬럼1, B.컬럼2, ... FROM 테이블1 A LEFT [OUTER] JOIN 테이블2 B ON 조인조건 [WHERE 검색조건]; |
OUTER 라는 키워드는 생략해도 왼쪽 외부 조인이 됨 WHERE 절 추가 시 조인된 값에서 조건에 맞은 결과만 출력 |
FROM 테이블1 A RIGHT [OUTER] JOIN 테이블2 B |
|
FROM 테이블1 A FULL [OUTER] JOIN 테이블2 B |
[2-3] 교차 조인
SELECT A.컬럼1, A.컬럼2, ..., B.컬럼1, B.컬럼2, ... FROM 테이블1 A CROSS JOIN 테이블2 B; |
조인 조건이 없는 모든 데이터 조합을 추출하기 때문에 ON 절이 없음 |
[2-4] 셀프 조인
SELECT A.컬럼1, A.컬럼2, ..., B.컬럼1, B.컬럼2, ... FROM 테이블1 A [INNER] JOIN 테이블1 B ON 조인조건 [WHERE 검색조건]; |
같은 테이블명을 쓰고 별칭만 A, B와 같이 다르게 함 WHERE 절 추가시 조인된 값에서 조건에 맞는 결과만 출력 |
JOIN 예제
SELECT A.책번호, A.책명, B.가격 FROM 도서 A JOIN 도서가격 B ON A.책번호 = B.책번호; |
'도서' 테이블은 A라는 별칭으로 '도서가격' 테이블은 B라는 별칭으로 설정 후 책번호가 같은 것끼리 조인 -> 공통된 값만 출력됨 |
SELECT A.책번호, A.책명, B.책번호, B.가격 FROM 도서 A LEFT JOIN 도서가격 B ON A.책번호 = B.책번호; |
각 테이블 별칭은 위와 동일 왼쪽에 위치한 '도서' 테이블 기준으로 왼쪽 외부 조인 -> 없는 값이 NULL로 표시됨 |
SELECT A.책번호, A.책명, B.책번호, B.가격 FROM 도서 A RIGHT JOIN 도서가격 B ON A.책번호 = B.책번호; |
각 테이블 별칭은 동일 오른쪽에 위치한 '도서가격 테이블 기준으로 오른쪽 외부 조인 -> 없는 값이 NULL로 표시됨 |
SELECT A.책번호, A.책명, B.책번호, B.가격 FROM 도서 A FULL JOIN 도서가격 B ON A.책번호 = B.책번호; |
각 테이블 별칭은 동일, 완전 외부 조인 -> A테이블의 NULL값이 먼저 출력 |
SELECT A.책번호, A.책명, B.책번호, B.가격 FROM 도서 A CROSS JOIN 도서가격 B; |
각 테이블 별칭은 동일, 조건 설정 없이 교차 조인 -> 교차곱(카티션 프로덕트)와 동일한 결과 |
SELECT A.책번호, A.책명 B.책번호, B.책명 FROM 도서 A JOIN 도서 B ON A.선수과목_책번호 = B.책번호 |
[도서] 해당 도서 테이블을 A,B라는 별칭으로 따로 설정 테이블 내의 다른 컬럼을 조건으로 두어 셀프 조인 수행 -> NULL 값이 빠지고 출력됨 |
[3] 서브쿼리(Sub-Query)
- SQL문 안에 포함된 SQL문
- 알려지지 않은 기준을 위한 검색을 위해 사용됨
- 메인쿼리와 서브쿼리 관계는 주종 관계로서 서브쿼리에 사용되는 컬럼 정보는 메인쿼리의 컬럼 정보를 사용할 수 있으나 역으로는 성립이 안됨
- 서브쿼리 유형
서브쿼리 종류 | 설명 |
FROM 절 서브쿼리 | 서브쿼리가 FROM절 안에 들어있는 형태 인라인 뷰(Inline Views)라고 불림 뷰(View)처럼 결과가 동적으로 생성된 테이블 형태로 사용할 수 있음 |
WHERE 절 서브쿼리 | 서브쿼리가 WHERE 절 안에 들어있는 형태 중첩 서브쿼리(Nested Sub-Query)라고도 불림 |
SELECT 절 서브쿼리 | 셀렉트 절에서 서브쿼리를 사용할 수 있음 스칼라 서브쿼리라고 불림 각 행의 추가 정보를 가져올 때 사용됨 |
서브쿼리 예제
- FROM 절 서브쿼리
SELECT MAX(가격) AS 가격 FROM 도서가격 A, (SELECT 책번호 FROM 도서 WHERE 책명 = '자료구조') B WHERE A.책번호 = B.책번호; |
A라는 이름으로 바꾼 '도서 가격'의 '책번호'와 B라는 이름의 서브쿼리 결괏값(책이름이 자료구조인) 중 '책번호'가 같은 책의 최대 '가격'을 출력 (SELECT 책번호 FROM 도서 WHERE 책명 = '자료구조')라는 결과값을 B라는 이름으로 명명하면 B라는 테이블 처럼 사용할 수 있음 |
- WHERE 절 서브쿼리
SELECT MAX(가격) AS 가격 FROM 도서가격 WHERE 책번호 IN (SELECT 책번호 FROM 도서 WHERE 책명 = '자료구조') ; |
(SELECT 책번호 FROM 도서 WHERE 책명 = '자료구조') 서브쿼리에서 나온 '책번호'와 '도서가격 테이블에 있는 '책번호'와 같은 책의 최대 가격을 출력 * 책에서는 IN으로 되어있지만 하나의 책번호만 반환되므로 =이 맞다고 생각함 |
[4] 집합 연산자(Set Operation)
- 테이블을 집합 개념으로 보고, 두 테이블 연산에 집합 연산자를 사용하는 방식
- 여러 질의 결과를 연결하여 하나로 결합하는 방식을 사용함 (2개 이상의 질의 결과를 하나의 결과로 만들어 줌)
집합 연산자 | 구성도 | 설명 |
UNION |
중복 레코드를 제외 |
중복 행이 제거된 쿼리 결과를 반환하는 집합 연산 |
UNION ALL |
중복 레코드를 허용 |
중복 행이 제거되지 않은 쿼리 결과를 반환하는 집합 연산 |
INTERECT |
중복 레코드만 포함 |
두 쿼리 결과에 공통적으로 존재하는 결과를 반환하는 집합 연산 |
MINUS |
비교 레코드 제외 |
첫 쿼리에 있고 두 번째 쿼리에는 없는 결과를 반환하는 집합 연산 |
집합 연산자 예제
- UNION
SELECT ENAME FROM EMP WHERE SAL <= 2000 UNION SELECT ENAME FROM EMP WHERE SAL >= 1500; |
EMP 테이블에서 SAL이 2000보다 작거나 같은 직원의 이름과 EMP 테이블에서 SAL이 1500보다 크거나 같은 직원의 이름의 합집합을 중복을 제거한 후 결과를 반환 |
- UNIONALL
SELECT ENAME FROM EMP WHERE SAL <= 2000 UNION ALL SELECT ENAME FROM EMP WHERE SAL >= 1500; |
EMP 테이블에서 SAL이 2000보다 작거나 같은 직원의 이름과 EMP 테이블에서 SAL이 1500보다 크거나 같은 직원의 이름의 합집합을 중복을 포함하여 결과를 반환 |
- INTERSPECT
SELECT ENAME FROM EMP WHERE SAL <= 2000 INTERSPECT SELECT ENAME FROM EMP WHERE SAL >= 1500; |
EMP 테이블에서 SAL이 2000보다 작거나 같은 직원의 이름과 EMP 테이블에서 SAL이 1500보다 크거나 같은 직원의 이름의 교집합 결과를 반환 |
- MINUS
SELECT ENAME FROM EMP WHERE SAL <= 2000 MINUS SELECT ENAME FROM EMP WHERE SAL >= 1500; |
EMP 테이블에서 SAL이 2000보다 작거나 같은 직원의 이름과 EMP 테이블에서 SAL이 1500보다 크거나 같은 직원의 이름의 차집합 결과를 반환 데이터 집합을 기준으로 다른 데이터 집합과 공통 항목을 제외한 결과를 추출 |
(4) INSERT (데이터삽입) 명령어
- 속성과 데이터 개수, 데이터 타입이 일치해야함
- 속성명은 생략 가능(입력 데이터의 개수가 속성의 개수와 일치할 경우)
- 속성의 타입이 숫자인 경우 데이터는 따옴표를 붙이지 않아도 되며, 문자열인 경우 따옴표를 붙여야 함
-- INSERT
INSERT INTO 테이블명(속성명1, ...) VALUES (데이터1, ...);
-- 예시 : 학생 테이블에 학번이 6677, 이름이 장길산, 학년이 3학년, 수강과목은 수학인 학생을 삽입
INSERT INTO 학생(학번, 이름, 학년, 수강과목) VALUES (6677, '장길산', 3, '수학');
(5) UPDATE(데이터 변경) 명령어
- WHERE 절을 통해 어떤 조건이 만족할 경우에만 특정 컬럼의 값을 수정하는 용도로 자주 사용됨
-- UPDATE
UPDATE 테이블명 SET 속성명 = 데이터, ... WHERE 조건;
-- 예시 : 학생 테이블에 장길산의 주소를 인천으로 수정
UPDATE 학생 SET 주소 = '인천' WHERE 이름 = '장길산';
(6) DELETE(데이터 삭제)
- 모든 레코드를 삭제할 때는 WHERE 절 없이 DELETE만 사용
- 레코드를 삭제해도 테이블 구조는 남아 있어서 디스크에서 테이블을 완전히 삭제하는 DROP명령과는 다름
-- DELETE
DELETE FROM 테이블명 WHERE 조건;
-- 예시 : 학생 테이블에 장길산에 대한 튜플을 삭제
DELETE FROM 학생 WHERE 이름 = '장길산';
4) DCL
(1) 데이터 제어어(DCL; Data Control Language)의 개념
- 데이터베이스 관라자가 데이터 보안, 무결성 유지, 병행 제어, 회복을 위해 관리자(DBA)가 사용하는 제어용 언어
유형 | 동작 | 설명 |
GRANT | 사용 권한 부여 | 관리자(DBA)가 사용자에게 데이터베이스에 대한 권한을 부여하는 명령어 |
REVOKE | 사용 권한 취소 | 관리자(DBA)가 사용자에게 부여했던 권한을 회수하기 위한 명령어 |
[1] GRANT(권한 부여)명령어 (그온투)
-- GRANT
GRANT 권한 ON 테이블 TO 사용자;
-- 예시 : 관리자가 사용자 장길산에게 학생 테이블에 대해 업데이트 할 수 있는 권한 부여
GRANT UPDATE ON 학생 TO 장길산;
[2] REVOKE(권한 회)명령어 (리온프)
-- REVOKE
REVOKE 권한 ON 테이블 FROM 사용자;
-- 예시 : 관리자가 사용자 장길산에게 학생 테이블에 대해 업데이트 할 수 있는 권한을 회수
REVOKE UPDATE ON 학생 FROM 장길산;
'2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비) > 실기 7강 - SQL 응용' 카테고리의 다른 글
CHAPTER 02 - 응용 SQL, CHAPTER 03 - SQL 활용 및 최적화 (기출문제, 예상문제) (0) | 2024.07.01 |
---|---|
CHAPTER 02 - 응용 SQL, CHAPTER 03 - SQL 활용 및 최적화 (0) | 2024.07.01 |
CHAPTER 01 - 데이터베이스(예상문제) (0) | 2024.07.01 |
CHAPTER 01 - 데이터베이스(기출문제) (1) | 2024.06.30 |
CHAPTER 01 - 데이터베이스 기본(1) (0) | 2024.06.30 |