프로그래밍/SQL_Oracle

01_OracleDB SQL : SESECT 기본문법 및 연산자

pupu91 2022. 7. 18. 18:46
반응형

 SESECT 기본문법 및 연산자

 SELECT 

조회하고자 하는 컬럼명을 기술, 쉼표로 구분하며 마지막 컬럼 다음은 쉼표 표시x

 

FROM 

조회 대상 컬럼이 포함된 테이블명 기술

 

 WHERE

행을 선택하는 조건 작성, 각각의 제한 조건은 논리 연산자로 연결, 제한 조건이 true일때만 Reaslt Set에 포함

 


 

 

  • SELECT 기본 작성법
SELECT
       컬럼명
     , 컬럼명
     , 컬럼명
 FROM 테이블명
WHERE 조건식;

 

                 

  • 모든 컬럼 조회 시 컬럼명 대신 * 기호 사용
SELECT
       *
  FROM EMPLOYEE;

 

 

  • 컬럼 별칭 짓기 
AS + 별칭

SELECT
       EMP_NAME AS 이름
     , SALARY * 12 "1년 급여(원)"
     , (SALARY + (SALARY * NVL(BONUS, 0))) * 12 AS "총 소득(원)" 
     컬럼 값에 대해 산술 연산한 결과를 조회할 수 있음
  FROM EMPLOYEE;

 

 

 

  • 임의로 지정한 문자열을 SELECT절에서 사용
SELECT
        EMP_ID
      , EMP_NAME
      , SALARY
      , '원'AS 단위
      문자 혹은 날짜 리터럴은 ''기호를 사용
  FROM  EMPLOYEE;

 

 

 

  • 중복 된 컬럼 값 제거
DISTINCT 키워드 사용, SELECT절에 한번만 사용 가능

SELECT
       DISTINCT JOB_CODE
  FROM EMPLOYEE;
  
  DISTINCT는 SELECT절에 한번만 사용 가능하기 때문에
  여러 개의 컬럼의 중복을 제외 시켜야 할 때는 묶어서 사용해야한다.
  
  SELECT
       DISTINCT JOB_CODE
                DEPT_CODE <- JOB_CODE와DEPT_CODE의 중복을 제외시켜라
     FROM EMPLOYEE;

 

반응형

연산자 

연결 연산자, 논리 연산자, 비교 연산자

 

 


 

1. 연결 연산자 (||) 

 

(1) 컬럼과 컬럼의 연결
 SELECT
        EMP_ID || EMP_NAME || SALARY
  FROM  EMPLOYEE; 
  
(2) 컬럼과 리터럴 연결
 SELECT
        EMP_NAME || '의 월급은' || SALARY || '원 입니다'
  FROM  EMPLOYEE;

 

 

 


2 . 논리 연산자

 

연산자 설명
AND 여러 조건이 동시에 TRUE일 경우메망 TRUE값 반환
OR 여러 조건들 중에 어느 하나의 조건만 TRUE이면 TRUE값 반환
NOT 조건에 대한 반대값으로 반환(NULL은 예외)

 

  • AND사용 예시
EMPLOYEE 테이블에서 급여를 350만원을 이상, 550만원 이하를 받는 직원의
사번, 이름, 부서코드, 직급코드를 조회하기

SELECT
        EMP_ID
      , EMP_NAME
      , DEPT_CODE
      , JOP_CODE
  FROM  EMPLOYEE
 WHERE SALARY >= 3500000
   AND SALARY <= 5500000;

 

 


3. 비교 연산자

 

연산자 설명
= 같다
>, < 크다 / 작다
>=, =< 크거나 같다 / 작거나 같다
!=, ^=, <> 같지 않다
BETWEEN AND 특정 범위에 포함되는지 비교
LIKE / NOT LIKE 문자 패턴 비교
IS NULL / IS NOT NULL NULL 여부 비교
IN / NOT IN 비교 값 목록에 포함 / 미포함 되는지 여부 비교

 

 

 

  • BETWEEN AND
컬럼명 BETWEEN 하한값 AND 상한값 : 하한값 이상, 상한값 이하의 값

 SELECT
        EMP_ID
      , EMP_NAME
      , DEPT_CODE
      , JOP_CODE
  FROM  EMPLOYEE
  WHERE SALARY BETWEEN 3500000 AND  5500000;
  

반대의 경우 NOT 사용
    SELECT
        EMP_ID
      , EMP_NAME
      , DEPT_CODE
      , JOP_CODE
  FROM  EMPLOYEE
  WHERE NOT SALARY BETWEEN 3500000 AND  5500000;
  WHERE  SALARY  NOT BETWEEN 3500000 AND  5500000;
 NOT 은 컬럼명 앞에 붙어도 되고  BETWEEN AND 연산자 앞쪽에 붙어도 됨

 

 

 

  • LIKE 연산자 : 문자 패턴이 일치하는 값을 조회 할 때 사용
