Home [데이터베이스 시스템] 6강 - SQL
Post
Cancel

[데이터베이스 시스템] 6강 - SQL

💡해당 게시글은 방송통신대학교 정재화 교수님의 '데이터베이스 시스템' 강의를 개인 공부 목적으로 메모하였습니다.



학습 개요


  • 2차원 구조의 테이블에서 사용자가 다양한 유형의 검색 결과를 얻을 수 있도록 SQL은 SELECT 문에 다양한 기능을 내포하고 있음
  • SELECT 문은 산술, 논리 연산자 뿐만 아니라 관계형 데이터베이스에서만 사용 가능한 특수 연산자까지 사용자의 복잡한 요구를 표현할 수 있는 기능을 제공함
  • SELECT 문은 함수 및 집계 함수를 사용한 질의를 통해 보다 복잡한 유형의 질의를 처리할 수 있는 형식을 지원함
  • SELECT 문을 통해 향상된 질의 결과를 생성할 수 있는 산술, 논리, 비교 연산자와 특수 연산자 그리고 다양한 종류의 함수 및 집계 함수의 사용 방법에 대하여 알아봄



주요 용어


  • 조건 질의 문
    • 산술 연산식, 함수 등을 사용하여 표현한 조건을 WHERE 절에 기술하여 조건을 만족하는 레코드만 검색하는 SELECT 문
  • ORDER BY
    • 검색 결과를 특정 컬럼에 대해 오름차순 또는 내림차순으로 정렬
  • 특수 연산자
    • 범위 포함 여부, 부분 일치 여부, 포함 여부 등 관계형 데이터베이스에서만 사용되도록 고안된 연산자
  • 함수
    • 특정 목적을 수행하도록 사전에 정의된 연산 및 기능을 수행한 후 결과 값을 반환하는 명령어 집합



강의록


데이터 정렬과 특수 연산자

SELECT 명령어

