-동물수 구하기: 중복제거, null값 제거
SELECT COUNT(DISTINCT NAME)
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
-LIMIT 1 : 값 하나만 반환
-고양이와 개는 몇마리 있을까
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE)
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE
SELECT NAME, COUNT(NAME) FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) > 1
ORDER BY NAME
SELECT HOUR(DATETIME) AS 'HOUR', COUNT(HOUR(DATETIME)) AS 'COUNT'
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <= 19
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME)
SET @hour := -1; -- 변수 선언
SELECT (@hour := @hour + 1) as HOUR,
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour) as COUNT
FROM ANIMAL_OUTS
WHERE @hour < 23
: 안해도 될거같은데 이런게 있다...
SELECT ANIMAL_TYPE,
IFNULL(NAME, "No name") AS NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
-없어진 기록찾기
SELECT OUTS.ANIMAL_ID, OUTS.NAME
FROM ANIMAL_OUTS OUTS
LEFT OUTER JOIN ANIMAL_INS INS
ON OUTS.ANIMAL_ID = INS.ANIMAL_ID
WHERE INS.ANIMAL_ID is NULL
ORDER BY OUTS.ANIMAL_ID
왼: OUTS
오: INS
-- 코드를 입력하세요
SELECT ANIMAL_INS.ANIMAL_ID, ANIMAL_INS.NAME FROM ANIMAL_INS
LEFT JOIN ANIMAL_OUTS ON ANIMAL_INS.ANIMAL_ID=ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_INS.DATETIME>ANIMAL_OUTS.DATETIME
ORDER BY ANIMAL_INS.DATETIME
SELECT A.NAME, A.DATETIME
FROM ANIMAL_INS A
LEFT JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.ANIMAL_ID IS NULL
ORDER BY A.DATETIME
LIMIT 3
SELECT B.ANIMAL_ID, B.ANIMAL_TYPE, B.NAME
FROM
(
SELECT *
FROM ANIMAL_INS A
WHERE SEX_UPON_INTAKE LIKE "%Intact%"
) SQ1, ANIMAL_OUTS B
WHERE SQ1.ANIMAL_ID = B.ANIMAL_ID
AND B.SEX_UPON_OUTCOME NOT LIKE "%Intact%"
-루시와 엘라찾기
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS
WHERE NAME in ("Lucy", "Ella" , "Pickle" , "Rogan" , "Sabrina" , "Mitty")
ORDER BY ANIMAL_ID
-이름에 EL이 들어가는 동물 찾기
-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
WHERE NAME LIKE "%el%" AND ANIMAL_TYPE="Dog"
ORDER BY NAME
-중성화여부 파악하기
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%'
THEN 'O'
ELSE 'X' END as '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS A, ANIMAL_OUTS B
WHERE A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY B.DATETIME-A.DATETIME DESC
LIMIT 2
-DATETIME에서 DATE로 변경
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') as '날짜'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
-순위함수
RANK: 1 222 5
DENSE RANK: 1 222 33
ROW NUMBER: 동점이어도 1 2 3 4 5
NTITLE: 뒤에 적는 숫자만큼 등분하기
PARTITION BY: 직급별 순위
NVL(columns, exp1) : NULL값이면 exp1값으로 변환
NULLIF
ROLLUP
CUBE : CUBE가 더 많이 보여줌
데이터모델링: 추상화/ 단순화/ 명확성
개념적모델링(ERD, 전사적관점, 추상화수준 높음)/ 논리적모델링(정규화를 통해 재사용성 높임)/물리적모델링
데이터모델의 3가지관점: 데이터/ 프로ㅔ스/ 데이터와프로세스
피터첸: ERD
엔터티: 유형/ 개념/ 사건
엔터티: 기본 중심 행위
데이터중복제거: 정규화
3층스키마: ANSI표준
논리적독립성; 개념스키마 무영향
물리적독립성: 응용프로그램 변화없음
외부스키마(사용ㅈ관점, 응용프로그램 접근)/개념스키마(통합데이터베이스구조,설계자관점)/내부스키마(개발자관점, 물리적구조)
관계차수: 카디널리티
1:N: 한명의고객은 여러계좌 개설가능
필수 |---0 선택
카디널리티: 하나의 릴레이션에서 튜플의 전체갯수
슈퍼키:: 유일성만족/ 최소성 불만족(NOT NULL)
후보키: 유일성/ 최소성 둘다 만족
정규화: 제5정규화까지 있지만 제3정규화까지 하는 편=> 테이블분리
이상현상
제1정규화: 원자성확보. 기본키설정
제2정규화: 기본키 2개이상,, 부분함수 종속성제거 (생략가능)
제3정규화: 기본키 제외한 칼럼간에 종속성(수직). 이행함수종속성 제거
: 주식별자과 연관성낮음
BCNF: 기본키를 제외하고 후보키가 잇는 경우,,, 중첩
NESTED LOOP: 이중FOR문... => 인덱스, 옵티마이저, 반정규화(데이터를 중첩)
반정규화: 조회속도는 향상, 데이터모델 유연성은 낮아짐
: 클러스터링
반정규화 기법
1)계산된칼럼추가
2)테이블수직분할
3)테이블수평분할 ( 파티션기법): 특정값의 범위에 따라 분할
4)테이블병합: 슈퍼타입/ 서브타임: 부모자식
트랜잭션: 작업처리단위
원자성: 전부또는 일부 실행
일관성: 모순되지 않을것
고립성: 연산중간결과 다른 트랜잭션 접근불가
연속성: 성공시 영구적 보장
CASCADE: 연속적으로 :: 참조무결성 준수가능
(ON DELETE CASCADE: 따라서 삭제)
VIEW: 뷰에 대한 입력, 수정, 삭제 시 제약발생/ 보안성 향상
뷰는 변경불가. 삭제 후 재생성 ALTER 불가
ORDER BY ENAME, SAL DESC: ENAME은 오름차순, SAL은 내림차순 정렬
NVL(col, 0) 널값이면 0으로 변환
NVL2(col, 1,0) 널값아니면1, 널값이면0으로 반환
COALESCE: 널값아니면 1 반환 (NVL과 유사)
COALESCE(NULL,2,1): 널값아니면 2반환..?
NULLIF(exp1, exp2): 두 값이 같으면 널값, 다르면 exp1 반환
GROUP BY
HAVING 조건
ORDER BY 정렬
COUNT() 널값 제외하고 계산
DISTINCT 고유한 값만
DECODE: IF 문
DECODE (DEPTNO, NULL, 전체합계, DEOPTNO): DEPTNO가 NUL값이면 전체합계, 아니면 DEPTNO 출력
CASE
WHEN THEN
ELSE
END
ROWNUM: 논리적인 일렬번호 행수 (ROW NUMBER)와 분명히 다름
결과집합에 따른 가상의 순번
ROWID: 신기한 고유 ID번호
WITH 서브쿼리
GRANT ON TO PREFERENCES: 제약조건
GRANT WITH ADMIN OPTION: 절대권한
REVOKE 회수
COUNT(*): NULL값 포항 행수
COUNT(MGR) : NULL값 제외한 행수 계산
UNION: 중복된 데이터를 제거하여 합친다. 정렬발생
UNION ALL: 중복없이 그냥 합친다
CROSS JOIN; 카테시안 곱
계층형조회: LPAD
LEVEL =1 의미없음(ROOT값) LEVEL=2 4칸 공백
계층형 조회에서 가장 상위레벨: 1
서브쿼리에서 FROM절: 인라인뷰
멀티로우섭쿼리: 겨롸가 모두 동일하면 TRUE: ALL
한행만 반환: 스칼라 섭쿼리
ROLLUP: GROUP BY 칼럼에 대해서 SUBTOTAL 만들어 줌
GROUPING: 계산되면 1반환 그렇지않으면 0반환
ROLLUP (DEPTNO,JOB): 부서별, 부서별직업별, 전체합계
CUBE(DEPTNO, JOB): 전체합계, 직업별, 부서별, 부서별직업별
GROUPING SETS(DEPTNO, JOB): 직업별합계, 부서별합계 :: 각각의 그룹으로: 서로관계가 없다
윈도우함수: 행과 행간의 관계 정의
SELECT WINDOW_FUNC(ARGS)
OVER (PARTITION BY col
ORDER BY WINDOWING절) FROM table
LAG: 이전행 가져옴
LEAD: 특정위치 행 가져옴
CUME_DIST: 현재행보다 작거나 같은건수 누적백분율 , 누적분포 0~1
PERCENT_RANK: 제일먼저 나온 늦게나온, 백분율로
NTILE: N등분
RATIO_TO_REPORT:SUM에 대한 행 별 칼럼 백분율을 소수점까지 조회
RANGE PARTITION: 값의범위 기준
LIST PARTITION: 특정값 기준
HASH PARTITION:\ GOTLGKATNDLDYD
-옵티마이저 조인: SQL 실행계획 수립
HASH JOIN: EQUI 조인에서만 실행된다, 동등조건으로 할 수 있다. 작은 테이블을 HASH 메모리에
NESTED_LOOP_JOIN: 프로그래밍에서 사용되는 중첩된 반복문과 유사한 방식으로 조인을 수행하는 방식. RANDOM ACCESS 가장많이 발생
SORT MERGE 조인: SORT_AREA라는 공간에 두개의 테이블을 로딩
HIGH WATER MARK: 데이터가 저장된 최상위 위치
LOCAL non-prefixed partition index: a,b로 다르면 non-prefixed
TRUNCATE: 로그기록 없이, 외래키 무결성 확인않고 LOCK 취득후 빠르게 삭제. 자동 커밋,ROLLBACK 불가
CONNECT BY: CONNECT BY ISLEAF는 LEAF면 1 아니면 0
교집합: INTERSECT
UPPER LOWER: 대문자 소문자
트랜잭션 특징이 아닌것은? 독립성
윈도우함수