오라클 간단한 SQL

최주영·2023년 3월 30일
0

오라클

목록 보기
3/22

모든 유저 보기
전 시간에 작성하지 못했던 부분이 있었다.
관리자 모드에서 존재하는 모든 계정들을 확인할 수 있는 방법이 있다.

// 다음과 같이 관리자모드에서 실행시 모든 사용자들을 확인할 수 있다.
// DB에 등록되어 있는 사용자 조회하기
SELECT * FROM DBA_USERS;

// 계정에서 이용하고 있는 테이블을 조회하는 명령어
SELECT* FROM TAB;

✅ SELECT

  • 조회하고자 하는 컬럼명 기술

✅ FROM

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

✅ WHERE

  • 행을 선택하는 조건 기술

💡 (위 3가지) 문법

SELECT 컬럼 명 [, 컬럼명, …]
FROM 테이블 명
[WHERE 조건식];

  • 예시
// SELECT문을 이용해서 EMPLOYEE 테이블 조회하기
// 조회할 테이블 대상은 EMPLOYEE 이며,출력할 컬럼은 EMP_NAME, EMP_NO,EMAIL,PHONE
SELECT EMP_NAME, EMP_NO,EMAIL,PHONE FROM EMPLOYEE;

// SELECT문을 이용해서 전체 컬럼 조회하기
//  * 은 ALL이라는 의미임
SELECT * FROM EMPLOYEE;

// SELECT문을 이용해서 산술연산처리하기
// 출력할 컬럼은 10+20, 10-20, 20/3, 5*4 의 이름으로 출력된다. (가상컬럼)
SELECT 10+20,10-20,20/3,5*4 FROM DUAL;   // DUAL -> 오라클에서 제공하는 샘플 테이블임

// 리터럴 + 컬럼 연산
// 전체 사원의 급여에 100원씩 더하기
SELECT EMP_NAME, SALARY+100, SALARY FROM EMPLOYEE;

// 산술연산은 오로지 숫자형만 가능하다
// 오라클에서 문자열 리터럴은 ' '을 사용한다.
SELECT '이제 점심먹자'+100 FROM DUAL; ->(문자열과 숫자는 연산 불가능함)

✅ AS

  • 조회된 컬럼에 별칭을 부여 (가상 컬럼에서 많이 사용됨)
  • AS를 생략해도 되지만 사용하는 것이 가독성에 좋음
  • 별칭에다 띄어쓰기 및 특수문자는 앞에다 " " 붙이면 가능함

  • 예시
SELECT EMP_NAME AS 사원명, SALARY AS 월급, EMAIL AS 이메일 FROM EMPLOYEE;

SELECT EMP_NAME 사원명, SALARY 월급, EMAIL 이메일 FROM EMPLOYEE; // AS 생략

SELECT EMP_NAME AS "사 원 명", SALARY AS "$월$급"  FROM EMPLOYEE; // AS 뒤에 띄어쓰기 및 특수문자 사용

✅ DISTINCT

  • 조회되는 데이터의 중복을 제거해주는 명령어
  • 컬럼명 앞에 사용, SELECT 문의 맨 앞에 작성
  • SELECT DISTINCT 컬럼명[,컬럼명...] FROM 테이블명
SELECT DISTINCT DEPT_CODE FROM EMPLOYEE; // DEPT_CODE 컬럼 이 중복된 것 제거

SELECT DISTINCT DEPT_CODE, JOB_CODE FROM EMPLOYEE;  
// DEPT_CODE 컬럼과 JOB_CODE컬럼이 동시에 중복되는 것 제거
// 밑에 예시 사진을 보자


✅ | |

  • 오라클에서 문자열을 연결해주는 연산자
  • 컬럼을 합쳐서 출력할 때도 사용
// 컬럼이 EMP_NAME | | SALARY | | BONUS  (하나로) 나온다
SELECT EMP_NAME | | SALARY | | BONUS  FROM EMPLOYEE; 