표현법 문자 패턴
컬럼명 LIKE : '문자패턴' '글자%' (글자로 시작하는 값),
 '%글자%' (글자가 포한된 값)
  '%글자'(글자로 끝나는 값)

 

성이 김씨인 직원의 사번, 이름, 입사일 조회
SELECT
       EMP_ID
     , EMP_NAME
     , HIRE_DATE
 FROM EMPLOYEE
 WHERE EMP_NAME LIKE '김%';
 
 
 성이 김씨가 아닌 직원의 사번, 이름, 입사인 조회
 SELECT
       EMP_ID
     , EMP_NAME
     , HIRE_DATE
 FROM EMPLOYEE
 WHERE NOT EMP_NAME LIKE '김%';
 
 
 EMAIL ID 중 '_' 앞자리가 3자리인 직원 조회
 SELECT
        EMP_NAME
      , EMAIL
  FROM EMPLOYEE
 WHERE EMAIL LIKE '___%'

 

 

  • 와일드 카드 : _(글자 한자리), %(0개 이상의 글자)  / 조회 할 문자에 _가 포함 된 경우 _앞에 특수문자 사용            
전화번호 국번이 9로 시작하는 직원의 사번, 이름, 전화번호를 조회
SELECT
       EMP_ID
     , EMP_NAME
     , PHONE
  FROM EMPLOYEE
 WHERE PHONE LIKE '___9%'; 
 
 
 
이메일에서 _앞글자가 3자리인 이메일 주소를 가진 사원의 사번, 이름, 이메일 주소 조회
 SELECT
       EMP_ID
     , EMP_NAME
     , EMAIL
  FROM EMPLOYEE
 WHERE EMAIL LIKE '___^_%' ESCAPE'^';

 

 

 

  • IS NULL  연산자 
(1) NULL 아닌 값 조회 : IS NULL
SELECT
       EMP_10
     , EMP_NAME
     , SALARY
     , BONUS
  FROM EMPLOYEE
 WHERE BONUS IS NULL;
 
(2) NULL 아닌 값 조회 : IS NOT NULL
 SELECT
       EMP_10
     , EMP_NAME
     , SALARY
     , BONUS
  FROM EMPLOYEE
 WHERE BONUS IS NOT NULL;
 
 (3) NULL 값은 연산 불가
    NVL(컬럼명, 컬럼값이 NULL일때 바꿀 값) 사용
    EX) (SALARY + (SALARY * NVL(BONUS, 0))) * 12 
       -> 보너스 값이 NULL인 경우 0으로 반환하겠다

 

 

  • IN 연산자 : 비교하는 값 목록에 일치하는 값이 있는지 확인
  • OR도 가능하지만 비교할 목록이 많아지면 너무 길어져서 IN으로 한번에 작성 함.
부서코드가 'D6' 이거나 'D8'인 직원의 이름, 부서, 급여 조회
 SELECT
       EMP_NAME
     , DEPT_CODE
     , SALARY
  FROM EMPLOYEE
WHERE DEPT_CODE IN('D6','D8');


부서코드가 'D6' 이거나 'D8'인 직원을 제외한 나머지 직원의 이름, 부서, 급여 조회
 SELECT
       EMP_NAME
     , DEPT_CODE
     , SALARY
  FROM EMPLOYEE
WHERE DEPT_CODE NOT IN('D6','D8'); 



NULL값은 IN, NOT IN에서 취급되지 않으므로 별도로 처리해야 한다! null 포함
 SELECT
       EMP_NAME
     , DEPT_CODE
     , SALARY
  FROM EMPLOYEE
WHERE DEPT_CODE NOT IN('D6','D8')
   OR DEPT_CODE IS NULL;

 

 

4 . 연산자 우선순위

SELECT
       EMP_NAME
     , SALARY
     , JOB_CODE
  FROM EMPLOYEE   
WHERE JOB_CODE = 'J2'
   OR JOB_CODE = 'J7'
AND SALARY >= 2000000;
=> 연산자 우선순위에 의해 AND가 먼저 실행됨


SELECT
       EMP_NAME
     , SALARY
     , JOB_CODE
  FROM EMPLOYEE   
WHERE (JOB_CODE = 'J2'
   OR JOB_CODE = 'J7')
AND SALARY >= 2000000;
=> 우선순위를 고려하여 OR가 먼저 처리되도록 ()를 이용하여 우선순위 변경 하기
반응형