혼자 공부하는 공간

[SQL기본 및 활용] 2020년 SQLD 내용 정리 :: SQL 기본 #5 본문

자격증/SQLD

[SQL기본 및 활용] 2020년 SQLD 내용 정리 :: SQL 기본 #5

god_z 2020. 8. 20. 17:55

<목차>


<< WHERE 절 >>

* SELECT - FROM 을 통해 테이블의 전체 데이터를 조회한다.

* 전체 데이터 중에서 필요한 데이터만을 검색하기 위해 WHERE 절을 사용해 데이터에 조건을 부여할 수 있다.

* WHERE 조건을 사용하지 않고 필요없는 많은 데이터를 요청하는 SQL 문은 대량의 데이터를 검색하므로 서버의 CPU, MEMORY와 같은 시스템 자원(Resource)들을 과다하게 사용한다.

* 기본 Format

SELECT [DISTINCT/ALL] 칼럼명 [ALIAS명]
FROM 테이블명
WHERE 조건;

1. 연산자의 종류

  1. 연산자의 종류
    연산자의 종류
  2. 연산자의 우선 순위
    연산자의 우선 순위

 

 

2. 비교 연산자

    1. 비교연산자의 종류

      비교 연산자의 종류
    2. 예시 - 문제
      * 키가 170인 선수의 이름, 포지션, 키를 출력하라.

    3. 예시 - 결과

      1
      2
      3
      SELECT PLAYER_NAME 선수이름, POSITION 포지션, HEIGHT 키 
      FROM PLAYER 
      WHERE HEIGHT >= 170;
      cs
    4. 문자 유형 비교 방법

      문자 유형 비교 방법

       

3. SQL 연산자

* SQL 문장에서 사용하도록 기본적으로 예약되어 있는 연산자.

* 모든 데이터 타입에 대해서 연산이 가능한 4가지 종류의 연산자 존재.

SQL 연산자의 종류

  1. 예시 - 문제(IN)

    * 소속팀 코드가 K02, K07인 선수의 이름, 포지션, 백넘버, 키를 출력하라.

  2. 예시 - 결과(IN)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 
    FROM PLAYER 
    WHERE TEAM_ID IN ('K02','K07');
     
    /*
    선수이름 포지션 백넘버 키 
    ------- ----- ------ ---- 
    데니스   FW    11     176 
    서정원   FW    14     173 
    손대호   DF    17     186 
    오규찬   MF    24     178 
    윤원일   MF    45     176 
    김동욱   MF    40     176 
    김회택   DF 
    서현옥   DF 
    정상호   DF 
    최철우   DF 
    정영광   GK    41     185 
    :      :     :     : 
    100개의 행이 선택되었다.
    */
    cs
  3. 예시 - 문제2(IN)

    * 사원 테이블에서 JOB이 MANAGER이면서 20번 부서에 속하거나, JOB이 CLERK이면서 30번 부서에 속하는 사원의 정보를 IN 연산자의 다중 리스트를 이용해 출력하라.

  4. 예시 - 결과2(IN)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT ENAME, JOB, DEPTNO 
    FROM EMP 
    WHERE (JOB, DEPTNO) IN (('MANAGER',20),('CLERK',30));
     
    /*
    ENAME   JOB     DEPTNO 
    ------ -------- ------ 
    JONES   MANAGER 20 
    JAMES   CLERK   30 
    2개의 행이 선택되었다. 
    */
    cs

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT ENAME, JOB, DEPTNO 
    FROM EMP 
    WHERE JOB IN ('MANAGER','CLERK') AND DEPTNO IN (20,30);
     
    /*
    ENAME   JOB     DEPTNO 
    ------ -------- ------ 
    SMITH  CLERK    20 
    JONES  MANAGER  20 
    BLAKE  MANAGER  30 
    ADAMS  CLERK    20 
    JAMES  CLERK    30 
    5개의 행이 선택되었다.
    */
    cs

    * 아래의 결과는 MANAGER인데도 30에 속하는, CLERK 인데도 20에 속하는 데이터가 같이 출력되었다.

    * 다중 리스트를 이용한 IN 연산자는 SQL문을 간단하게 만들어 주면서도 성능 측면에서도 장점을 가질 수 있지만, 문제를 잘 파악하여 사용해야한다.

  5. 예시 - 문제(LIKE)

    * "장"씨 성을 가진 선수들의 정보를 출력하라.

  6. 예시 - 결과(LIKE)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 
    FROM PLAYER 
    WHERE PLAYER_NAME LIKE '장%';
     
    /*
    선수이름 포지션 백넘버 키 
    ------- ------ ----  --- 
    장성철   MF     27    176 
    장윤정   DF     17    173 
    장서연   FW     7     180 
    장재우   FW     12    172 
    장대일   DF     7     184 
    장기봉   FW     12    180 
    장철우   DF     7     172 
    장형석   DF     36    181 
    장경진   DF     34    184 
    장성욱   MF     19    174 
    장철민   MF     24    179 
    장경호   MF     39    174 
    장동현   FW     39    178 
    13개의 행이 선택되었다.
    */
    cs
    와일드 카드의 종류
  7. 예시 - 문제(IS NULL)

    * NULL은 값이 존재하지 않는 것으로 비교 자체가 불가능한 값.

    * NULL 값과의 수치연산은 NULL 값을 반환, 비교연산은 항상 False를 반환. 즉, 어떤 값과 비교할 수도, 크거나 작다고 표현할 수 없음.

    * NULL 값과의 비교연산은 IS NULL, IS NOT NULL 을 통해서만 결과를 얻을 수 있다.

    * 포지션이 NULL 값인 선수들을 출력하라.

  8. 예시 - 결과(IS NULL)

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 
    FROM PLAYER 
    WHERE POSITION = NULL
    /* 선택된 레코드가 없다. */
     
     
    SELECT PLAYER_NAME 선수이름, POSITION 포지션, TEAM_ID 
    FROM PLAYER 
    WHERE POSITION IS NULL;
    /*
    선수이름 포지션 TEAM_ID
    ------- ------ ------- 
    정학범          K08 
    안익수          K08 
    차상광          K08
    3개의 행이 선택되었다.
    */
    cs

     

 

