1.ORACLE에서 교육용으로 제공하는 hr계정 unlock
sqlplus 실행 후
conn /as sysdba
비밀번호 입력
alter user hr identified by hr account unlock;
hr계정으로 로그인하여 테이블 목록 확인
conn hr/hr
select * from tab;
2.Having절
서브쿼리에서 많이 쓴다.
단순 Group By절을 사용하면 모든 그룹의 결과가 다 나온다.
특정 그룹만 출력하기 위해서는 조건절을 추가 해야 하는데, HAVING절을 사용하면 그룹별로 조건을 지정 할 수 있다.
HAVING절과 WHERE절의 차이점?
Group By절에서 WHERE절도 사용 가능하다. 하지만 실행순서가 다르다.
ㅇ동일한 쿼리에서 HAVING 및 WHERE절 사용 - 링크
경우에 따라서는 HAVING 절을 사용하여 그룹 전체에 조건을 적용하기 전에 WHERE절을 사용하여 그룹에서 개별 행을 제외해야 할 수 도 있습니다.
- HAVING절은 WHERE절과 비슷하지만 그룹 전체 즉, 그룹을 나타내는 결과 집합의 행에만 적용된다는 점에서 차이가 있습니다.
= GROUP BY로 그룹집합을 만든 후 조건을 적용한다는것 같다.
- WHERE절은 개별행에 적용됩니다.따라서 테이블의 개별행에 WHERE절이 먼저 적용된 후, 이후 GROUP BY로 조건을 만족하는 행만 그룹화가 된다.
= 설명하자면 WHERE절은 행별로 조건을 적용 할 수 있다. WHERE과 GROUP BY를 함께쓰면, WHERE조건을 탄 행들을 그룹화 할수 있다.
반면, HAVING과 GROUP BY를 사용하면 우선 그룹화를 진행 한 후, 그룹별로 조건을 적용한다는 의미인것 같다.
select job_id --job_id별로 평균 임금을 구하라.
,avg(salary) salary
from employees
group by job_id;
group by절 사용시. group by절에 사용한 컬럼이나, 그룹함수만 조회할 컬럼으로 올 수 있다.
3. 변환함수
to_char(): 숫자, 날짜를 문자열로 변환 할 수 있게 해준다.
=> date 타입을 지정된형식의 문자열로 변환 가능하다.
select sysdate
,to_char(sysdate, 'YYYY-MM-DD') as char타입날짜
from dual
//3자리씩 ,를표시하고 맨앞에 $표시 붙이기
select to_char(50000000, '$999,999,999') from dual
//07년에 입사한 사원의 목록을 출력
//이처럼 date타입의 컬럼에서 년도만 추출하는것이 가능하다.
select first_name
,hire_date
from employees
where 1=1
and to_char(hire_date, 'yyyy') = 2007;
4.nvl()
null값을 대체 할 수 있는 함수.
5.Case와 When으로 조건 분류
case와 when을 이용해서 분류 할 수 있다.
case에 조건을 걸 컬럼을 두고
when에 조건과 출력할 내용을 둔다.
컬럼에서 나름의 if문인것 같다.
-- 각 사원의 이름과, 2001년에 입사한사람은 2001년입사, 2006년에 입사한사람은 2006년입사, 그외에는 그외라고 표시
select b.first_name,
case to_char(a.start_date, 'YYYY')
when '2001' then '2001년 입사'
when '2006' then '2006년 입사'
else '그외'
end "case"
from job_history a
,employees b
where 1=1
and a.employee_id = b.employee_id;
6.테이블 수정
-데이터를 제외하고 테이블 컬럼만 복사하기.
create table emp2 as select * from employees where 1=0
7.제약조건
check 제약조건 - 의도된 데이터만 들어가도록 테이블 생성
--gender 컬럼에 M 이나 F만 들어가도록 check제약조건 생성
ALTER TABLE employess
ADD CONSTRAINT gender_ck
CHECK(gender IN('M', 'F'));
PK 2개이상 설정 가능
- PK가 2개이상이라면 AND조건이다. 두개를 전부 만족해야 일치하는것. 하나라도 다르면 같은 값이 아니다.
- 주키가 7개가 이상인 경우도 있다... JOIN 힘듦..
-- 이름과 사원으로 주키를 생성하기.
ALTER TABLE employee
ADD CONSTRAINT emp_empno_pk
PRIMARY KEY(empno, ename)
8.JOIN의 단계
서로 연결이 되어있으면 JOIN이 가능하다. 없으면 연결되어있는 테이블을 한단계 거쳐서 다중으로 JOIN해야한다.
그래서 ER 다이어그램을 옆에 놓고 작업해야함.
조인 계획
1) 내가 원하는 데이터가 무엇인지 (컬럼이름) 나열한다
2) 나열한 데이터가 어느 테이블에 있는지 확인한다.
3) 여러테이블에서 각각의 테이블의 공통된 컬럼은 무엇인지 확인해야 한다. (FK이여야 한다)
SELF JOIN
OUTER JOIN
9.다중컬럼 다중로우
'Today I learned' 카테고리의 다른 글
HTTP request Parser 코드 분석(JAVA) (0) | 2019.04.22 |
---|---|
객체지향 자바스크립트. 그리고 프로토타입 (0) | 2019.04.10 |
컬렉션 프레임워크 그리고 Iterator, Enumeration (0) | 2019.04.05 |
Mybatis 동적쿼리작성 (0) | 2019.03.22 |
Ajax 406 error (0) | 2019.03.21 |
댓글