83. DML - SELECT - 1

alpaka·2024년 1월 27일
0

정보처리기사

목록 보기
87/161
post-thumbnail

일반 형식

SELECT [PREDICATE] [테이블명.]속성명 [AS 별칭][, [테이블명.]속성명, ...]
[그룹함수(속성명) [AS 별칭]]
[, Window함수 OVER (PARTITION BY 속성명1, 속성명2, ...
             ORDER BY 속성명3, 속성명4, ...)]
FROM 테이블명[, 테이블명, ...]
[WHERE 조건]
[GROUP BY 속성명, 속성명, ...]
[HAVING 조건]
[ORDER BY 성명 [ASC | DESC]];
  • SELECT절
    • PREDICATE: 불러올 튜플 수를 제한할 명령어를 기술한다.
      ▶ ALL: 모든 튜플을 검색할 때 지정하는 것으로, 주로 생략한다.
      ▶ DISTINCT: 중복된 튜플이 있으면 그 중 첫 번째 한 개만 검색한다.
      ▶ DISTINCTROW: 중복된 튜플을 제거하고 한 개만 검색하지만 선택된 속성의 값이 아닌, 튜플 전체를 대상으로 한다.
    • 속성명: 검색하여 불러올 속성(열) 또는 속성을 이용한 수식을 지정한다.
      ▶ 기본 테이블을 구성하는 모든 속성을 지정할 때는 '*'를 기술한다.
      ▶ 두 개 이상의 테이블을 대상으로 검색할 때는 '테이블명.속성명'으로 표현 한다.
  • AS: 속성 및 연산의 이름을 다른 제목으로 표시하기 위해 사용된다.
  • FROM절: 질의에 의해 검색될 데이터들을 포함하는 테이블명을 기술한다.
  • WHERE절: 검색할 조건을 기술한다.
  • ORDER BY절: 특정 속성을 기준으로 정렬하여 검색할 때 사용한다.
    • 속성명: 정렬의 기준이 되는 속성명을 기술한다.
    • [ASC | DESC]: 정렬 방식으로서 'ASC'는 오름차순, 'DESC'는 내림차순이다. 생략하면 오름차순으로 지정된다.

조건 연산자 / 연산자 우선순위

  • 조건 연산자
    • 비교 연산자

    연산자의미
    =같다
    <>같지 않다
    >크다
    <작다
    >=크거나 같다
    <=작거나 같다
    • 논리 연산자: NOT, AND, OR
    • LUKE 연산자: 대표 문자를 이용해 지정된 속성의 값이 문자 패턴과 일치하는 튜플을 검색하기 위해 사용됩니다.

      대표 문자의미
      %모든 문자를 대표함
      _문자 하나를 대표함
      #숫자 하나를 대표함
    • 연산자 우선순위

    종류연산자우선순위
    산술 연산자x,/,+,-왼쪽에서 오른쪽으로 갈수록 낮아집니다.
    관계 연산자=,<>,>,>=,<,<=모두 같습니다.
    논리 연산자NOT, AND, OR왼쪽에서 오른쪽으로 갈수록 낮아집니다.
    ※ 산술, 관계, 논리 연산자가 함께 사용되었을 때는 산술 > 관계 > 논리 연산자 순서로 연산자 우선순위가 정해집니다.
  • 다음과 같은 기본 테이블에 대해 다음 예제의 결과를 확인하시오.

<사원>

이름부서생일주소기본급
홍길동기획04/05/61망원동120
임꺽정인터넷01/09/69서교동80
황진이편집07/21/75합정동100
김선달편집10/22/73망원동90
성춘향기획02/20/64대흥동100
장길산편집03/11/67상암동120
일지매기획04/29/78연남동110
강건달인터넷12/11/8090

<여가활동>

이름취미경력
김선달당구10
성춘향나이트댄스5
일지매태껸15
임꺽정씨름8

기본 검색

  • SELECT 절에 원하는 속성을 지정하여 검색한다.
  • 예제 1: <사원> 테이블의 모든 튜플을 검색하시오.
• SELECT * FROM 사원;
• SELECT 사원.* FROM 사원;
• SELECT 이름, 부서, 생일, 주소, 기본급 FROM 사원;
• SELECT 사원.이름 사원.부서 사원.생일 사원.주소 사원.기본급 FROM 사원;
※ 위의 SQL은 모두 보기에 주어진 <사원> 테이블 전체를 그대로 출력한다.

<결과>

이름부서생일주소기본급
홍길동기획04/05/61망원동120
임꺽정인터넷01/09/69서교동80
황진이편집07/21/75합정동100
김선달편집10/22/73망원동90
성춘향기획02/20/64대흥동100
장길산편집03/11/67상암동120
일지매기획04/29/78연남동110
강건달인터넷12/11/8090
  • 예제 2: <사원> 테이블에서 주소만 검색하되 같은 '주소'는 한 번만 출력하시오.
SELECT DISTINCT 주소
FROM 사원;

<결과>

주소
대흥동
망원동
상암동
서교동
연남동
합정동
  • 예제 3: <사원> 테이블에서 '기본급'에 특별수당 10을 더한 월급을 "XX부서의 XXX의 월급 XXX" 형태로 출력하시오.
SELECT 부서 + '부서의' AS 부서2.이름 +'의 월급' AS 이름2.기본급 + 10 AS 기본급2
FROM 사원;

<결과>