4. 논리 연산자

* 비교 연산자, SQL 연산자들로 이루어진 여러 조건들을 논리적으로 연결시키기 위해 사용하는 연산자.

* 종류

논리 연산자의 종류

  1. 예시 - 문제 (AND)

    * 소속이 K02이고 키가 170cm 이상인 선수들의 데이터를 출력하라.

  2. 예시 - 결과 (AND)

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 
    FROM PLAYER 
    WHERE TEAM_ID = 'K02' AND HEIGHT >= 170;
    /*
    선수이름 포지션 백넘버 키 
    ------- ------ ----  --- 
    김반코비 MF     47    185 
    김선우   FW     33    174 
    김여성   MF     36    179 
    김용우   FW     27    175 
    김종민   MF     30    174 
    박용훈   MF     9     175 
    김만근   FW     34    177 
    김재민   MF     35    180 
    김현두   MF     12    176 
    이성용   DF     20    173 
    하태근   MF     29    182 
    :      :      :    : 
    45개의 행이 선택되었다
    */
    cs

     

  3. 예시 - 문제 (OR)

    * 소속팀이 K02이거나 K07이고, 포지션이 MF이고, 키는 170cm 이상, 180cm이하인 선수들의 정보를 출력하라.

  4. 예시 - 결과 (OR)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
    FROM PLAYER 
    WHERE (TEAM_ID = 'K02' OR TEAM_ID = 'K07')
    /* TEAM_ID IN ('K02', 'K07') 과 동일. */
    AND POSITION = 'MF'
    HEIGHT >= 170 AND HEIGHT <= 180;
    /* HEIGHT BETWEEN 170 AND 180 과 . */
    /*
    선수이름 포지션 백넘버 키 
    ------- ------ ----  --- 
    가비     MF    10    177 
    강대희   MF    26    174 
    고종수   MF    22    176 
    고창현   MF    8     170 
    정기범   MF    28    173 
    정동현   MF    25    175 
    정두현   MF    4     175 
    정준     MF    44    170 
    오규찬   MF    24    178 
    윤원일   MF    45    176 
    김동욱   MF    40    176 
    :::: 33개의 행이 선택되었다.
    */
    c

 

