[오라클] 21

서브쿼리 subquery

Q) Daniel이 근무하는 부서의 평균급여를 구하시오 --1. Daniel의 부서를 알아낸다 --2. 해당 부서의 평균 급여를 알아낸다 SELECT department_id FROM employees WHERE first_name='Daniel'; SELECT avg(salary) FROM employees WHERE department_id=100; --이걸 합쳐야됨 SELECT avg(salary) FROM employees WHERE department_id=(SELECT department_id FROM employees WHERE first_name='Daniel'); --이렇게 두번에 걸쳐 구하는것을 한번에 구하는 것이 서브쿼리 - where절 서브쿼리 Q) 급여를 8800 받는 직원의 부서..

[오라클]/SELECT 2020.12.27

조인 JOIN

- JOIN: 2개 이상의 테이블을 한번에 출력되는것, pk와 fk를 사용해야됨 - 오라클은 4개의 join 이름을 구성 equi join, non-equi join, self join, outer join 1) equi join -> pk=fk 조건에서 조인 INNER JOIN Q) 직원의 이름, 급여와 부서명을 출력하시오 --두개의 테이블을 같이 보는 방법 SELECT first_name 이름, salary 급여, department_name 부서 FROM employees, departments; --근데 이러면 employees의 한 칼럼마다 departments의 모든 칼럼에 붙여져서 행수가 엄청 많아짐 SELECT first_name 이름, salary 급여, department_name 부서..

[오라클]/SELECT 2020.12.27

다중행 함수(multi row function) 그룹함수

- sum(), max(), min(), count(), avg() SELECT sum(salary) FROM employees; SELECT max(salary) FROM employees; SELECT min(salary) FROM employees; SELECT avg(salary) FROM employees; SELECT count(*) FROM employees; --무조건 전체 인원수 구하기 SELECT count(commission_pct) FROM employees; --commission_pct가 있는 사람만 구하기(null값 제외) SELECT avg(commission_pct) FROM employees; --null값 빼고 계산 SELECT sum(salary), min(salary..

[오라클]/SELECT 2020.12.26

단일행 함수(single row function)

- nvl(인자1, 인자2): 값이 있으면 그대로 나오고 null이면 인자2 값을 집어넣음 SELECT first_name 이름, nvl(commission_pct, 0) 인센티브 FROM employees; --nvl(인자1, 인자2): 인자1과 인자2의 타입이 같아야됨 SELECT first_name 이름, nvl(to_char(commission_pct), '없어!') 인센티브 FROM employees; --to_char() -> 문자열로 바꿔줌 - LOWER, UPPER, INITCAP SELECT first_name 이름, last_name 성, salary*12 연봉 FROM employees WHERE LOWER(last_name)='king'; SELECT first_name 이름, la..

[오라클]/SELECT 2020.12.26

select

- 별명 사용 방법 SELECT first_name "사원 이름", salary "월 급여" FROM employees; SELECT first_name "사원이름", salary "12월급여" FROM employees; SELECT first_name "사원이름", salary 월급여12 FROM employees; 쌍따옴표 사용하면 별명에 공백, 숫자포함 가능(sql에서 유일하게 쌍따옴표 사용 가능함) - varchar2, char varchar2: 가변길이 문자열, 메모리는 절약, 상대적으로 속도는 느리다 char: 고정길이 문자열, 메모리는 낭비될수 있으나 상대적으로 속도는 빠르다 추후에 char(5), varchar2(5) 로 둘다 babo 집어넣으면 babo^, babo 라고해서 두개 비교하..

[오라클]/SELECT 2020.12.26

sequence, index

1) sequence CREATE SEQUENCE bisang_seq; SELECT bisang_seq.nextval FROM dual; --다음 시퀀스 보기 SELECT bisang_seq.currval FROM dual; --현재 시퀀스 보기 --조건 작성 CREATE SEQUENCE test_seq INCREMENT BY 1 --1씩 증가 START WITH 10 --10부터 시작 MAXVALUE 30000 --최대 30000까지 NOCYCLE --반복X, 30000 도달하면 끝, 이거 없으면 max 도달하고 다시 돔 NOCACHE; --기본값 20, 20까지 캐시메모리에 넣어놈 그래서 빠르게 추가가 가능하나 캐시메모리에 문제가 생길 경우 숫자가 어긋남 --게시판에서는 SELECT max(num)+..

[오라클]/SQL 2020.12.26

view

view: 일부 테이블 추출개념, 테이블 소스는 볼수 없고 문장만 볼수 있기때문에 보안성이 강함 - view 만들기: CREATE OR REPLACE VIEW view_12000 AS SELECT * FROM employees WHERE salary>12000; --view_12000가 없으면 생성, 있으면 수정 --view를 수정 가능하게 하기 위해 무조건 CREATE OR REPLACE 사용 Q) 부서별로 최소봉금, 최대봉급, 평균봉급 view만들기(출력은 부서명,min,max,avg) CREATE OR REPLACE VIEW salary_view AS SELECT department_id 부서명, min(salary) min, max(salary) max, avg(salary) avg FROM em..

[오라클]/SQL 2020.12.26

제약조건

constraint: 무결성을 위해 - 종류: pk,fk,not null, unique,check - 제약조건 방식 2가지 1) column level 방식: 칼럼명에 이어서 2) table level 방식: 제약조건을 마지막에 모아서 제약조건 중 not null 은 무조건 column level 방식 - 사용법: constraint 제약조건이름(테이블명_칼럼명_제약조건약어) 제약조건종류 (이름이 있어야지 나중에 dictionary에서 찾을 수 있음) - column level 방식 CREATE TABLE memtable ( memname VARCHAR2(20) CONSTRAINT memtable_memname_pk PRIMARY KEY, memtel VARCHAR2(20) CONSTRAINT memta..

[오라클]/SQL 2020.12.26

decode

decode: 다항연산자(대상 칼럼, 조건, yes처리, no처리) Q) 사원 직책에 따라 급여를 인상 지급하고자 한다. 직책에 'Manager'가 포함된 사원은 급여를 인상하여 1.1를 지급하고 나머지 직원들에 대해서는 1.5를 지급하고자 한다. 이 경우 이름, 직책, 인상된 급여를 조회 출력하시오 SELECT e.first_name 이름, j.job_title 직책, e.salary 급여, decode(substr(j.job_title,-7),'Manager',e.salary*1.1,e.salary*1.5) 인상된급여 FROM jobs j, employees e WHERE e.job_id=j.job_id; --substr(j.job_title,-7) : 뒤에서부터 7글자 조건을 계속 추가할 수 있음 ..

[오라클]/SQL 2020.12.26