wdwd
데이터베이스 본문
▶ null
1. null값은 연산 안된다 -> ifNull()
2. null값은 비교할 수 없다 -> is | is not
3. null값은 그룹함수(count)에서 제외된다.
4. null값은 정렬하게 되면 최소값으로 정렬된다
# 보너스가 없는(자격없음을 의미) 사원의 이름과 직책을 출력하세요
select name, title from s_emp where commision_pct is null;
# 사원의 전체 인원수를 출력...(Alias : 전체사원수)
select count(*) 전체사원수 from s_emp;
# 보너스 받는 사원의 인원수를 출력...(Alias : 보너스받는 사원)
select count(commission_pct) "보너스받는 사원"
from s_emp;
select count(commission_pct) '보너스받는 사원' from s_emp;
▶ count(*)
괄호에는 기본키 같이 중복이 안되는 속성을 넣으면 됨
count - 행을 리턴
* - 전체 컬럼을 뜻함
count(컬럼)
컬럼의 행의 수를 리턴함
count(*) = count(name)
count(*) = count(-1)
# 사원테이블에서 급여가 가장 많은 사람이 위에 나타나게 출력
select name, salary from s_emp order by salary desc;
# 최고의 급여를 받는 상위 4명만 출력
select name, salary from s_emp order by salary desc limit 4;
select name, salary from s_emp order by salary desc limit 0,4;
-> 첫번째 인덱스가 0,
-> 4가 의미하는 것 : 개수★★
# 월급을 가장 많이 받는 사람 중 상위 세번째인 사람 출력
select name, salary from s_emp order by salary desc limit 2,1;
# 월급을 가장 많이 받는 사람 중 상위 두번쨰부터 3명인 사람 출력
select name, salary from s_emp order by salary desc limit 1,3;
# 월급을 가장 많이 받는 사람 중 상위 3명인 사람 출력
select name, salary from s_emp order by salary desc limit 0,3;
날짜함수는 책 안봐도 됨- 책은 오라클 기반이라 헷갈림
- 데이터베이스 import하는 방법
DDL - CREATE, DROP, ALTER(구조변경)
DML - INSERT, DELETE, UPDATE, MERGE...
데이터베이스 구성요소 = ERD 구성요소
Foreign Key를 설정함으로써 관계형데이터베이스의 관계를 설정할 수 있다.
Foreign Key는 NULL값 입력 가능
ex) scott이 사원인데 아직 부서배치가 안될 수도 있음
NULL값 - 자격 없음(다른 부서) or 확정 안 된 것(신입 사원)
TRUNCATE - 구조를 남기고 지움, 데이터를 잘라냄(데이터를 싹뚝 걷어내는 것)
DELETE - 구조를 남기고 지움, 모든 행을 다 돌면서 행을 삭제(한 줄, 한 줄 제거)
INSTR(문자열, '찾는 문자열') -- 문자열 중에서 찾는 문자열의 위치값을 출력
SELECT INSTR(title, '영') FROM s_emp;
0 - 0이라는 문자가 포함되어 있지 않다
1 - 0이라는 문자가 포함되어 있다
전부다, 그룹핑 안한것, 값은 여러개 나옴
데이터 타입 3가지 - 숫자, 문자, 날짜
그룹함수 중에서 숫자 데이터 타입에만 적용되는 그룹함수 -> sum, average
▶ group by
그룹함수에 포함되지 않는 column이 group by 뒤에 나와야 함
그룹을 세분화할 때 사용
ex) 2반의 몸무게 평균을 남, 여 별로 나눌 때
▶ having
그룹핑 된것 중에서 뽑는것
구하고 나서 거기서 뽑는거는 having
2반에서 몸무게 평균을 구하는데 남자를 뺌 =여자의 평균 몸무게를 구하겠다 -> where
2반에서 몸무게 평균을 구했음 -> 그 중에서 80kg이 넘으면 과체중을 출력하겠다 -> having
forign key - on delete, cascade까지 알아야 됨
▶구문순서
1. SELECT
2. FROM
3. WHERE
4. GROUP BY
5. HAVING
6. ORDER BY
▶실행순서
1. 발췌 대상 테이블을 참조한다. (FROM)
2. 발췌 대상 데이터가 아닌 것은 제거한다. (WHERE)
3. 행들을 소그룹화 한다.(GROUP BY)
4. 그룹핑된 값의 조건에 맞는 것만을 출력한다. (HAVING)
5. 데이터 값을 출력/계산한다. (SELECT)
6. 데이터를 정렬한다. (OREDER BY)
▶서브쿼리
서브쿼리 - 메인 쿼리, 서브 쿼리로 나뉨
서브쿼리로는 select만 온다
서브쿼리가 나온 결과로 특정한 값이 나와야 함
서브쿼리가 먼저 실행되어야 함(서브쿼리는 괄호로 싸져야 함)
▶스칼라 서브쿼리
서브쿼리 실행결과로 1행 1열이 나오는 것
▶서브쿼리 실행 결과가 1개 -> 단일 연산자(>, =)와 비교 가능
서브쿼리 실행 결과가 여러개 -> 다중행 연산자(IN)와 비교해야함
▶having절을 사용하면 다중행 연산자 안쓰고 >(단일행 연산자) 사용 가능
having절을 안쓰면 다중행 연산자 사용해야함 -> ALL연산자 사용해야함!!
▶having을 썼다 = 하나만 뽑아내겠다 -> 단일행 연산자 사용 가능
where을 썼다 = 여러개를 뽑아내겠다 -> 다중행 연산자 사용 가능
▶서브쿼리에서 나온 값을 메인쿼리가 다시 돌리기 때문에 굳이 정렬안해도 됨
▶Join
여러 테이블에서 값을 가져와야함 -> Join 사용
Join 조건을 안주게 되면 Cartesian Product가 발생 - 조인 조건을 안줬거나 | 잘못준 경우
▶Join
1. 하나 이상의 테이블로부터 데이타를 질의하기 위해서 조인을 사용
2. where절에서 조인조건을 작성
3. 하나 이상의 테이블에 동일한 컬럼명이 있을때(외래키) 컬럼명 앞에 테이블의 알리아스를 지정
- 조인의 종류
- Equi Join :: =연산자를 사용
- Self Join :: 하나의 테이블을 자체적으로 조인함
- Outer Join(종류 문제로 나올수 있음!!)
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
- FULL OUTER JOIN
- FULL OUTER JOIN은 mysql에서 지원 안한다. -> union 결합연산자를 사용
View : 테이블의 자료를 가지고 하나의 창을 만드는 것
View의 생성,변경,삭제 모두 테이블과 동일하게 가능!!