// 컬럼이 EMP_NAME | | '님의 월급은 ' | | SALARY | | ' 보너스 : ' || BONUS (하나로) 나온다
SELECT EMP_NAME | | '님의 월급은 ' | | SALARY | | ' 보너스 : ' || BONUS FROM EMPLOYEE;

//위 각각 의 값들도 붙여서 나온다

✅ WHERE

  • 지정한 조건에 맞는 데이터만 가져오기
  • SELECT 컬럼, 컬럼..... OR * FROM 테이블명 WHERE 조건식
  • 주로 비교연산자, 논리연산자가 사용된다
SELECT EMP_NAME, DEPT_CODE FROM EMPLOYEE WHERE DEPT_CODE='D5'; // DEPT_CODE가 D5인 것 조회

SELECT * FROM EMPLOYEE WHERE SALARY >= 2000000; // 월급이 200만원 이상인 사원을 조회하기

// != 대신 <>를 써도됨
SELECT * FROM EMPLOYEE WHERE JOB_CODE != 'J2';  // 사원 중 직책이 J2가 아닌 사원 조회

// 여러개의 비교연산 처리하기
// 사원중 부서가 D5이고 월급이 300만원 이상인 사원의 이름, 부서코드, 월급 조회
// ~이고 -> AND   ~거나 -> OR
SELECT EMP_NAME, DEPT_CODE, SALARY  FROM EMPLOYEE WHERE DEPT_CODE = 'D5' AND SALARY >= 3000000;

// 결과값이 거짓이고, 출력되는 개수가 없어도 오류가 따로 없음
SELECT * FROM EMPLOYEE WHERE 1=2;

✅ BETWEEN AND

  • 두 값의 범위에 해당하는 데이터만 출력할 때 사용하는 확장 연산자
  • 비교하려는 값이 지정한 범위에 포함되면 TRUE를 리턴하는 연산자
// 날짜 대소비교 
// 기본적인 날짜를 표시하는 문자열 패턴 : YY/MM/DD -> 'YY/MM/DD'
// 입사일이 2000년 01월 0일 이전의 사원의 이름, 입사일을 조회
SELECT EMP_NAME, HIRE_DATE FROM EMPLOYEE WHERE HIRE_DATE<'00/01/01';

// 사원중 입사일이 00년01월01부터 02년 12월 31일까지인 사원 전체 조회
SELECT * FROM EMPLOYEE WHERE HIRE_DATE BETWEEN '00/01/01' AND '02/12/31';

// 사원중 입사일이 00년01월01부터 02년 12월 31일이면서 코드가 D9인 사원 전체 조회
SELECT * FROM EMPLOYEE WHERE HIRE_DATE  BETWEEN '00/01/01' AND '02/12/31' AND DEPT_CODE ='D9';

✅ IN

  • 여러 개의 데이터 값을 지정하여 일치하는 데이터만 출력할 때 사용
  • NOT 논리 연산자를 붙일 수 있음
SELECT * FROM EMPLOYEES 
WHERE first_name IN('Steven','John','Peter'); // Employee 테이블에서 first_name 컬럼값이 
											// Steven, John, Peter 인 것들의 행 출력
                                            
SELECT * FROM EMPLOYEES 
WHERE first_name NOT IN('Steven','John','Peter'); // Employee 테이블에서 first_name 컬럼값이 
											// Steven, John, Peter 인 것이 아닌 행 출력

SELECT * FROM EMPLOYEE WHERE DEPT_CODE IN('D5','D6','D7','D8'); // 사원 중 부서코드가 D5, D6, D7, D8인 사원 구하기
// 위 IN연산자 말고 다수의 OR로 연결할 수 있다!