부서2이름2기본급2
기획부서의홍길동의 월급130
인터넷부서의임꺽정의 월급90
편집부서의황진이의 월급110
편집부서의김선달의 월급100
기획부서의성춘향의 월급110
편집부서의장길산의 월급130
기획부서의일지매의 월급120
인터넷부서의강건달의 월급100

조건 지정 검색

  • WHERE절에 조건을 지정하여 조건에 만족하는 튜플만 검색한다.
  • 예제 1: <사원> 테이블에서 '기획'부의 모든 튜플을 검색하시오.
SELECT *
FROM 사원
WHERE 부서 = '기획';

<결과>

이름부서생일주소기본급
홍길동기획04/05/61망원동120
성춘향기획02/20/64대흥동100
일지매기획04/29/78연남동110
  • 예제 2: <사원> 테이블에서 "기획" 부서에 근무하면서 "대흥동"에 사는 사람의 튜플을 검색하시오.
    SELECT *
    FROM 사원
    WHERE 부서 = '기획' AND 주소 = '대흥동';

    <결과>

    이름부서생일주소기본급
    성춘향기획02/20/64대흥동100
  • 예제 3: <사원> 테이블에서 부서가 "기획"이거나 "인터넷"인 튜플을 검색하시오.
SELECT *
FROM 사원
WHERE 부서 = '기획' OR 부서 = '인터넷';

<결과>

이름부서생일주소기본급
홍길동기획04/05/61망원동120
임꺽정인터넷01/09/69서교동80
성춘향기획02/20/64대흥동100
일지매기획04/29/78연남동110
강건달인터넷12/11/8090
  • 예제 4: <사원> 테이블에서 성이 '김'인 사람의 튜플을 검색하시오.
SELECT *
FROM 사원
WHERE 이름 LIKE '김%';

<결과>

이름부서생일주소기본급
김선달편집10/22/73망원동90
  • 예제 5: <사원> 테이블에서 '생일'이 '01/01/69'에서 '12/31/73' 사이인 튜플을 검색하시오.
SELECT *
FROM 사원
WHERE 생일 BETWEEN #01/01/69# AND #12/31/73#;

<결과>

이름부서생일주소기본급
임꺽정인터넷01/09/69서교동80
김선달편집10/22/73망원동90
  • 예제 6: <사원> 테이블에서 '주소'가 NULL인 튜플을 검색하시오.
SELECT *
FROM 사원
WHERE 주소 IS NULL;

<결과>

이름부서생일주소기본급
강건달인터넷12/11/8090

정렬 검색

  • ORDER BY 절에 특정 속성을 지정하여 지정된 속성으로 자료를 정렬하여 검색한다.
  • 예제 1: <사원> 테이블에서 '주소'를 기준으로 내림차순 정렬시켜 상위 2개 튜플만 검색하시오.
SELECT TOP 2 *
FROM 사원
ORDER BY 주소 DESC;

<결과>

이름부서생일주소기본급
황진이편집07/21/75합정동100
일지매기획04/29/78연남동110
  • 예제 2: <사원> 테이블에서 '부서'를 기준으로 오름차순 정렬하고, 같은 '부서'에 대해서는 '이름'을 기준으로 내림차순 정렬시켜서 검색하시오.
SELECT *
FROM 사원
ORDER BY 부서 ASC, 이름 DESC;

<결과>

이름부서생일주소기본급
홍길동기획04/05/61망원동120
일지매기획04/29/78연남동110
성춘향기획02/20/64대흥동100
임꺽정인터넷01/09/69서교동80
강건달인터넷12/11/8090
황진이편집07/21/75합정동100
장길산편집03/11/67상암동120
김선달편집10/22/73망원동90

하위 질의

  • 하위 질의는 조건절에 주어진 질의를 먼저 수행하여 그 검색 결과를 조건절의 피연산자로 사용한다.
  • 예제 1: '취미'가 "나이트댄스"인 사원의 '이름'과 '주소'를 검색하시오.
SELECT 이름, 주소
FROM 사원
WHERE 이름 = (SELECT 이름 FROM 여가활동 WHERE 취미 = '나이트댄스'):

<결과>

이름주소
성춘향대흥동
  • 예제 2: 취미활동을 하지 않는 사원들을 검색하시오.
SELECT *
FROM 사원
WHERE 이름 NOT IN (SELECT 이름 FROM 여가활동);

<결과>

이름부서생일주소기본급
홍길동기획04/05/61망원동120
황진이편집07/21/75합정동100
장길산편집03/11/67상암동120
강건달인터넷12/11/8090
  • 예제 3: 취미활동을 하는 사원들의 부서를 검색하시오.
SELECT 부서
FROM 사원
WHERE EXISTS (SELECT 이름 FROM 여가활동 WHERE 여가활동.이름 = 사원.이름);

<결과>

부서
인터넷
편집
기획
기획

복수 테이블 검색

  • 여러 테이블을 대상으로 검색을 수행한다.
  • 예제: '경력'이 10년 이상인 사원의 '이름', '부서', '취미', '경력'을 검색하시오.
SELECT 사원.이름, 사원.부서 여가활동.취미, 여가활동.경력
FROM 사원, 여가활동
WHERE 여가활동.경력 >= 10 AND 사원.이름 = 여가활동.이름;

<결과>

이름부서취미경력
김선달편집당구10
일지매기획태껸15
profile
alpaka의 자격증 공부장

0개의 댓글

관련 채용 정보