학습 개요
- 2차원 구조의 테이블에서 사용자가 다양한 유형의 검색 결과를 얻을 수 있도록 SQL은 SELECT 문에 다양한 기능을 내포하고 있음
- SELECT 문은 산술, 논리 연산자 뿐만 아니라 관계형 데이터베이스에서만 사용 가능한 특수 연산자까지 사용자의 복잡한 요구를 표현할 수 있는 기능을 제공함
- SELECT 문은 함수 및 집계 함수를 사용한 질의를 통해 보다 복잡한 유형의 질의를 처리할 수 있는 형식을 지원함
- SELECT 문을 통해 향상된 질의 결과를 생성할 수 있는 산술, 논리, 비교 연산자와 특수 연산자 그리고 다양한 종류의 함수 및 집계 함수의 사용 방법에 대하여 알아봄
주요 용어
- 조건 질의 문
- 산술 연산식, 함수 등을 사용하여 표현한 조건을 WHERE 절에 기술하여 조건을 만족하는 레코드만 검색하는 SELECT 문
- ORDER BY
- 검색 결과를 특정 컬럼에 대해 오름차순 또는 내림차순으로 정렬
- 특수 연산자
- 범위 포함 여부, 부분 일치 여부, 포함 여부 등 관계형 데이터베이스에서만 사용되도록 고안된 연산자
- 함수
- 특정 목적을 수행하도록 사전에 정의된 연산 및 기능을 수행한 후 결과 값을 반환하는 명령어 집합
강의록
데이터 정렬과 특수 연산자
SELECT 명령어
- 한 개 이상의 테이블에서 주어진 조건에 만족하는 레코드를 출력하는 명령문
- 관계 대수의 셀렉트, 프로젝트, 조인, 카티션 프로덕트 연산자의 기능을 모두 포함하는 명령문
- 필수 절인 SELECT 절 장막 부가적인 목적으로 사용하는 절을 혼합하여 검색 기능을 구체화
SELECT의 구문형식
1
2
3
4
5
6
7
8
9
10
11
12
SELECT [DISTINCT] 컬럼1, 컬럼2, ..., 컬럼n
FROM 테이블1, [INNER JOIN | OUTER JOIN
테이블2, INNER JOIN | OUTER JOIN
ON 조인 조건식1,
테이블3,
INNER JOIN | OUTER JOIN
테이블m,
ON 조인 조건식n]
[WHERE 조건식 [중첩 질의]]
[GROUP BY 컬럼1, 컬럼2, ..., 컬럼y
[HAVING 조건]]
[ORDER BY 컬럼1 [ASC | DESC], ..., 컬럼z [ASC | DESC]]
데이터의 정렬
ORDER BY 절을 사용
1 2 3 4
SELECT 문 형식 ORDER BY 컬럼1 [ASC | DESC], ..., 컬럼n [ASC | DESC]
검색 결과를 특정 컬럼에 대해 오름차순 또는 내림차순으로 정렬
- 오름차순: ASC
- 내림차순: DESC
- 모두 생략 시 오름차순 기준
데이터 정렬의 사용
학번의 계좌 잔액을 잔액 기준으로 각각 오름차순, 내림차순으로 정렬하시오.
학생번호 계좌번호 잔액 201831-331215 123434-222222 800000 201834-021216 123434-111111 600000 201926-880215 123434-555555 300000 201931-781109 123434-444444 400000 201934-080621 123434-777777 300000 201934-790902 123434-666666 100000 202034-596541 123434-888888 1200000 202031-816515 123434-999999 150000 202031-354516 123435-111111 1000000 202078-080621 123435-222222 500000 202026-590930 123435-333333 450000 1 2
SELECT * FROM 계좌 ORDER BY 잔액 ASC
학생번호 계좌번호 잔액 201934-790902 123434-666666 100000 202031-816515 123434-999999 150000 201926-880215 123434-555555 300000 201934-080621 123434-777777 300000 201931-781109 123434-444444 400000 202026-590930 123435-333333 450000 202078-080621 123435-222222 500000 201834-021216 123434-111111 600000 201831-331215 123434-222222 800000 202031-354516 123435-111111 1000000 202034-596541 123434-888888 1200000 1 2
SELECT * FROM 계좌 ORDER BY 잔액 DESC
| 학생번호 | 계좌번호 | 잔액 | |—|—|—| | 202034-596541 | 123434-888888 | 1200000 | | 202031-354516 | 123435-111111 | 1000000 | | 201831-331215 | 123434-222222 | 800000 | | 201834-021216 | 123434-111111 | 600000 | | 202078-080621 | 123435-222222 | 500000 | | 202026-590930 | 123435-333333 | 450000 | | 201931-781109 | 123434-444444 | 400000 | | 201926-880215 | 123434-555555 | 300000 | | 201934-080621 | 123434-777777 | 300000 | | 202031-816515 | 123434-999999 | 150000 | | 201934-790902 | 123434-666666 | 100000 |
수강 정보를 ‘학생번호’ 기분으로 1차 오름차순으로 정렬하고 ‘과목코드’를 기준으로 2차 내림차순으로 정렬하시오
과목코드 학생번호 신청시각 KO03 201831-331215 2019-02-11 13:31:45 COM34 201831-331215 2020-02-20 13:54:22 COM24 201831-331215 2019-08-22 12:23:31 COM12 201831-331215 2019-08-21 23:25:25 LAW21 201834-021216 2016-02-11 08:21:22 KO03 201834-021216 2016-11-12 02:16:51 HE25 201834-021216 2017-08-01 01:24:54 COM34 201834-021216 2018-08-12 02:07:18 HE31 201926-880215 2020-02-02 06:22:16 HE25 201926-880215 2020-02-02 06:21:33 1 2
SELECT * FROM 수강 ORDER BY 학생번호 ASC, 과목코드 DESC
과목코드 학생번호 신청시각 COM11 201934-790902 2019-02-28 08:32:54 COM11 202026-590930 2019-02-20 16:00:21 COM11 202078-080621 2019-02-21 15:21:54 COM12 201831-331215 2019-08-21 23:25:25 COM12 201931-781109 2018-08-02 03:25:16 COM12 201978-610408 2015-02-24 10:25:40 COM12 202026-590930 2019-02-20 16:00:21 COM12 202031-816515 2019-02-07 02:44:33 COM12 202034-596541 2019-02-20 16:00:21 COM12 202078-080621 2019-02-21 15:21:54
특수 연산자
범위, 부분 일치 여부, 포함 여부 등 RDBMS에서 사용되도록 고안된 연산자
종류 사용 예 의미 BETWEEN 컬럼명 BETWEEN V₁ AND V₂ 컬럼값이 V₁ ~ V₂ 사이에 존재하는지 검사 LIKE 컬럼명 LIKE ‘V₁%’ V₁으로 시작하는 문자열 검사 컬럼명 LIKE ‘%V₁’ V₁으로 끝나는 문자열 검사 컬럼명 LIKE ‘%V₁%’ V₁이 문자열 내에 존재하는지 검사 컬럼명 LIKE ‘V₁_’ V₁뒤에 한 문자만 일치하는지 검사 IN 컬럼명 IN (V₁, … , Vₙ) 컬럼값이 V₁, V₂, …, Vₙ 중 하나와 일치하는지 검사
특수 연산자의 사용
잔액이 20만원 이상 40만원 이하인 계좌의 계좌번호, 잔액, 학생번호를 출력하시오.
계좌번호 잔액 학생번호 123434-222222 800000 201831-331215 123434-111111 600000 201834-021216 123434-555555 300000 201926-880215 123434-444444 400000 201931-781109 123434-777777 300000 201934-080621 123434-666666 100000 201934-790902 123434-888888 1200000 202034-596541 123434-999999 150000 202031-816515 123435-111111 1000000 202031-354516 123435-222222 500000 202078-080621 123435-333333 450000 202026-590930 123434-333333 400000 201978-610408 1 2
SELECT 계좌번호, 잔액, 학생번호 FROM 계좌 WHERE 잔액 BETWEEN 200000 AND 400000
계좌번호 잔액 학생번호 123434-555555 300000 201926-880215 123434-444444 400000 201931-781109 123434-777777 300000 201934-080621 123434-333333 400000 201978-610408 1 2
SELECT 계좌번호, 잔액, 학생번호 FROM 계좌 WHERE 잔액 >= 200000 AND 잔액 <= 400000
계좌번호 잔액 학생번호 123434-555555 300000 201926-880215 123434-444444 400000 201931-781109 123434-777777 300000 201934-080621 123434-333333 400000 201978-610408 과목 코드가 ‘COM’으로 시작하는 과목의 과목코드, 과목명, 이수구분을 출력하시오.
과목코드 과목명 학점 선수과목 이수구분 교수번호 COM11 컴퓨터의이해 3 교양 … COM12 파이썬 프로그래밍 기초 3 교양 … COM24 자료구조 3 COM12 전공필수 … COM31 데이터베이스 시스템 3 COM24 전공필수 … COM34 알고리즘 3 COM24 일반선택 … COM44 클라우드 컴퓨팅 3 전공필수 … ECE24 놀이지도 3 전공필수 … ECE31 유아언어교육 3 ECE31 전공필수 … HE14 패션과문화 3 일반선택 … HE25 인체생리학 3 전공필수 … HE31 임상영양학 3 HE25 전공필수 … 1 2
SELECT 과목코드, 과목명, 이수구분 FROM 과목 WHERE 과목코드 = 'COM'
| 과목코드 | 과목명 | 이수구분 | |—|—|—|
1 2
SELECT 과목코드, 과목명, 이수구분 FROM 과목 WHERE 과목코드 LIKE 'COM%'
과목코드 과목명 이수구분 COM11 컴퓨터의이해 교양 COM12 파이썬 프로그래밍 기초 교양 COM24 자료구조 전공필수 COM31 데이터베이스 시스템 전공필수 COM34 알고리즘 일반선택 COM44 클라우드 컴퓨팅 전공필수 소속학과가 ‘컴퓨터과학과’, ‘행정학과’, ‘법학과’인 교수의 교수이름, 직위, 소속학과를 출력하시오
교수번호 교수이름 직위 소속학과 연봉 186432-760829 최우성 조교수 생활학과 52000000 189414-790829 한용운 조교수 법학과 45000000 191924-730620 이동휘 부교수 행정학과 51000000 194634-810228 김규식 정교수 컴퓨터학과 70000000 194834-760517 정재화 부교수 컴퓨터학과 53000000 201216-158465 정용제 조교수 국어국문학과 55000000 201547-634895 현경석 정교수 생활학과 66000000 210315-549413 황지수 부교수 유아교육과 52000000 1 2
SELECT 교수 이름, 직위, 소속학과 FROM 교수 WHERE 소속학과 IN ('컴퓨터과학과', '행정학과', '법학과')
교수이름 직위 소속학과 한용운 조교수 법학과 이동휘 부교수 행정학과 김규식 정교수 컴퓨터학과 정재화 부교수 컴퓨터학과
집합 연산자
- 테이블은 집합, 레코드는 집합에 포함된 원소
- 집합 이론에서의 이진 연산
- 합집합:
UNION
,UNION ALL
- 교집합:
INTERSECT
- 차집합:
EXCEPT
- 합집합:
- 집합 연산자 사용 조건
- 테이블 R과 S의 차수 및 각 컬럼의 도메인이 일치
- 교집합 및 차집합은 지원하지 않는 상용 DBMS가 있어
NOT IN
등의 연산자를 사용하여 우회
집합 연산자의 사용
과목 테이블에서 ‘컴퓨터의 이해’를 강의하는 교수와 ‘데이터베이스 시스템’을 강의하는 교수의 교수번호를 출력하시오.
과목코드 과목명 학점 선수과목 이수구분 교수번호 COM11 컴퓨터의이해 3 교양 … COM12 파이썬 프로그래밍 기초 3 교양 … COM24 자료구조 3 COM12 전공필수 … COM31 데이터베이스 시스템 3 COM24 전공필수 … COM34 알고리즘 3 COM24 일반선택 … COM44 클라우드 컴퓨팅 3 전공필수 … ECE24 놀이지도 3 전공필수 … 1 2 3 4 5
SELECT 교수번호 FROM 과목 WHERE 과목명 = '컴퓨터의 이해' UNION SELECT 교수번호 FROM 과목 WHERE 과목명 = '데이터베이스 시스템'
교수번호 192634-810228 194834-760517 - 두 SELECT 모두 교수 번호 추출
- 결합하려는 두 SELECT 절의 순서와 도메인이 동일해야 함
- 두 SELECT 모두 교수 번호 추출
함수의 사용
함수의 개념
- 특정 목적을 수행하도록 사전에 정의된 연산 및 기능을 수행한 후 결과 값을 반환하는 명령어 집합
- 고도의 데이터 조작을 지원하고 SQL문 작성의 편의성을 유지
- 선언적 언어 특성 상 표현 불가능한 데이터 조작을 프로그래밍 언어적 특성을 맞춘 확장된 언어를 사용
- PL/SQL, TransactSQL, SQL Procedural 등
- 선언적 언어 특성 상 표현 불가능한 데이터 조작을 프로그래밍 언어적 특성을 맞춘 확장된 언어를 사용
- DBMS는 검색 결과가 사용자에게 어떤 형태로 사용되도록 여러 데이터 타입에 대한 다양한 사전 정의 함수를 제공
숫자 함수
삼각 함수, 상수, 올림과 버림, 난수 등의 숫자 데이터 타입에 적용할 수 있는 계산을 위한 함수
종류 사용 예 의미 ABS() ABS(X) X의 절대 값을 반환 SIN(), COS() 등 SIN(X) 등 X의 삼각함수 값을 반환 CEILING(), FLOOR() CEILING(X), FLOOR(X) X의 보다 크지(작지) 않은 최소(최대)의 정수 LN() LN(X) 자연 로그 lnX의 값을 반환 PI() PI() 원주율(π) 값을 반환 POWER() POWER(X, Y) 거듭 제곱 X^Y 값을 반환 RAND() RAND() 0과 1 사이의 임의의 값을 반환 ROUND() ROUND(X[, Y]) X의 Y번째 소수점 위치의 수를 반올림한 값을 반환 SQRT() SQRT(X) X의 제곱근의 값을 반환 TRUNCATE() TRUNCATE(X, Y) X의 Y번째 소수점 이하를 버림한 값을 반환
숫자 함수의 사용
졸업까지 8학기가 소요된다고 가정할 때, 각 학과의 학생이 평균적으로 이수해야 하는 학점을 계산하여 학과이름과 함께 출력하시오. 단, 평균 학점의 소수점 이하의 값은 버림하시오.
학과이름 단과대학 주소 전화번호 졸업학점 국어국문학과 인문과학대학 … 02-3668-4550 120 법학과 사회과학대학 … 02-3668-4590 130 생활과학과 자연과학대학 … 02-3668-4640 125 유아교육과 교육대학대학 … 02-3668-4670 125 컴퓨터과학과 자연과학대학 … 02-3668-4650 130 행정학과 사회과학대학 … 02-3668-4600 120 영어영문학과 인문과학대학 … 02-3668-4510 135 농학과 자연과학대학 … 02-3668-4600 140 1 2 3
SELECT 학과이름, 졸업학점 / 8, TRUNCATE(졸업학점/8, 0) FROM 학과
학과이름 졸업학점 / 8 TRUNCATE(졸업학점/8, 0) 국어국문학과 15.0 15 법학과 16.25 16 생활과학과 15.625 15 유아교육과 15.625 15 컴퓨터과학과 16.25 16 행정학과 15.0 15 영어영문학과 16.875 16 농학과 17.5 17
문자 함수
문자열 조작 및 문자 형식 변환 등의 문자와 관련된 다양한 연산을 지원하는 함수
종류 사용 예 의미 CHAR_LENGTH() CHAR_LENGTH(X) X의 글자수를 반환 (한글도 1글자로 계산) CONCAT() CONCAT(X, Y) X와 Y 문자열을 결합 LOWER() LOWER(X) X의 문자를 모두 소문자로 변환 UPPER() UPPER(X) X의 문자를 모두 대문자로 변환 SUBSTRING() SUBSTRING(X, A, B) X의 A번째 문자부터 B개의 문자열을 반환 TRIM()/LTRIM()/ RTRIM() TRIM(X)/LTRIM(X)/ RTRIM(X) 양쪽/왼쪽/오른쪽 공백 문자를 제거하고 반환
문자 함수의 사용
학생의 학생번호, 학생이름, 성별, 생년월일을 출력하시오. 단 학생번호는 앞 6자리만 출력하고 성별 뒤에는 ‘성’을 붙이시오.
학생번호 학생이름 성별 생년월일 나이 전화번호 201831-331215 김마리아 여 1991-06-18 29 010-0000-0002 201834-021216 유관순 여 1902-12-16 118 010-0000-0001 201926-880215 지청천 여 1988-02-15 32 010-0000-0005 201931-781109 안창호 남 1978-11-09 42 010-0000-0004 201934-080621 박은식 여 1959-09-30 61 010-0000-0007 201934-790902 안중근 남 1979-09-02 41 010-0000-0006 1 2
SELECT SUBSTRING(학생번호, 1, 6), 학생이름, CONCAT(성별, '성') FROM 학생
SUBSTRING(학생번호, 1, 6) 학생이름 CONCAT(성별, ‘성’) 201831 김마리아 여성 201834 유관순 여성 201926 지청천 여성 201931 안창호 남성 201934 박은식 여성 201934 안중근 남성
날짜 함수
날짜 및 시간 데이터 타입에 적용되어 산술 연산 및 시간 형 변환 등의 조작을 위한 함수
종류 사용 예 의미 ADDDATE() ADDDATE(X, INTERVAL Y 단위) X에 Y 단위의 시간을 더한 날짜를 반환 ADDTIME() ADDTIME(X, Y) X에 Y 시각을 더한 날짜를 반환 CURDATE(), CURRENT_DATE() CURDATE(), CURRENT_DATE() 현재 날짜를 반환 CURTIME(), CURRENT_TIME() CURTIME(), CURRENT_TIME() 현재 시간을 반환 DATE() DATE(X) X에서 날짜(년, 월, 일)을 반환 YEAR() YEAR(X) X에서 년 값을 반환
날짜 함수의 사용
수강신청 시작일 ‘2020년 2월 8일 00시 00분 00초’를 기준으로 15일 이내에 수강 신청된 수강 데이터의 학생번호, 과목코드, 신청시각을 출력하시오.
과목코드 학생번호 신청시각 COM11 201934-790902 2019-02-28 08:32:54 COM11 202026-590930 2019-02-20 16:00:21 COM11 202078-080621 2019-02-21 15:21:54 COM12 201831-331215 2019-08-21 23:25:25 COM12 201931-781109 2018-08-02 03:25:16 COM12 201978-610408 2015-02-24 10:25:40 COM12 202026-590930 2019-02-20 16:00:21 COM12 202031-816515 2019-02-07 02:44:33 1 2 3
SELECT 학생번호, 과목코드, 신청시각 FROM 수강 WHERE TIMESTAMPDIFF(DAY, 신청시각, '2020-2-8-00:00:00') < 15
학생번호 과목코드 신청시각 202026-590930 COM24 2020-02-17 22:15:34 202034-596541 COM24 2020-02-17 22:15:30 201831-331215 COM34 2020-02-20 13:54:22 202026-590930 COM34 2020-02-22 11:45:55 202034-596541 COM34 2020-02-22 11:45:55 201926-880215 COM44 2020-02-02 06:21:55 202026-590930 HE14 2020-02-21 22:51:43 201934-790902 HE25 2020-02-11 21:35:44
그룹 질의문
집계 함수
- 특정 칼럼에 집계 함수를 통해 다양한 통계 연산을 수행할 수 있는 기능
- SELECT 절 또는 HAVING절에 기술
- 집계 함수의 종류
COUNT
- 칼럼에 있는 값들의 개수
SUM
- 칼럼에 있는 값들의 합
AVG
- 칼럼에 있는 값들의 평균
MAX
- 칼럼에서 가장 큰 값
MIN
- 칼럼에서 가장 작은 값
집계 함수의 사용
단과대학의 총 수를 출력하시오
학과이름 단과대학 주소 전화번호 졸업학점 국어국문학과 인문과학대학 … 02-3668-4550 120 법학과 사회과학대학 … 02-3668-4590 130 생활과학과 자연과학대학 … 02-3668-4640 125 유아교육과 교육과학대학 … 02-3668-4670 125 컴퓨터과학과 자연과학대학 … 02-3668-4650 130 행정학과 사회과학대학 … 02-3668-4600 120 영어영문학과 인문과학대학 … 02-3668-4510 135 자연과학대학 자연과학대학 … 02-3668-4600 140 1 2
SELECT COUNT(단과대학) FROM 학과
COUNT(단과대학) 8 1 2
SELECT COUNT(DISTINCT 단과대학) FROM 학과
COUNT(DISTINCT 단과대학) 4 1 2
SELECT COUNT(DISTINCT 단과대학) AS 단과대학수 FROM 학과
단과대학수 4
그룹 질의
특정 기준으로 레코드를 그룹화하고 각 레코드 그룹에 대해 집계 함수를 적용하는 질의
1 2
SELECT 문 형식 GROUP BY 컬럼
- SELECT 절에 그룹의 기준과 집계 함수 이외의 컬럼은 포함 불가능
그룹 질의의 사용
소속학과별 교수의 수를 출력하시오
교수번호 교수이름 직위 소속학과 연봉 186432-760829 최우성 조교수 생활과학과 52000000 201547-634895 현경석 정교수 생활과학과 66000000 189414-790829 한용윤 조교수 법학과 45000000 191924-730620 이동휘 부교수 행정학과 51000000 194634-810228 김규식 정교수 컴퓨터과학과 70000000 194834-760517 정재화 부교수 컴퓨터과학과 53000000 201216-158465 정용제 조교수 국어국문학과 55000000 210315-549413 황지수 부교수 유아교육과 52000000 1 2 3
SELECT 소속학과, COUNT(*) AS 교수수 FROM 교수 GROUP BY 소속학과
소속학과 교수수 생활과학과 2 법학과 1 행정학과 1 컴퓨터과학과 2 국어국문학과 1 유아교육과 1 1 2 3
SELECT 소속학과, COUNT(*) AS 교수수, 교수이름 -- 칼럼의 원자성 위배하기 때문에 사용 불가능 FROM 교수 GROUP BY 소속학과
소속학과 교수수 교수이름생활과학과 2 최우성, 현경석법학과 1 한용윤행정학과 1 이동휘컴퓨터과학과 2 김규식, 정재화국어국문학과 1 정용제유아교육과 1 황지수
조건 그룹 질의
그룹 질의의 결과 레코드에 대해 출력 조건을 기술하는 질의
1 2 3
SELECT 문 형식 GROUP BY 칼럼 HAVING 조건
조건에 대한 기술
WHERE
- 레코드에 대한 조건을 기술
HAVING
- 집계 결과 레코드에 대한 조건을 기술
조건 그룹 질의의 사용
2개 이상의 전공을 신청한 학생의 학생 번호와 신청 전공수를 출력하시오
학생번호 학과이름 이수학점 201831-331215 국어국문학과 9 201831-331215 컴퓨터과학과 39 201834-021216 국어국문학과 81 201926-880215 생활과학과 48 201931-781109 유아교육과 93 201934-790902 유아교육과 87 201978-610408 법학과 87 1 2 3
SELECT 학생번호, COUNT(*) AS 신청_전공수 FROM 강좌 GROUP BY 학생번호
학생번호 신청_전공수 201831-331215 2 201834-021216 1 201926-880215 1 201931-781109 1 201934-790902 1 201978-610408 2 1 2 3 4
SELECT 학생번호, COUNT(*) AS 신청_전공수 FROM 강좌 GROUP BY 학생번호 HAVING 신청_전공수 >= 2
학생번호 신청_전공수 201831-331215 2 201978-610408 2 202026-590930 2 - 어떤 기준으로
GROUP BY
수행할 지- 학생 번호
- COUNT의 조건은 어떻게 명시할지
WHERE
절 아닌HAVING
절
- 어떤 기준으로
연습 문제
다음의 고객 테이블에서 아래의 SQL의 실행 결과로 올바른 것은?
고객 테이블
고객번호(PK) 고객이름 직장주소 연락처 C540 홍길동 서울시 종로구 1234 C101 김영희 서울시 종로구 5678 C211 신채호 광주시 광산구 1111 C343 이희영 부산시 북구 2222 C425 박상진 경기도 광주시 3333 C551 나철 대구시 달서구 5555 1 2
SELECT 고객이름, 직장주소 FROM 고객 WHERE 직장주소 LIKE '%광주%'
a.
고객이름 직장주소 신채호 광주시 광산구 박상진 경기도 광주시 LIKE
연산자는 관계형 DBMS을 위해 만들어진 특수 연산자로, 부분 일치하는 컬럼을 검색하는데 사용 됨%광주%
는 문자열 내부에 ‘광주’가 존재하는지 검사하는 표현이므로 ‘광주’가 어느 위치에 있어도 결과에 포함 됨
다음의 고객 테이블에서 아래의 SQL의 실행 결과로 올바른 것은?
고객 테이블
고객번호(PK) 고객이름 직장주소 연락처 C540 홍길동 서울시 종로구 1234 C101 김영희 서울시 종로구 5678 C211 신채호 광주시 광산구 1111 C343 이희영 부산시 북구 2222 C425 박상진 경기도 광주시 3333 C551 나철 대구시 달서구 5555 1 2
SELECT 고객이름, 연락처 FROM 고객 WHERE CHAR_LENGTH(고객이름) = 2
a.
고객이름 직장주소 나철 5555 CHAR_LENGTH()
함수는 컬럼 값의 글자수를 반환하는 함수- WHERE 절에서
CHAR_LENGTH(고객이름) = 2
는 고객이름이 두 글자인 컬럼을 찾는 조건을 표현하므로 결과에 이름이 외자인 고객만 출력 됨
다음의 고객 테이블에서 아래의 SQL의 실행 결과로 올바른 것은?
고객 테이블
고객번호(PK) 고객이름 직장주소 연락처 C540 홍길동 서울시 종로구 1234 C101 김영희 서울시 종로구 5678 C211 신채호 광주시 광산구 1111 C343 이희영 부산시 북구 2222 C425 박상진 경기도 광주시 3333 C551 나철 대구시 달서구 5555 1 2
SELECT 직장주소, COUNT(*), 연락처 FROM 고객 GROUP BY 직장주소
a. 오류 발생
GROUP BY
절은 특정 기준 컬럼을 대상으로 레코드를 그룹화하고 집계 함수를 적용하는 질의 기법임- 이때
SELECT
절에는SELECT
절에 그룹의 기준과 집계 함수 이외의 컬럼은 포함 불가능함 - 주어진 SQL에서는 그룹의 기준과 집계 함수에 포함되지 않는 ‘연락처’ 컬럼이 나열되어 있으므로 실행 시 오류가 발생함
정리 하기
ORDER BY
절은 검색 결과를 특정 컬럼에 대해 오름차순 또는 내림차순으로 정렬함- 오름차순은
ASC
, 내림차순은DESC
키워드를 컬럼과 기술하여 정렬의 순서를 결정함
- 오름차순은
BETWEEN
,IN
,LIKE
는 관계형 데이터베이스에서만 사용되도록 고안된 연산자로 범위, 부분 일치, 포함 여부 조건을 기술하기 위해 사용 됨- 특정 목적을 수행하도록 사전에 정의된 연산 및 기능을 수행한 후 결과 값을 반환하는 명령어 집합인 함수를 이용하여 보다 정교하게 데이터 검색 결과를 만들 수 있음
- 그룹 질의는 특정 기준으로 레코드를 그룹 화하고 각 레코드 그룹에 대해 집계 함수를 적용하는 질의임
- 집계 함수로는
COUNT
,SUM
,AVG
,MIN
,MAX
가 있음- 그룹 질의 후 처리 결과에 대한 조건을 제시하기 위해
HAVING
절을 사용함
- 그룹 질의 후 처리 결과에 대한 조건을 제시하기 위해
체크 포인트
다음 BETWEEN 연산의 의미와 동일한 것은?
1 2 3
SELECT * FROM 성적 WHERE (점수 BETWEEN 90 AND 95) AND 학과 = '컴퓨터과학과'
a.
점수 >= 90 AND 점수 <= 95
다음과 같은 student 테이블의 스키마가 주어졌을 때, 주어진 요구에 대한 SQL 질의어로 옳은 것은?
1 2
student(studno, name, grade, score, deptno) (단, studno는 학번, name은 학생 이름, grade는 학년, score는 성적, deptno는 학생이 속한 학과 번호를 의미하며, studno는 기본키이다)
1
student 테이블에서 학과 번호가 100번 이상인 학과들의 평균 성적 검색
a.
1 2 3
SELECT deptno, AVG(score) FROM student WHERE deptno >= 100 GROUP BY deptno