SQL 코드카타
문제 35
오랜 기간 보호한 동물
내 답안
SELECT I.ANIMAL_ID,
I.NAME
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE O.DATETIME IS NOT NULL
ORDER BY O.DATETIME - I.DATETIME DESC
LIMIT 2;
새롭게 알게 된 것
1. [ANSI SQL] ORDER BY에 사칙연산 넣을 수 있다.
예시
SELECT product_id,
price,
quantity
FROM products
ORDER BY price * quantity DESC;
2. [MySQL] 날짜 간 차이 구하기
설명
두 날짜 간의 차이를 사칙연산 기호 -로 구할 수 있다.
날짜의 형식이 DATETIME, DATE, TIMESTAMP인 경우 사용가능
날짜의 형식이 VARCHAR, INTEGER인 경우 사용 불가능
문법
SELECT date1 - date2
FROM table;
3. [MySQL] 날짜에 특정 값 더하기
설명
날짜에 년, 월, 일 등 더할 수 있다.
문법
-- '날짜'
SELECT '2020-03-10' + INTERVAL N YEAR/MONTH/DAY/HOUR/MINUTE/SECOND
-- 날짜 값이 포함된 COLUMN
SELECT DATE + INTERVAL N YEAR/MONTH/DAY/HOUR/MINUTE/SECOND
SQLD - Oracle 실습
COUNT(*) vs COUNT(column_name)
1. COUNT(*) 또는 COUNT(1)
NULL을 포함해서 모든 행을 센다.
2. COUNT(column_name)
특정 column에서 NULL인 값 제외하고 행을 센다.
집계 함수의 특징
1. COUNT(*)을 제외하고는 NULL 값은 제외한다.
2. 집계 함수는 WHERE 절에 올 수 없다.
WHERE vs HAVING
WHERE: 전체 데이터를 group으로 나누기 전, 조건으로 필터링
HAVING: group by로 그룹을 지은 상태에서 원하는 조건으로 필터링
쿼리 작성 순서
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT/OFFSET
쿼리 실행 순서
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT/OFFSET
ORDER BY
뒤에 아무것도 적지 않으면 기본 값은 오름차순(ASC)
DESC 적으면 내림차순
JOIN
일반적으로 행들은 기본키(PK)나 외래키(FK) 값의 관계에 대해서 JOIN이 성립한다.
어떤 경우에는 논리적인 값들의 연관만으로도 JOIN이 가능하다.
EQUI JOIN (등가 조인)
두 테이블 간 컬럼의 값들이 서로 같은 경우 두 데이터를 하나의 데이터로 합치는 JOIN
= 사용
문법
SELECT table1.column1
table2.column5
FROM table1, table2 -- EQUI JOIN
WHERE table1.column1 = table2.column2 -- EQUI JOIN
예시
SELECT e.ENAME,
e.JOB,
d.DNAME
FROM emp e, dept d -- EQUI JOIN
WHERE e.DEPINO = d.DEPINO -- EQUI JOIN
AND e.SAL - 3000
ORDER BY e.ENAME;
NON EQUI JOIN
두 개의 테이블 간 컬럼들이 서로 정확하게 일치하는 것이 아닌 특정 범위 내에 있는 경우
BETWEEN, >, >>, <, << 연산자 사용
설계상의 이유로 이를 수행하지 못하는 경우도 있다.
문법
SELECT table1.column1
table2.column5
FROM table1, table2 -- NON EQUI JOIN
WHERE table1.column1 > table2.column2 -- NON EQUI JOIN
3개 이상의 TABLE JOIN
문법
SELECT a.column1,
b.column2,
c.column3
FROM table1 a, -- JOIN
table2 b,
table3 c
WHERE a.column = b.column
AND b.column = c.column -- JOIN
표준 JOIN
ANSI/ISO SQL에서 규정
일반 집합 연산자

