RNUM의 별칭(alias)를 적용하기 위해서는 안쪽 셀렉트문에서 별칭이 선언되어야 밖의 쿼리에서 별칭이 적용될 수 있으니 유의!
SELECT *
FROM BOARD B
JOIN FOOD F ON(B.FOOD_NO = F.FOOD_NO)
JOIN RESTAURANT R ON(B.RESTAURANT_NO = R.RESTAURANT_NO)
WHERE B.STATUS = 'Y' AND BOARD_TYPE = 1;
SELECT *
FROM (SELECT ROWNUM RNUM, DESCBOARD.*
FROM (SELECT *
FROM BOARD B
JOIN FOOD F ON(B.FOOD_NO = F.FOOD_NO)
JOIN RESTAURANT R ON(B.RESTAURANT_NO = R.RESTAURANT_NO)
WHERE B.STATUS = 'Y' AND BOARD_TYPE = 1) DESCBOARD)
WHERE RNUM >=2 AND RNUM
------------------------------------------------------------------------------
------------------------------------SYNONYM----------------------------------
------------------------------------------------------------------------------
/*
-- SYNONYM
SYNONYM = 동의어 = 데이터베이스 객체에 대한 '별칭'
별칭을 의미함
동의어는 데이터베이스 객체에 대한 별칭
다른 객체를 부르는 말
동의어는 객체만 설정 가능
가상테이블에 접근할 수 있는 코드로 DUAL을 사용하는 것
CREATE SYNONYM 별칭명 FOR 테이블명;
*/
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-- 비공개 동의어
CREATE SYNONYM EMP FOR EMPLOYEE;
-- EMPLOYEE 테이블의 별칭을 EMP로 지어놓겠다는 의미
-- ERROR : ORA-01031 : insufficient privileges
-- 유저나 뷰의 권한 생성 때처럼 시노님도 권한을 부여해야한다
--GRANT CREATE TO 계정명; -- VIEW 때 권한 부여 코드.
--SYSTEM계정으로 옮겨가서 아래 코드 작성.
GRANT CREATE SYNONYM TO KH;
-- Grant을(를) 성공했습니다.
CREATE SYNONYM EMP FOR EMPLOYEE;
CREATE SYNONYM EMP FOR EMPLOYEE;
------------------------------------------------------------------------------
-- 공개 동의어
CREATE PUBLIC SYNONYM DEPT FOR KH.DEPARTMENT; -- PUBLIC 추가
-- SYSTEM계정으로 바꾸고나서 실행
-- KH.테이블명 하면 타계정에도 접촉 가능
SELECT * FROM DEPT;
DROP SYNONYM EMP; -- KH계정에서 실행
DROP PUBLIC SYNONYM DEPT; -- 공개 동의어 삭제는 시스템 계정에서
------------------------------------------------------------------------------
방법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 연봉
SELECT 컬럼명 -- 조회하고자 하는 컬럼명 기술 FROM 테이블명 -- 조회하고자 하는 컬림이 포함된 테이블명 기술 WHERE 조건식; -- 행을 선택하는 조건 기술, 조건을 만족하는 행만 반환 -- 조건식 복수로 붙여서 사용가능. 복수라도 WHERE절 한개만 기술
비교연산자
>, <, >=, <=, = ,!=
크다, 작다, 크거나 같다 같다 : = 같지않다 : != , ^= , <>
컬럼 별칭
컬럼명 AS 별칭 / 컬럼명 AS “별칭” / 컬럼명 별칭 / 컬럼명 “별칭”
별칭 : ""
리터럴(literal)
값 자체
싱글쿼테이션( ' ' )
오라클에서는 문자,문자열,데이트 상관없이 다 싱글쿼테이션(’ ‘)으로 감싸준다
-- 컬럼 별칭
-- 컬럼명 AS 별칭 / 컬럼명 AS “별칭” / 컬럼명 별칭 / 컬럼명 “별칭”
/*
리터럴(literal)
값 자체 ‘ ‘
오라클에서는 문자,문자열,데이트 상관없이 다 싱글쿼테이션(’ ‘)으로 감싸준다
데이터 타입에 상관없이 별칭(””) 외에는 다 싱글쿼테이션으로 감싼다
*/
-- EMPLOYEE 테이블에서 직원의 직원 번호, 사원명, 급여, 단위 조회
SELECT EMP_NO, EMP_NAME, SALARY, '원' "단위 : 원"
FROM EMPLOYEE;
SELECT EMP_NO, EMP_NAME, SALARY, '@' "원"
FROM EMPLOYEE;
-- 별칭 : ""
-- 리터럴을 싱글쿼테이션으로 처리한다 : ' '
-- '원'이라는 컬럼을 보여주고 싶지않으면 더블쿼테이션""으로 단위써주자
-- EMPLOYEE테이블에서 직원의 직급 코드 조회
SELECT EMP_ID, '직급코드' AS 직급코드
FROM EMPLOYEE;
SELECT EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE 'b%';
-- 결과 : 방명수 bang ns@kh.kr
-- 결과 : 없음
-- 리터럴은 대소문자 철저히 구별하기에 대문자 BANG으로 시작하는 EMAIL이 없어서 안나온 것
-- EMPLOYEE 테이블에서 직원의 부서 코드를 중복 없이 조회
SELECT DISTINCT JOB_CODE
FROM EMPLOYEE;
-- DISTINCT는 한번만 쓸 수 있다
--SELECT DISTINCT DEPT_CODE, DISTINCT DEPT_CODE -- error
--FROM EMPLOYEE;
SELECT DISTINCT DEPT_CODE, JOB_CODE -- 콤마로 두 컬럼을 묶으면 두 컬럼의 조건이
FROM EMPLOYEE; -- AND조건으로 교집합 된 것만 중복 제거한다
/*
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';