국비교육(22-23)

7일차(2)/DB_Oracle(2) : SELECT문

서리/Seori 2022. 10. 14. 18:09

7일차(2)/DB Oracle(2) : SELECT문

 

 

- 표 생성, 시퀀스 생성, 내용 작성 실습

 


DATE : 날짜,시간 데이터 타입
SYSDATE 함수 : 현재 날짜와 시간을 리턴해준다.

 


[ORACLE SELECT문의 실행 순서]

위 순서대로 적용된다.

1) FROM문 참조 → 2) WHERE문 참조 → 3) GROUP BY 참조 → 4) HAVING문 참조

→ 5)SELECT 일어남 → 6) ORDER BY로 정렬

 

일단 세 개만 놓고 비교해보면,

SELECT (궁금한 내용 나열)
FROM (궁금한 내용이 있는 대상 나열)
WHERE (FROM절에 있는 ROW에서 원하는 ROW만 추릴 조건)

- 읽어지는 순서 FROM→WHERE→SELECT이다

 


- SELECT 문 사용법 익히기 / scott 계정

 

직원 이름, 급여를 불러오면서 급여를 높은순으로 정렬하고, 이름이 KING인 직원의 job 찾기

 

SELECT job, sal FROM emp

ORDER BY job ASC, sal DESC;

 

- 같은 직업끼리 정렬하고 그 안에서 급여를 내림차순한것. 2번 정렬되면 보기 편하다.

- 정렬을 여러번 한다면 , 로 구분해서 쓰기!

 

<<실행되는 순서!>>

1(초록) FROM 절 row: 12개  // 테이블의 전체 행 참조

2(분홍) WHERE 절 row: 4개 (조건에 맞춰 추려내는 역할)  // 조건에 맞는 행 참조

3(주황) SELECT가 일어난다.  // 가져올 열 참조

4 ORDER BY로 정렬!

 

- SELECT문은 어떤 대상으로부터 조건에 맞는 row를 추려내는 것.

- 대상을 조작해서 원하는 '결과 table'을 골라내는 것.

 

SELECT empno, ename, hiredate FROM emp
WHERE hiredate = '81/02/20';

날짜도 문자열 타입처럼 ' '을 넣어 검색한다! (" " 사용불가!)

 

SELECT empno AS "사원번호", ename AS "사원이름" FROM emp;

SELECT empno 사원번호, ename 사원이름 FROM emp;

 

- column에 새로운 이름 부여하기(ALIAS/ AS 사용), AS는 생략 가능!

- 바꾸는 이름은 공백(띄어쓰기)이 들어가면 안된다.

 


 

[연산자를 사용하는 SELECT문]

 


- oracle에서는 그냥 산술계산을 하면 값이 나오지 않는다. 출력하려면 select문을 사용해야 한다. 
  + - * / 사용 가능. %는 사용불가능!

 

- javascript에서는 동등비교연산자 == 를 사용했지만, oracle에서는 = 을 사용

 

- 직원이름, 급여, 10% 상승된 급여 추출하기 

- 칼럼 이름바꾸기도 ED에서 수정 가능!

 

- 부서번호가 30이 아닌 직원들의 이름과 부서번호  추출

 

 

- && : AND / || : OR / ! : NOT

위 연산자들은 ORACLE에서는 영어 단어로 사용한다.

 


[ SQL 연산자 ]

 

- IN , ANY , ALL , BETWEEN , LIKE , IS NULL , IS NOT NULL 

 

- IN(a,b) : a이거나 b인

- ANY(a,b) : a, b중 어느 하나라도

- ALL(a,b) : a, b 모두 다

- BETWEEN a AND b :

 

 

- IN문은 or 연산자와 비슷하다. 

- IN문 안에 들어간 서브쿼리. 또다른 SELECT문

 

WHERE 1000 <= sal <= 2000;  <- 실행되지 않는다!

WHERE 1000 <= sal AND sal <= 2000; 또는 

WHERE sal BETWEEN 1000 AND 2000; 와 같이 써주어야 한다.

 


 

SELECT ename, deptno  FROM emp
WHERE ename LIKE 'J%';

 

emp에 이름이 J로 시작하는 직원이 있으면 직원이름,부서번호 추출

- %는 아무 문자나 다 포함한다는 의미이다!

 (검색 할 때 %J% 로 사용가능. J가 들어가는 글자는 전부 다 찾는다는 의미.)

 

SELECT ename, sal, hiredate  FROM emp

WHERE ename LIKE '_A%'

- 이름의 두번째 글자가 A로 시작하는 직원이 있으면 직원이름,급여,입사일자 추출

- 문자열이 아니어도 가능하다. '81%' 로 81년도에 입사한 직원 추출 가능.

 


- 오라클에서 NULL은 비교 불가, 알 수 없음, 비어 있음의 의미를 갖고 있다.

- 따라서 = NULL 로는 쓸 수 없고, IS NULL 이라고 적어야 한다. 

  IS NOT NULL도 마찬가지!

 


 

- 결합 연산자 || 를 사용해서 원하는 데이터를 리턴해낼 수 있다.

 javascript의 "a" + "bcd"와 같이 단순히 문자열을 연결하는 역할.

- 위의 데이터는 1개 칼럼에 12개 행이 있는 표 구조!

 


 

[참고] ORACLE 테이블의 시각적인 부분 개선하는 방법

 (폭 넓히기, 칼럼 폭 줄이기, 페이지 행 수 늘리기)

 

COLUMN (칼럼이름) FORMAT A10

SET LINESIZE 100
SET PAGESIZE 20

 

- 단, 창을 끄면 리셋되므로 메모장에 넣어서 저장해두고 @로 열어서 쓰면 좋다.