[SQLD] 2과목 SQL 기본 및 활용 - WHERE절

박진우·2022년 5월 30일
0

SQLD

목록 보기
9/21
post-thumbnail

💡 WHERE 절

WHERE절 개요..

사용자들은 자신이 원하는 자료만을 검색하기 위해서 SQL 문장에 WHERE 절을 이용한다.

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

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

SELECT PLAYER_NAME FROM PLAYER WHERE TEAM_ID = ‘K02'; —>(비교 연산자)

SELECT PLAYER_NAME, POSITION, BACK_NO, HEIGHT FROM PLAYER WHERE HEIGHT >= 170;


◽ 연산자의 종류



◽ 연산자의 우선순위

  • 괄호로 묶은 연산이 제일 먼저 연산 처리된다.
  • 처리 순서: 부정 연산자 ➡ 비교 연산자 ➡ 논리 연산자


◽ 비교연산자

▪ 비교 연산자의 종류

❗ 주의해야 할 점

'=' 연산자를 사용할 때 CHAR 변수나 VARCHAR2와 같은 문자형 타입을 가진 칼럼을 특정 값과 비교하기 위해서는 인용부호(작은 따옴표, 큰 따옴표)로 묶어서 비교 처리를 해야 한다.


▪ 문자 유형 비교 방법

❗ 주의해야 할 점

문자 유형 칼럼의 경우 따옴표 표시가 없는 경우 에러가 발생할 수 있지만, 숫자 유형 칼럼의 경우 숫자로 변환이 가능한 문자열과 비교되면 상대 타입을 숫자 타입으로 바꾸어 비교해버린다.


▪ SQL 연산자

  • SQL >>

    SELECT ENAME, JOB, DEPTNO FROM EMP WHERE (JOB, DEPTNO) IN (('MANAGER',20),('CLERK',30));
    

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

    SELECT PLAYER_NAME, POSITION, BACK_NO, HEIGHT FROM PLAYER WHERE POSITION LIKE 'MF'; 
    
    SELECT PLAYER_NAME, POSITION, BACK_NO, HEIGHT FROM PLAYER 
    
    WHERE PLAYER_NAME LIKE ‘장%';
    

    “장”씨 성을 가진 선수들의 정보를 조회하는 WHERE 절


▪ 와일드 카드의 종류

“BETWEEN a AND b” -> “a 이상 b 이하” 
  
 SELECT PLAYER_NAME, POSITION, BACK_NO, HEIGHT FROM PLAYER 
  
 WHERE HEIGHT BETWEEN 170 AND 180;
  

키가 170 센티미터 이상 180센티미터 이하인 선수들의 정보 출력.


◽ IS NULL / IS NOT NULL

  • NULL(ASCII 00)은 값이 존재하지 않는 것으로 확정되지 않은 값을 표현할 때 사용한다.
    따라서 어떤 값보다 크거나 작지도 않고 ‘ ’(공백, ASCII 32)이나 0(Zero, ASCII 48)과 달리 비교 자체가 불가능한 값인 것이다.

  • 어떤 값과 비교할 수도 없으며, 특정 값보다 크다, 적다라고 표현할 수 없다.

  • NULL 값과의 수치연산은 NULL 값을 리턴한다.

  • NULL 값과의 비교연산은 거짓(FALSE)을 리턴한다.

  • SQL>>
    SELECT PLAYER_NAME 선수이름, POSITION 포지션, TEAM_ID FROM PLAYER WHERE POSITION IS NULL; 

포지션 테이블에서 포지션이 NULL값을 갖는 선수이름, 포지션, 팀ID를 출력



◽ 논리연산자

논리연산자는 비교연산자나 SQL 비교 연산자들로 이루어진 여러 개의 조건들을 논리적으로 연결시키기 위해서 사용되는 연산자라고 생각하면 된다.

  • SQL >>

    SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 FROM PLAYER 
    
    WHERE TEAM_ID = 'K02' AND HEIGHT >= 170;
    

    소속이 삼성블루윙즈(K02)이고 키가 170 센티미터 이상인 조건을 가진 선수들의 자료를 조회

    SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 FROM PLAYER 
    
    WHERE TEAM_ID IN ('K02','K07') AND POSITION = 'MF';
    

    소속이 삼성블루윙즈(K02)이거나 전남드래곤즈(K07)인 선수들 중에서 포지션이 MF인 선수들 자료를 조회

SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 FROM PLAYER 
  
 WHERE (TEAM_ID = 'K02' OR TEAM_ID = 'K07') AND POSITION = 'MF' 
  
 AND HEIGHT >= 170 AND HEIGHT <= 180; 

소속팀이 삼성블루윙즈(K02)이거나 전남드래곤즈(K07)에 소속된 선수들이어야 하고, 포지션이 미드필더(MF)이며 키는 170 센티미터 이상이고 180 이하인 선수들 자료를 조회


◽ 부정 연산자

  • SQL >>

    SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 FROM PLAYER 
    
    WHERE TEAM_ID = 'K02' AND POSITION <> 'MF' AND HEIGHT NOT BETWEEN 175 AND 185;
    

    삼성블루윙즈(K02) 소속인 선수들 중에서 포지션이 미드필더(MF)가 아니고, 키가 175 센티미터 이상 185 센티미터 이하가 아닌 선수들의 자료 조회



◽ ROWNUM | TOP

ROWNUM (Oracle)

칼럼과 비슷한 성격의 Pseudo Column으로써 SQL 처리 결과 집합의 각 행에 임시로 부여되는 번호, 조건절 내에서 행의 개수를 제한하는 목적으로 사용한다.

❓ Pseudo Column : 오라클에서 내부적으로 사용되는 컬럼을 pseudo column이라고 하며, ROWID, ROWNUM등이 있다.

  • Oracle SQL>>

    UPDATE MY_TABLE SET COLUMN1 = ROWNUM;
    

    MY_TABLE 이라는 테이블의 첫번 째 칼럼을 ‘고유한 키’값 혹은 ‘인덱스 값’으로 설정하라!
    ➡ 새롭게 넘버링 칼럼을 설정하고, 그 값을 기 테이블의 ‘고유한 키’값 혹은 ‘인덱스 값’으로 설정

    SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM <= 3;

    PLAYER 테이블에서 PLAYER_NAME 번호가 3 이하인 선수 이름을 출력하라



    TOP (SQL Server)

    TOP 절을 사용하여 결과 집합으로 출력되는 행의 수를 제한할 수 있다.

  • SQL >>

    TOP (Expression) [PERCENT] [WITH TIES];
    
  • ORDER BY절이 없으면 ROWNUM과 TOP의 기능이 같음
    Expression: 반환할 행의 수를 지정하는 숫자이다.

  • PERCENT: 쿼리 결과 집합에서 처음 Expression%의 행만 반환됨을 나타낸다.

  • WITH TIES : ORDER BY 절이 지정된 경우에만 사용할 수 있으며,
    TOP N(PERCENT)의 마지막 행과 같은 값이 있는 경우 추가 행이 출력되도록 지정할 수 있다.


SELECT TOP(5) PLAYER_NAME FROM PLAYER;
    

PLAYER 테이블에서 1~5행까지의 PLAYER_NAME 을 출력

  • SQL 문장에서 ORDER BY 절이 사용되지 않으면
    Oracle의 ROWNUM과 SQL Server의 TOP 절은 같은 기능을 하지만,
    ORDER BY 절이 같이 사용되면 기능의 차이가 발생한다

0개의 댓글