WORK/DB_Oracle

##SQL 1일차 0427

Justin Mendes 2021. 4. 28. 20:48

*대소문자 구분x

다른 유저의 테이블을 복사하기

 

CREATE TABLE EMP

AS

SELECT * FROM HR.EMP ;

 

테이블 정보 확인

SELECT * FROM 테이블명 ;

EX) SELECT * FROM EMP ;

 

데이터 타입

A NUMBER(3) > 0~999 //정수 3자리

A NUMBER(2,2) > 0.00~0.99

A NUMBER(3,2) > 0.00~9.99

-----------------------------------------------

SELECT

- 컬럼명1, 컬럼명2...

-모든컬럼 : *

-수식

-별칭 : AS 별칭명 => AS 생략 가능

-함수

-서브쿼리

- || : 결합 연산자

 

SELECT * FROM EMP;

 

SELECT LAST_NAME, SALARY FROM EMP;

 

SELECT LAST_NAME, SALARY, SALARY*2

FROM EMP;

 

SELECT LAST_NAME, SALARY, SALARY*2 AS BONUS

FROM EMP;  >>컬럼의 별칭 :  AS

 

SELECT LAST_NAME, SALARY, SALARY*2 AS  YEAR BONUS

FROM EMP;   >> AS 가 한 단어 아닐 시 "별칭명"

 

SELECT FIRST_NAME || LAST_NAME AS NAME

FROM EMP; >>결합 후 별칭까지

 

SELECT FIRST_NAME || ' '|| LAST_NAME AS NAME

FROM EMP; >>결합 후 별칭까지 + 띄어쓰기

 

--------------------------------------------------

정렬

ORDER BY 컬럼명 [옵션], 컬럼명[옵션]

옵션

-오름차순 ASC => 생략가능

-내림차순 DESC

 

SELECT LAST_NAME, SALARY, HIRE_DATE

FROM EMP

ORDER BY SALARY DESC, HIRE_DATE  ;

 

*SELECT 절에 없는 컬럼으로도 정렬가능

 

SELECT LAST_NAME, SALARY, HIRE_DATE

FROM EMP

ORDER BY DEPARTMENT_ID;

 

*ORDER BY 절에서 컬럼명 대신에 인덱스를 더 많이 사용한다

SELECT LAST_NAME, SALARY, HIRE_DATE

FROM EMP

ORDER BY 2 DESC, 3;

 

---------------------------------------------------

NULL

=> 아직 입력되지 않은 값

=> NULL 값인 컬럼이 산술식에 포함되면 결과도 NULL

NVL(컬럼명, 널일경우줄값)

총급여 = 급여 + (급여*판매수당비율)

 

SELECT LAST_NAME, SALARY + (SALARY * NVL(COMMISSION_PCT,0)) AS TOTAL_SALARY

FROM EMP;

 

----------------------------------------------------

조건 검색

-숫자, 문자, 날짜

 

-WHERE 조건식 논리연산자 조건식 논리연산자 조건식

 

-조건식 : 좌항 비교연산자 우항 => T, F

-조건식 : 컬럼명 비교연산자 값 또는 수식

 

숫자 조건검색

-숫자만 : 서식, 표시형식 빼고

 

SELECT LAST_NAME, SALARY

FROM EMP

WHERE SALARY >= 10000

ORDER BY SALARY ;

 

문자 조건 검색

-'문자' : 작은 따옴표로 감싼다

-'문자' : 대소문자를 구분한다

 

SELECT SALARY, HIRE_DATE

FROM EMP

WHERE  LAST_NAME = 'Chen' ;

 

날짜 조건 검색

- '2020-10-10'

- TO_DATE('문자', '날짜패턴') => TO_DATE('2010-10-10','YYYY-MM-DD')

 

2005년 이전에 입사한 사원의 정보

SELECT * FROM EMP

WHERE HIRE_DATE < '2005-01-01' ;

 

-----------------------------------------------------

조건이 여러개

SELECT * FROM EMP

WHERE SALARY < 7000

    AND HIRE_DATE < '2005-01-01' ;

 

-----------------------------------------------------

 

비교연산자 : >, <,>= ,<= , =, !=, <>, ><

기타연산자

-(NOT)BETWEEN 1 AND 2 

-(NOT)IN

-(NOT)LIKE

-IS(NOT)

 

BETWEEN 1 AND 2

-범위 검색

-숫자, 문자, 날짜 범위 가능

-1과 값2가 모두 포함된다

-1 최소값, 2 최대값(순서 바뀌면 안됨)

 

EX)급여 10000~ 15000 사이의 사원 정보

SELECT LAST_NAME, SALARY

FROM EMP

WHERE SALARY BETWEEN 10000 AND 15000 ;

 

IN(값1, 값2..)

-목록에 있으면

 

부서번호가 10 또는 30 부서에 근무하는 사원의 이름과 월급, 부서번호

 

SELECT LAST_NAME, SALARY, DEPARTMENT_ID

FROM EMP

WHERE DEPARTMENT_ID = 10 OR DEPARTMENT_ID = 30;

 

 

SELECT LAST_NAME, SALARY, DEPARTMENT_ID

FROM EMP

WHERE DEPARTMENT_ID IN(10,30);

 

LIKE

-패턴 검색 연산자

-문자 자료에만 사용 가능

% : 여러 문자를 모를 경우

_ : 문자 하나를 모를 경우

 

SELECT * FROM EMP

WHERE LAST_NAME LIKE 'C%' ;

 

 

SELECT * FROM EMP

WHERE LAST_NAME LIKE '__N%' ;

 

 

SELECT * FROM EMP

WHERE EMAIL LIKE '%S%' ; 

 

IS

 

SELECT * FROM EMP

WHERE COMMISSION_PCT IS NULL ;

=> IS =로 하면 값이 안나옴