image.png

  • 한 개 이상의 테이블에서 주어진 조건에 만족하는 레코드를 출력하는 명령문
  • 관계 대수의 셀렉트, 프로젝트, 조인, 카티션 프로덕트 연산자의 기능을 모두 포함하는 명령문
    • 필수 절인 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-331215123434-222222800000
    201834-021216123434-111111600000
    201926-880215123434-555555300000
    201931-781109123434-444444400000
    201934-080621123434-777777300000
    201934-790902123434-666666100000
    202034-596541123434-8888881200000
    202031-816515123434-999999150000
    202031-354516123435-1111111000000
    202078-080621123435-222222500000
    202026-590930123435-333333450000
    1
    2
    
      SELECT * FROM 계좌
      	ORDER BY 잔액 ASC
    
    학생번호계좌번호잔액
    201934-790902123434-666666100000
    202031-816515123434-999999150000
    201926-880215123434-555555300000
    201934-080621123434-777777300000
    201931-781109123434-444444400000
    202026-590930123435-333333450000
    202078-080621123435-222222500000
    201834-021216123434-111111600000
    201831-331215123434-222222800000
    202031-354516123435-1111111000000
    202034-596541123434-8888881200000
    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차 내림차순으로 정렬하시오

    과목코드학생번호신청시각
    KO03201831-3312152019-02-11 13:31:45
    COM34201831-3312152020-02-20 13:54:22
    COM24201831-3312152019-08-22 12:23:31
    COM12201831-3312152019-08-21 23:25:25
    LAW21201834-0212162016-02-11 08:21:22
    KO03201834-0212162016-11-12 02:16:51
    HE25201834-0212162017-08-01 01:24:54
    COM34201834-0212162018-08-12 02:07:18
    HE31201926-8802152020-02-02 06:22:16
    HE25201926-8802152020-02-02 06:21:33
    1
    2
    
      SELECT * FROM 수강
      	ORDER BY 학생번호 ASC, 과목코드 DESC
    
    과목코드학생번호신청시각
    COM11201934-7909022019-02-28 08:32:54
    COM11202026-5909302019-02-20 16:00:21
    COM11202078-0806212019-02-21 15:21:54
    COM12201831-3312152019-08-21 23:25:25
    COM12201931-7811092018-08-02 03:25:16
    COM12201978-6104082015-02-24 10:25:40
    COM12202026-5909302019-02-20 16:00:21
    COM12202031-8165152019-02-07 02:44:33
    COM12202034-5965412019-02-20 16:00:21
    COM12202078-0806212019-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-222222800000201831-331215
    123434-111111600000201834-021216
    123434-555555300000201926-880215
    123434-444444400000201931-781109
    123434-777777300000201934-080621
    123434-666666100000201934-790902
    123434-8888881200000202034-596541
    123434-999999150000202031-816515
    123435-1111111000000202031-354516
    123435-222222500000202078-080621
    123435-333333450000202026-590930
    123434-333333400000201978-610408
    1
    2
    
      SELECT 계좌번호, 잔액, 학생번호 FROM 계좌
          WHERE 잔액 BETWEEN 200000 AND 400000
    
    계좌번호잔액학생번호
    123434-555555300000201926-880215
    123434-444444400000201931-781109
    123434-777777300000201934-080621
    123434-333333400000201978-610408
    1
    2
    
      SELECT 계좌번호, 잔액, 학생번호 FROM 계좌
          WHERE 잔액 >= 200000 AND 잔액 <= 400000
    
    계좌번호잔액학생번호
    123434-555555300000201926-880215
    123434-444444400000201931-781109
    123434-777777300000201934-080621
    123434-333333400000201978-610408
  • 과목 코드가 ‘COM’으로 시작하는 과목의 과목코드, 과목명, 이수구분을 출력하시오.

    과목코드과목명학점선수과목이수구분교수번호
    COM11컴퓨터의이해3 교양
    COM12파이썬 프로그래밍 기초3 교양
    COM24자료구조3COM12전공필수
    COM31데이터베이스 시스템3COM24전공필수
    COM34알고리즘3COM24일반선택
    COM44클라우드 컴퓨팅3 전공필수
    ECE24놀이지도3 전공필수
    ECE31유아언어교육3ECE31전공필수
    HE14패션과문화3 일반선택
    HE25인체생리학3 전공필수
    HE31임상영양학3HE25전공필수
    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자료구조3COM12전공필수
    COM31데이터베이스 시스템3COM24전공필수
    COM34알고리즘3COM24일반선택
    COM44클라우드 컴퓨팅3 전공필수
    ECE24놀이지도3 전공필수
    1
    2
    3
    4
    5
    
      SELECT 교수번호
          FROM 과목 WHERE 과목명 = '컴퓨터의 이해'
      UNION
      SELECT 교수번호
          FROM 과목 WHERE 과목명 = '데이터베이스 시스템'
    
    교수번호
    192634-810228
    194834-760517
    • 두 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-4550120
    법학과사회과학대학02-3668-4590130
    생활과학과자연과학대학02-3668-4640125
    유아교육과교육대학대학02-3668-4670125
    컴퓨터과학과자연과학대학02-3668-4650130
    행정학과사회과학대학02-3668-4600120
    영어영문학과인문과학대학02-3668-4510135
    농학과자연과학대학02-3668-4600140
    1
    2
    3
    
      SELECT 학과이름, 졸업학점 / 8, 
          TRUNCATE(졸업학점/8, 0)
          FROM 학과
    
    학과이름졸업학점 / 8TRUNCATE(졸업학점/8, 0)
    국어국문학과15.015
    법학과16.2516
    생활과학과15.62515
    유아교육과15.62515
    컴퓨터과학과16.2516
    행정학과15.015
    영어영문학과16.87516
    농학과17.517

문자 함수

  • 문자열 조작 및 문자 형식 변환 등의 문자와 관련된 다양한 연산을 지원하는 함수

    종류사용 예의미
    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-1829010-0000-0002
    201834-021216유관순1902-12-16118010-0000-0001
    201926-880215지청천1988-02-1532010-0000-0005
    201931-781109안창호1978-11-0942010-0000-0004
    201934-080621박은식1959-09-3061010-0000-0007
    201934-790902안중근1979-09-0241010-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일 이내에 수강 신청된 수강 데이터의 학생번호, 과목코드, 신청시각을 출력하시오.

    과목코드학생번호신청시각
    COM11201934-7909022019-02-28 08:32:54
    COM11202026-5909302019-02-20 16:00:21
    COM11202078-0806212019-02-21 15:21:54
    COM12201831-3312152019-08-21 23:25:25
    COM12201931-7811092018-08-02 03:25:16
    COM12201978-6104082015-02-24 10:25:40
    COM12202026-5909302019-02-20 16:00:21
    COM12202031-8165152019-02-07 02:44:33
    1
    2
    3
    
      SELECT 학생번호, 과목코드, 신청시각
          FROM 수강
          WHERE TIMESTAMPDIFF(DAY, 신청시각, '2020-2-8-00:00:00') < 15
    
    학생번호과목코드신청시각
    202026-590930COM242020-02-17 22:15:34
    202034-596541COM242020-02-17 22:15:30
    201831-331215COM342020-02-20 13:54:22
    202026-590930COM342020-02-22 11:45:55
    202034-596541COM342020-02-22 11:45:55
    201926-880215COM442020-02-02 06:21:55
    202026-590930HE142020-02-21 22:51:43
    201934-790902HE252020-02-11 21:35:44