✅ LIKE

  • 문자열 속성에서 부분적으로 일치하는 것만 출력할 때 사용
  • 검색을 문자열 패턴으로 검색하는 기능
  • 패턴안에는 ' ' 넣기
  • %_가 있으며 두개를 조합 할 수 있다
  • 컬럼명 LIKE '패턴';
  • NOT : 부정의 연산으로 LIKE에서 부정을 표시할 때 사용

📌 % : 문자가 0개이상 아무 문자나 허용할 때 사용 (개수는 상관없음 = 없어도됨)

  • %강% : 강 (o), 한강(o), 두만강(o), 한강다리(o), 강강술래(o) -> 강이 포함되어있는 문자열
  • %강 : 강으로 끝나는 말 강(o), 한강(o), 요단강(o), 강강술래(x)
  • 강% : 강으로 시작하는 말 강(o), 강강술래(o), 한강(x)

📌 _ : 문자가 1개 아무문자나 허용할 때 사용 (개수를 지정할 때)

  • _강_ : 중간에 강이 있는 세글자
  • _ _ 강 : 강으로 끝나는 세글자
  • 강 _ _ _ : 강으로 시작하는 네글자
  • _강% : 두글자 이상의 두번째 자리에 강을 포함하는 문자 (조합)
SELECT EMP_NAME, EMAIL FROM EMPLOYEE WHERE EMAIL Like '%yo%'; // 이메일 주소 중에 yo를 포함

SELECT EMP_NAME, SALARY, DEPT_CODE FROM EMPLOYEE WHERE EMP_NAME LIKE '유%'; // 사원 중 유씨성

SELECT * FROM EMPLOYEE WHERE EMAIL LIKE '%j%' and EMP_NAME LIKE '유%'; // 이메일주소에 j를 포함하고 유씨성 가진 사원

// 이메일 주소에 _앞글자가 3글자인 사원의 사원명 이메일 조회하기
SELECT EMP_NAME, EMAIL FROM EMPLOYEE WHERE EMAIL LIKE '___\_%' ESCAPE '\';  // \를 문자로 인식하라는 명령어

// NOT 부정 연산
SELECT * FROM EMPLOYEE WHERE EMP_NAME NOT LIKE '김%'; // 김씨가 아닌 사원들 찾기

✅ IS NULL

  • 특정 속성의 값이 NULL 값인지 비교하여 데이터 조회
  • NULL -> 쓰레기값 = 아무의미없는 값 -> 연산이 불가능함
  • IS NULL , IS NOT NULL 통해서만 NULL값을 조회 가능
SELECT EMP_NAME, BONUS FROM EMPLOYEE WHERE BONUS IS NULL; // 보너스가 NULL 인 값 조회하기 = 보너스를 받지 않는 사원 조회

// 위와 반대로 IS NOT NULL 넣을시에는 반대로 보너스를 받고 있는 사원 조회!

// 조회된 컬럼값이 NULL일 때 NVL(컬럼명, 대체값)함수로 대체 할 수 있다
SELECT EMP_NAME, SALARY, NVL(BONUS,0) FROM EMPLOYEE; // 보너스 값이 NULL일경우 0으로 대체

// 값이 널로 나오는 것은 인턴으로 대체하며 그 위에 속성이름은 DEPT_CODE로 대체한다
SELECT EMP_NAME, NVL(DEPT_CODE,'인턴') AS DEPT_CODE FROM EMPLOYEE WHERE DEPT_CODE IS NULL;

✅ 우선순위

  • AND가 OR보다 우선순위 높음
  • 조건에 ( ) 를 통해 우선순위를 높이도록 하자
SELECT EMP_NAME, SALARY, JOB_CODE  
FROM EMPLOYEE // 직책이 J7 이거나 J2인 사원 중 급여가 200만원 이상인 사원을 조회
WHERE (JOB_CODE = 'J7' OR JOB_CODE = 'J2') AND SALARY >= 2000000; 

✅ 오늘 날짜 표시하기

  • SYSDATE
  • 날짜끼리 연산 가능함
    EX) SYSDATE - 10
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글