5. 부정 연산자

* 종류

부정 연산자의 종류

  1. 예시 - 문제

    * 소속이 K02 이고, 포지션이 MF가 아니고, 키가 175cm 이상 185cm 이하가 아닌 선수들의 정보를 출력하라.

  2. 예시 - 결과

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 
    FROM PLAYER 
    WHERE TEAM_ID = 'K02' 
    AND NOT POSITION = 'MF'
    AND NOT HEIGHT BETWEEN 175 AND 185;
    /*
    선수이름 포지션 백넘버 키 
    ------- ------ ----- --- 
    서정원   FW    14     173 
    손대호   DF    17     186 
    김선우   FW    33     174 
    이성용   DF    20     173 
    미트로   FW    19     192 
    최호진   GK    31     190 
    정유진   DF    37     188 
    손승준   DF    32     186 
    8개의 행이 선택되었다.
    */
    cs
  3. 예시 - 문제2

    * 국적 칼럼이 NULL이 아닌 선수와 국적을 출력하라. (내국인들은 국적이 NULL 값이다.)

  4. 예시 - 결과2

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    SELECT PLAYER_NAME 선수이름, NATION 국적 
    FROM PLAYER 
    WHERE NATION IS NOT NULL;
    /*
    선수이름 국적 
    ------- ------ 
    가비     루마니아 
    데니스   러시아 
    우르모브 유고 
    이고르   브라질 
    디디     브라질 
    하리     콜롬비아 
    빅토르   나이지리아 
    콜리     세네갈 
    김징요   브라질 
    미트로   보스니아 
    산드로   브라질 
    안드레   브라질 
    뚜따     브라질 
    마르코   브라질  
    ..      ..
    27개의 행이 선택되었다.
    */
    cs

 

6. ROWNUM, TOP 사용

  1. ROWNUM (Oracle)

    * Oracle의 ROWNUM은 칼럼과 비슷한 성격의 Pseudo Column으로써 SQL 처리 결과 집합의 각 행에 대해 임시로 부여되는 일련번호.

    * 테이블이나 집합에서 원하는 만큼의 행만 가져오고 싶을 때 WHERE 절에서 행의 개수를 제한하는 목적으로 사용됨.

    * Ex. 한 건의 결과 행만 출력하고 싶을 때,

      SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM = 1;

    * Ex. 2이상의 N개의 행을 출력하고 싶을 때,

      SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM <= N; (ROWNUM = N은 사용 불가)

    * 테이블 내 고유한 키, 인덱스 값을 만들 수 있음.

  2. TOP (SQL Server)

    * 결과 집합으로 출력되는 행의 수를 제한하기 위해 사용.

    * Ex. 한 건의 결과 행만 출력하고 싶을 때,

      SELECT TOP(1) PLAYER_NAME FROM PLAYER;

    * Ex. 2이상의 N개의 행을 출력하고 싶을 때,

      SELECT TOP(N) PLAYER_NAME FROM PLAYER;

    * 표현식

    TOP (Expression) [PERCENT] [WITH TIES]

    - Expression : 반환할 행의 수 지정

    - PERCENT : 쿼리 결과 집합에서 처음 Expression%의 행만 반환

    - WITH TIES : ORDER BY 절과 함께 사용.

    * SQL 문장에서 ORDER BY 절이 사용되지 않으면 Oracle의 ROWNUM, SQL Server의 TOP 절은 같은 기능을 하지만, ORDER BY 절과 함께 사용되면 서로 기능이 달라짐.

 

출처

http://www.dbguide.net/db.db?cmd=view&boardUid=148193&boardConfigUid=9&categoryUid=216&boardIdx=134&boardStep=1

 

데이터 전문가 지식포털 DBGuide.net

관계형 데이터베이스 개요 DDL DML TCL WHERE 절 함수(FUNCTION) GROUP BY, HAVING 절 ORDER BY 절 조인(JOIN) 1. WHERE 조건절 개요 자료를 검색할 때 SELECT 절과 FROM 절만을 사용하여 기본적인 SQL 문장을 구성한다면

www.dbguide.net

질문은 댓글로 남겨주시면 되겠습니다. 감사합니다.

Comments