// cmd
sqlplus / as sysdba
alter user hr identified by hr account unlock ;
conn hr/hr
exit
sqlplus hr/hr
현업 업무의 80%가 SELECT
INSERT, UPDATE 등을 쓸 일이 많지 않다
데이터를 조회한 결과
0개, 1개, 여러 개가 될 수 있다
// comma는 앞에
SELECT SALARY
, NAME
, DEPT
FROM EMPLOYEE;
업무적인 연관관계를 가지지 않는 테이블
하지만 Join의 대상으로 활용될 수 있다(Non-EQUI Join)
식별 관계
비식별 관계
SELECT * | {[DISTINCT] {{colume_name | expr} {[AS] [alias]}, ...}}
FROM table_name
WHERE serach_condition [{AND | OR}, search_condition ...];
SELECT에서 산술 연산을 할 때, NULL인 데이터에 대한 연산 결과는 NULL이 나온다
SELECT EMP_NAME, SALARY * 12, (SALARY + (SALARY*BONUS_PCT))*12
FROM EMPLOYEE;
AS로 속성명에 별칭을 부여
SELECT EMP_NAME AS 이름
, SALARY * 12 AS "1년 급여" // ""(double quotation)은 숫자로 시작하거나 특수문자, 공백이 들어갈 때 사용
, (SALARY + (SALARY*BONUS_PCT))*12 AS 총소득
FROM EMPLOYEE;
임의로 지정한 문자열
Dummy 컬럼을 생성
SELECT EMP_NAME AS 이름
, SALARY * 12 AS "1년 급여"
, (SALARY + (SALARY*BONUS_PCT))*12 AS 총소득
FROM EMPLOYEE;
중복되는 데이터를 합쳐서 출력
SELECT DISTINCT DEPT_ID
FROM EMPLOYEE;
DISTINCT 키워드 뒤에 여러 개의 속성명이 오면 Composite으로 인식해 두 속성명 모두의 중복을 제거
WHERE는 조건을 제시할 때 사용한다
// WHERE 기본
SELECT EMP_NAME AS 이름
, DEPT_ID AS 부서
FROM EMPLOYEE
WHERE DEPT_ID = '90';
WHERE절 내에서 산술 조건을 이용 가능
// WHERE절 내의 산술연산
SELECT EMP_NAME AS 이름
, SALARY AS 급여
FROM EMPLOYEE
WHERE SALARY > 4000000;
AND / OR 키워드로 다수 조건 검색
// AND
SELECT EMP_NAME AS 이름
, DEPT_ID AS 부서
, SALARY AS 급여
FROM EMPLOYEE
WHERE DEPT_ID = '90'
AND SALARY > 4000000;
// OR
SELECT EMP_NAME AS 이름
, DEPT_ID AS 부서
, SALARY AS 급여
FROM EMPLOYEE
WHERE DEPT_ID = '90'
OR DEPT_ID = '20;
연결 연산자 '||'를 사용하여 여러 컬럼을 하나의 컬럼인 것처럼 연결하거나, 컬럼과 리터럴을 연결할 수 있다
// 컬럼과 컬럼을 연결
SELECT EMP_ID||EMP_NAME||SALARY
FROM EMPLOYEE;
// 컬럼과 리터럴을 연결
SELECT EMP_NAME||'의 월급은'||SALARY||'원 입니다'
FROM EMPLOYEE;
<>, !=, ^=
BETWEEN AND
LIKE / NOT LIKE
IS NULL / IS NOT NULL
IN
// BETWEEN AND
SELECT EMP_NAME
, SALARY
FROM EMPLOYEE
WHERE SALARY BETWEEN 3500000 AND 5500000;
// same as...
SELECT EMP_NAME
, SALARY
FROM EMPLOYEE
WHERE SALARY >= 3500000
AND SALARY <= 5500000;
// '%' 패턴
SELECT EMP_NAME
, SALARY
FROM EMPLOYEE
WHERE EMP_NAME LIKE '김%';
// '_' 패턴
SELECT EMP_NAME
, PHONE
FROM EMPLOYEE
WHERE PHONE LIKE '___9_______';
LIKE 뒤에 ESCAPE 옵션을 줘서 해당 문자 뒤의 % 나 _는 문자로 인식
// ESCAPE
SELECT EMP_NAME
, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE '___\_%' ESCAPE '\';
// NOT LIKE
SELECT EMP_NAME
, SALARY
FROM EMPLOYEE
WHERE EMP_NAME NOT LIKE '김%';
Java와 같이 == NULL이 아닌 IS NULL 사용한다
// IS NULL
SELECT EMP_NAME
, MGR_ID
, DEPT_ID
FROM EMPLOYEE
WHERE MGR_ID IS NULL
AND DEPT_ID IS NULL;
// IN
SELECT EMP_NAME
, DEPT_ID
, SALARY
FROM EMPLOYEE
WHERE DEPT_ID IN ('60', '90');
// same as...
SELECT EMP_NAME
, DEPT_ID
, SALARY
FROM EMPLOYEE
WHERE DEPT_ID = '60'
OR DEPT_ID = '90';
// AND가 OR보다 우선순위가 높아서 오류
SELECT EMP_NAME
, SALARY
, DEPT_ID
FROM EMPLOYEE
WHERE DEPT_ID = '20'
OR DEPT_ID = '90'
AND SALARY > 3000000;
// ()를 통해 해결
SELECT EMP_NAME
, SALARY
, DEPT_ID
FROM EMPLOYEE
WHERE ( DEPT_ID = '20'
OR DEPT_ID = '90' )
AND SALARY > 3000000;
출처: SHINSEGAE I&C 인턴십