# 집합 연산자 주의사항
- 두 집합의 컬럼 수가 일치해야 한다.
- 두 집합의 컬럼 순서가 일치해야 한다.
- 두 집합의 각 컬럼의 데이터 타입이 일치해야 한다.
- 각 컬럼의 사이즈는 달라도 된다.
SELECT column1
FROM table1
UNION/UNION ALL/INTERSECT/MINUS
SELECT column2
FROM table2;
1. UNION
1) UNION
합집합
공통 교집합의 중복 제거
시스템 부하 주는 정렬 작업 발생
2) UNION ALL
공통 집합 중복해서 그대로 보여줌
UNION보다 효율 좋음
UNION ALL 사용 권장
2. INTERSECTION
교집합
두 집합의 공통된 요소(공통 행) 추출
3. DIFFERENCE
차집합
첫 번째 집합에서 두 번째 집합과의 공통집합 제외한 부분 출력
4. PRODUCT (현업에서 거의 사용하지 않음)
곱집합
JOIN 조건 없을 때 발생가능한 모든 데이터 조합
양쪽 테이블에 자료가 M개, N개 있으면 M*N개 자료 발생
대표적인 JOIN의 6가지 방식
1. INNER JOIN
JOIN 조건에서 일치하는 행만 반환
EQUI JOIN이라고도 함
문법
SELECT table1.column1,
table2.column2
FROM table1
(INNER) JOIN table2
ON table1.column = table2.column;
2. NATURAL JOIN
두 테이블 간 동일 이름인 모든 컬럼에 대해 INNER JOIN 수행
동일 이름이면서 데이터 유형이 같아야 한다.
Oracle에서만 지원, SQL Server에서는 지원하지 않음
문법
SELECT column1, column2
FROM table1
NATURAL JOIN table2;
3. USING 조건절
NATURAL JOIN에 FROM 절에서 USING 조건 이용
같은 이름 가진 컬럼에서 원하는 컬럼만 선택적으로 INNER JOIN 가능
Oracle에서만 지원, SQL Server에서는 지원하지 않음
문법
SELECT column1, column2
FROM table1 JOIN table2
USING (EXPR); -- 보통은 ON절 사용
4. ON 조건절
명시적으로 JOIN 조건을 지정하는 데 사용
컬럼 이름이 달라도 JOIN 조건을 사용할 수 있다.
문법
SELECT a.column1,
b.column2
FROM table1 a JOIN table2 b
ON a.column = b.column;
5. CROSS JOIN
PRODUCT의 개념
테이블 간 JOIN 조건 없는 경우 생길 수 있는 모든 데이터의 조합
문법
SELECT column1, column2
FROM table1 CROSS JOIN table2;
6. OUTER JOIN
OUTER 집합을 기준으로 JOIN
OUTER 테이블은 모두 출력되고 INNER 테이블은 OUTER 테이블과 매칭되는 데이터만 출력
1) LEFT OUTER JOIN
테이블 A와 B가 있을 때 테이블 A가 기준이 되어 먼저 데이터를 읽어온다.
그 후, B의 데이터를 읽어온 다음 A와의 JOIN 칼럼과 비교
같은 값이 있다면 해당 데이터를 가져온다.
값이 없다면 NULL 값으로 없는 데이터를 채워 넣은 테이블을 생성한다.
INNER JOIN 처럼 OUTER JOIN 도 OUTER 키워드를 생략할 수 있다.
2) RIGHT OUTER JOIN
LEFT OUTER JOIN과 동일하나 테이블 B가 기준이 되는 것이 다르다.
3) FULL OUTER JOIN
좌측 테이블과 우측 테이블이 동시에 기준이 되는 JOIN
LEFT OUTER JOIN과 RIGHT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일
데이터 분석 Python 종합반 - 1주 차
1. 출력문
코드상의 결과물 출력시켜 사람이 직접 그 결과물 볼 수 있도록 함
용도
코드 작성 시 확인 용도로 사용
에러 수정 위해 점검하기 위해 사용
데이터 시각화 위해 사용
print 함수
print()
여러 값을 넣을 때는 , 사용
2. 변수
변수란?
변수는 값을 저장하는 공간
사용하기 전에 선언되어야 한다.
# 변수 선언과 할당
x = 23527914
y = 'Lucy'
기초 분석 스터디 피드백
피드백
- EDA 과정이 잘 보이지 않음
데이터셋, 이 데이터가 어떻게 구성되어 있는지에 대한 내용이 부족했다.
- 데이터 결측치 체크도 하는 것 좋다.
- SQL 연습이 메인인 과제라서 다양한 쿼리로 연습 많이 한 것 좋다.
- 다른 조는 '가설수립 - 분석 - 검증' 과정으로 진행했다.
- 데이터 자체의 특성도 중요하다.
화장품 데이터와 금융 데이터는 같은 외부 요인의 영향권 아래라도 영향의 정도가 다를 것이다.
- 데이터를 숫자로만 보지 않고, 현실의 데이터를 확인하는 작업 한 것 좋다.
위치 데이터라면 단순 숫자가 아닌, 지도 직접 찾아보는 것
- 데이터 자체에서 근거가 부족해도, 다른 자료를 찾아서 인사이트를 찾을 수 있다.
- 대용량 데이터를 정제하는 등 핸들링하는 것 자체도 배워야 할 일이다.
- 페르소나를 설정해서 분석 시작하는 것 좋다.
내가 마케터라면 마케팅 전략을 통해 비즈니스에 기여하는 것이 목표일 것이다.
- 발표를 할 때도 페르소나를 설정해서 한다. 발표 대상에 따라 페르소나를 다르게 한다. 임원, 학생 등