그룹 질의문

집계 함수

  • 특정 칼럼에 집계 함수를 통해 다양한 통계 연산을 수행할 수 있는 기능
  • SELECT 절 또는 HAVING절에 기술
  • 집계 함수의 종류
    • COUNT
      • 칼럼에 있는 값들의 개수
    • SUM
      • 칼럼에 있는 값들의 합
    • AVG
      • 칼럼에 있는 값들의 평균
    • MAX
      • 칼럼에서 가장 큰 값
    • MIN
      • 칼럼에서 가장 작은 값

집계 함수의 사용

  • 단과대학의 총 수를 출력하시오

    학과이름단과대학주소전화번호졸업학점
    국어국문학과인문과학대학02-3668-4550120
    법학과사회과학대학02-3668-4590130
    생활과학과자연과학대학02-3668-4640125
    유아교육과교육과학대학02-3668-4670125
    컴퓨터과학과자연과학대학02-3668-4650130
    행정학과사회과학대학02-3668-4600120
    영어영문학과인문과학대학02-3668-4510135
    자연과학대학자연과학대학02-3668-4600140
    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-3312152
    201834-0212161
    201926-8802151
    201931-7811091
    201934-7909021
    201978-6104082
    1
    2
    3
    4
    
      SELECT 학생번호, COUNT(*) AS 신청_전공수
      	FROM 강좌
      	GROUP BY 학생번호
      		HAVING 신청_전공수 >= 2
    
    학생번호신청_전공수
    201831-3312152
    201978-6104082
    202026-5909302
    1. 어떤 기준으로 GROUP BY 수행할 지
      • 학생 번호
    2. COUNT의 조건은 어떻게 명시할지
      • WHERE 절 아닌 HAVING



연습 문제


  1. 다음의 고객 테이블에서 아래의 SQL의 실행 결과로 올바른 것은?

    • 고객 테이블

      고객번호(PK)고객이름직장주소연락처
      C540홍길동서울시 종로구1234
      C101김영희서울시 종로구5678
      C211신채호광주시 광산구1111
      C343이희영부산시 북구2222
      C425박상진경기도 광주시3333
      C551나철대구시 달서구5555
      1
      2
      
        SELECT 고객이름, 직장주소 FROM 고객
        WHERE 직장주소 LIKE '%광주%'
      

    a.

    고객이름직장주소
    신채호광주시 광산구
    박상진경기도 광주시
    • LIKE 연산자는 관계형 DBMS을 위해 만들어진 특수 연산자로, 부분 일치하는 컬럼을 검색하는데 사용 됨
    • %광주%는 문자열 내부에 ‘광주’가 존재하는지 검사하는 표현이므로 ‘광주’가 어느 위치에 있어도 결과에 포함 됨
  2. 다음의 고객 테이블에서 아래의 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는 고객이름이 두 글자인 컬럼을 찾는 조건을 표현하므로 결과에 이름이 외자인 고객만 출력 됨
  3. 다음의 고객 테이블에서 아래의 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 절을 사용함



체크 포인트


  1. 다음 BETWEEN 연산의 의미와 동일한 것은?

    1
    2
    3
    
     SELECT * FROM 성적
         WHERE (점수 BETWEEN 90 AND 95)
         AND 학과 = '컴퓨터과학과'
    

    a. 점수 >= 90 AND 점수 <= 95

  2. 다음과 같은 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
    

[파이썬 프로그래밍 기초] 6강 - 선택 구조

[파이썬 프로그래밍 기초] 7강 - 반복 구조