SELECT
데이터 ’조회’
SELECT 컬럼명 FROM 테이블명;
방법1
SELECT EMP_ID,EMP_NAME,SALARY FROM EMPLOYEE;
방법2
SELECT EMP_ID,EMP_NAME, SALARY
FROM EMPLOYEE;
SELECT 컬럼명 -- 조회하고자 하는 컬럼명 기술
FROM 테이블명 -- 조회하고자 하는 컬림이 포함된 테이블명 기술
WHERE 조건식; -- 행을 선택하는 조건 기술, 조건을 만족하는 행만 반환
-- 조건식 복수로 붙여서 사용가능. 복수라도 WHERE절 한개만 기술
한 테이블의 모든 정보 조회
--EMPLOYEE 테이블의 모든 정보 조회
방법1
SELECT EMP_ID,EMP_NAME, EMP_NO, EMAIL, PHONE, DEPT_CODE, JOB_CODE, SAL_LEVEL, SALARY,
BONUS, MANAGER_ID, HIRE_DATE, ENT_DATE, ENT_YN FROM EMPLOYEE ;
방법2
SELECT * -- * : 전체
FROM EMPLOYEE;
DISTINCT
중복제거
DISTINCT는 한번만 쓸 수 있다
-- DISTINCT : 중복제거
SELECT DISTINCT JOB_CODE
FROM EMPLOYEE;
-- EMPLOYEE 테이블에서 직원의 부서 코드를 중복 없이 조회
SELECT DISTINCT DEPT_CODE
FROM EMPLOYEE;
-- DISTINCT는 한번만 쓸 수 있다
--SELECT DISTINCT DEPT_CODE, DISTINCT DEPT_CODE -- ERROR
--FROM EMPLOYEE;
DISTINCT A,B 콤마로 같이 쓰면 ()로 묶은 효과 발생
콤마로 두 컬럼을 묶으면 두 컬럼의 조건이
AND조건으로 교집합 된 것만 중복 제거한다
SELECT DISTINCT DEPT_CODE, JOB_CODE -- 콤마로 두 컬럼을 묶으면 두 컬럼의 조건이
FROM EMPLOYEE; -- AND조건으로 교집합 된 것만 중복 제거한다
리터럴(literal)
값 자체
싱글쿼테이션( ' ' )
오라클에서는 문자,문자열,데이트 상관없이 다 싱글쿼테이션(’ ‘)으로 감싸준다
컬럼 별칭
컬럼명 AS 별칭 / 컬럼명 AS “별칭” / 컬럼명 별칭 / 컬럼명 “별칭”
별칭 : ""
쌍따옴표( “”)를 무조건 붙여야하는 조건
1)별칭에 특수문자가 들어갈 경우
2)별칭이 숫자로 시작할 경우
쌍따옴표 = 더블 쿼테이션(” ”)
EX) 직원 명 ←띄어쓰기 공백 특수문자라 “직원 명”으로 적어줘야한다
EX) SALARY*12 AS 연봉
-- EMPLOYEE 테이블에서 직원의 직원 번호, 사원명, 급여, 단위 조회
SELECT EMP_ID, EMP_NAME, SALARY, '원' "단위"
FROM EMPLOYEE;
SELECT EMP_ID, EMP_NAME, SALARY, '원입니다' "단위"
FROM EMPLOYEE;
-- 별칭 : ""
-- 리터럴을 싱글쿼테이션으로 처리한다 : ' '
-- '원'이라는 컬럼을 보여주고 싶지않으면 더블쿼테이션""으로 단위써주자
비교연산자
>, <, >=, <=, = ,!=
크다, 작다, 크거나 같다
같다 : =
같지않다 : != , ^= , <>
--EMPLOYEE테이블에서 부서코드가 'D9'인 직원의 이름, 부서코드 조회
SELECT EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9';
-- '' 없이 D9만 쓰면 컬럼으로 인지하게 됨
-- 'd9'라고 써도 안됨. 리터럴은 대소문자 구분
-- 급여가 4000000이상인 직원의 이름, 급여 조회
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY >= '4000000'; -- ''로 감싸도 숫자로 인지잘한다. '' 없어도 됨
-- EMPLOYEE테이블에서 부서코드가 D9이 아닌 사원의 사번, 이름, 부서코드조회
SELECT EMP_NO, EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE != 'D9'; -- != // ''이랑 대소문자 구별 주의
WHERE DEPT_CODE ^= 'D9'; -- ^=
WHERE DEPT_CODE <> 'D9'; -- <>
전체코드
-- 컬럼 별칭
-- 컬럼명 AS 별칭 / 컬럼명 AS “별칭” / 컬럼명 별칭 / 컬럼명 “별칭”
SELECT EMP_NAME "직원 명", SALARY * 12 급여,SALARY *(1+BONUS)*12 총수령액, SALARY *(1+BONUS)*12 - SALARY*12*0.03 실수령액
FROM EMPLOYEE;
SELECT EMP_NAME,HIRE_DATE, SYSDATE-HIRE_DATE AS 근무일수
FROM EMPLOYEE;
/*
리터럴(literal)
값 자체 ‘ ‘
오라클에서는 문자,문자열,데이트 상관없이 다 싱글쿼테이션(’ ‘)으로 감싸준다
데이터 타입에 상관없이 별칭(””) 외에는 다 싱글쿼테이션으로 감싼다
*/
-- EMPLOYEE 테이블에서 직원의 직원 번호, 사원명, 급여, 단위 조회
SELECT EMP_ID, EMP_NAME, SALARY, '원' "단위"
FROM EMPLOYEE;
SELECT EMP_ID, EMP_NAME, SALARY, '원입니다' "단위"
FROM EMPLOYEE;
-- 별칭 : ""
-- 리터럴을 싱글쿼테이션으로 처리한다 : ' '
-- '원'이라는 컬럼을 보여주고 싶지않으면 더블쿼테이션""으로 단위써주자
-- EMPLOYEE테이블에서 직원의 직급 코드 조회
SELECT JOB_CODE, '직급코드'
FROM EMPLOYEE;
select emp_name, email
from employee
where email like 'bang%'; -- bang으로 시작하는 email 다 조회
-- 결과 : 방명수 bang ns@kh.kr
-- 오라클은 대소문자 구분안해서 소문자로 써도 되나 리터럴에서는 엄격히 구분하기에 주의
SELECT EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE 'BANG%';
-- 결과 : 없음
-- 리터럴은 대소문자 철저히 구별하기에 대문자 BANG으로 시작하는 EMAIL이 없어서 안나온 것
------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-- DISTINCT : 중복제거
SELECT DISTINCT JOB_CODE
FROM EMPLOYEE;
-- EMPLOYEE 테이블에서 직원의 부서 코드를 중복 없이 조회
SELECT DISTINCT DEPT_CODE
FROM EMPLOYEE;
-- DISTINCT는 한번만 쓸 수 있다
--SELECT DISTINCT DEPT_CODE, DISTINCT DEPT_CODE
--FROM EMPLOYEE;
SELECT DISTINCT DEPT_CODE, DEPT_CODE
FROM EMPLOYEE;
/*
SELECT 컬럼명 -- 조회하고자 하는 컬럼명 기술
FROM 테이블명 -- 조회하고자 하는 컬림이 포함된 테이블명 기술
WHERE 조건식; -- 행을 선택하는 조건 기술, 조건을 만족하는 행만 반환
-- 조건식 복수로 붙여서 사용가능. 복수라도 WHERE절 한개만 기술
------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-- 비교연산자
>, <, >=, <=, = ,!=
크다, 작다, 크거나 같다
같다 : =
같지않다 : != , ^= , <>
*/
--EMPLOYEE테이블에서 부서코드가 'D9'인 직원의 이름, 부서코드 조회
SELECT EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9';
-- '' 없이 D9만 쓰면 컬럼으로 인지하게 됨
-- 'd9'라고 써도 안됨. 리터럴은 대소문자 구분
-- 급여가 4000000이상인 직원의 이름, 급여 조회
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY >= '4000000'; -- ''로 감싸도 숫자로 인지잘한다. '' 없어도 됨
-- EMPLOYEE테이블에서 부서코드가 D9이 아닌 사원의 사번, 이름, 부서코드조회
SELECT EMP_NO, EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE != 'D9'; -- != // ''이랑 대소문자 구별 주의
WHERE DEPT_CODE ^= 'D9'; -- ^=
WHERE DEPT_CODE <> 'D9'; -- <>
-- EMPLOYEE 테이블에서 퇴사 여부가 N인 직원을 조회하고 근무 여부를 재직중으로 표시
-- 사번,이름, 고용일, 근무여부 조회
SELECT EMP_ID, EMP_NAME, HIRE_DATE, '재직중' "근무여부"
FROM EMPLOYEE
WHERE ENT_YN = 'N';
-------------- 실습문제 --------------
--1.EMPLOYEE테이블에서 월급이 3000000이상인 사원의 이름, 월급, 고용일 조회
--2.EMPLOYEE테이블에서 SAL_LEVEL이 S1인 사원의 이름, 월급, 고용일, 연락처 조회
--3.EMPLOYEE테이블에서 실수령액(총수령액-(연봉*세금3%))이 5천만원 이상인
-- 사원의 이름, 급여, 실수령액, 고용일 조회
--1.EMPLOYEE테이블에서 월급이 3000000이상인 사원의 이름, 월급, 고용일 조회
SELECT EMP_NAME, SALARY, HIRE_DATE
FROM EMPLOYEE
WHERE SALARY >= 3000000;
--2.EMPLOYEE테이블에서 SAL_LEVEL이 S1인 사원의 이름, 월급, 고용일, 연락처 조회
SELECT EMP_NAME, SALARY, HIRE_DATE, PHONE
FROM EMPLOYEE
WHERE SAL_LEVEL = 'S1';
--3.EMPLOYEE테이블에서 실수령액(총수령액-(연봉*세금3%))이 5천만원 이상인
-- 사원의 이름, 급여, 실수령액, 고용일 조회
SELECT EMP_NAME 이름, SALARY "급여", SALARY *(1+BONUS)*12 - SALARY*12*0.03 AS 실수령액, HIRE_DATE AS "고용일"
FROM EMPLOYEE
WHERE SALARY *(1+BONUS)*12 - SALARY*12*0.03 >= 5000000;
-- 컬럼 산술연산으로 뽑아낸 값을 조건식의 기준 데이터에 사용가능
'SQL > Oracle' 카테고리의 다른 글
[SQL][Oracle] JOIN에 AND조건과 JOIN+WHERE절에 AND조건 어떻게 다를까? (1) | 2022.10.05 |
---|---|
[SQL][Oracle] 계층형 질의(계층형 쿼리, Hierarchical Query) 동작순서 with 예시 (0) | 2022.08.26 |
[SQL][Oracle] 계층형 질의(계층형 쿼리, Hierarchical Query) (1) | 2022.08.25 |
[SQL][Oracle] ESCAPE 식별자, IS NULL, IN, 연결연산자 || (0) | 2022.03.12 |
[SQL][Oracle] 논리연산자, BETWEEN, LIKE , 와일드카드 (0) | 2022.03.12 |