Database 분석 (1)
데이터베이스 분석
1일차 복습
SQL
JOIN
GROUP BY/HAVING/LIMIT/AGRESSION
데이터베이스를 배우는 이유
CSV는 작을 때만 가능
데이터를 정리된 구조로 안전하게 저장하는 시스템
Related DataBase Management System
데이터를 표로 확인
원자값(Atomic) 하나의 셀에는 하나의 값만
데이터베이스 기본 용어
Database
DBMS
RDBMS
Instance
Domain
Table
Row
Column
Schema
Entity Relationship Daigram
SQL 기초
Structured Query Language
관계형 데이터베이스에서 데이터를 저장, 검색, 수정 및 관리하기 위해 사용되는 표준화된 프로그래밍 언어
대용량의 데이터를 빠르고 효율적으로 처리할 수 있는 최적화된 성능 제공
SQL
Select 기본 구조
select column1, column2, ...
SELECT*
Where 조건문 기본
SELECT column1, column2,...
FROM table_name
WHERE 조건;
WERE height BETWEEN 140 AND 170;
조건에 맞는 행
=,<,<= BETWEEN, IN, LIKE, IS NULL, IS NOT NULL
SELECT * FROM patients
Where allergies not NULL
WHERE first_name LIKE 'A%'
SELECT * FROM patients
WHERE first_name LIke '%o%';
SELECT * FROM patients
WHERE first_name LIke '%e';
SELECT * FROM patients
WHERE city IN province_id;
WHERE city IN ('Toronto');
SELECT * FROM patients
WHERE city IN ('Toronto','Barrie');
WHERE birth_date >= '2005-01-01';
WHERE birth_date BETWEEN '2001-01-01' and '2005-01-01;
ORDER BY 기본
SELECT column1, column2, ...
FROM table_name
ORDER BY column ASC; 또는 DESC;
SELECT * FROM patient
ORDER BY birth_date;
SELECT * FROM patients
ORDER BY height DESC;
SELECT
FROM
WHERE 조건
ORDER BY column ASC;
SELECT*
FROM patients
WHERE province
SELECT * FROM patients
WHERE gender = 'M'
ORDER BY weight DESC;
SELECT * FROM patients
WHERE gender IS 'M'
ORDER BY weight DESC;
__________________________________________________________________________
SELECT*FROM patients
WHERE birth_date >= '1963-01-01' AND gender IS 'M';
SELECT*FROM patients
WHERE allergies IS NOT NULL AND height > 170;
SELECT*FROM patients
WHERE city IN ('Toronto','Ancaster','Hamilton')
ORDER BY birth_date ASC;
__________________________________________________________________________
JOIN
JOIN이 필요한 이유
단일 테이블로는 의료 데이터 표현 불가
병원 EMR 기본 구조 예
JOIN: ERD의 PK/FK 관계를 SQL에서 연결하는 것
INNER JOIN
SELECT ... FROM table_A
INNER JOIN table_B
ON A.key = B.key
SELECT*FROM patients
Inner Join province_names
On patients.province_id = province_names.province_id;
__________________________________________________________________________
SELECT patients.last_name From patients
INNER JOIN admissions on patients.patient_id = admissions.patient_id
SELECT
patients.first_name,
patients.last_name,
admissions.diagnosis,
doctors.specialty
FROM
patients
INNER JOIN admissions ON patients.patient_id = admissions.patient_id
INNER JOIN doctors ON admissions.attending_doctor_id = doctors.doctor_id;
__________________________________________________________________________
LEFT JOIN
SELECT A.col1, A.col2, B.col3 FROM table_A
LEFT JOIN table_B
ON A.key = B.key
왼쪽 (A)테이블의 모든 행은 반드시 출력
오른쪽(B) 테이블에 매칭되는 값이 있으면 채우고, 없으면 NULL로 표시
선택적 관계
SELECT patients.first name,
patients.last_name,
province_names.province_name
From patients
LEFT JOIN
__________________________________________________________________________
JOIN + WHERE
SELECT FROM
INNER/LEFT JOIN ON
WHERE
__________________________________________________________________________
SELECT patients.first_name,
patients.last_name,
province_names.province_id FROM patients
LEFT JOIN province_id on province_names.province_id = province_names.province_id;
WHERE province_id is 'AB'
__________________________________________________________________________
SELECT
patients.first_name,
patients.last_name,
province_names.province_id
FROM
patients
LEFT JOIN
province_names ON patients.province_id = province_names.province_id
WHERE
province_names.province_id = 'AB';
__________________________________________________________________________
SELECT
patients.first_name,
patients.last_name,
admissions.diagnosis,
FROM
patients
INNER JOIN admissions ON patients.patient_id = admissions.patient_id
WHERE diagnosis IS cancer
__________________________________________________________________________
SELECT
patients.first_name,
patients.last_name,
admissions.diagnosis
FROM
patients
INNER JOIN
admissions ON patients.patient_id = admissions.patient_id
WHERE
admissions.diagnosis = 'cancer';
__________________________________________________________________________
SELECT
patients.first_name,
patients.last_name,
admissions.diagnosis
FROM
patients
INNER JOIN
admissions ON patients.patient_id = admissions.patient_id
WHERE
admissions.diagnosis = 'Cancer';
__________________________________________________________________________
(추가) ALIAS 별칭 / DISTINCT
Alias: 별칭 -> 짧게 쓰기 가능
SELECT FROM
SELECT FROM AS
DISTINCT
SELECT DISTINCT column명 FROM table_name
______________________________________________________________________________
SELECT DISTINCT (diagnosis) FROM admissions;
______________________________________________________________________________
GROUP BY / HAVING / LIMIT / Aggregation
______________________________________________________________________________
GROUP BY
SELECT * FROM table_A
GROUP BY group_column;
데이터를 묶는 기준
성별/도시/의사별 /날짜별 등
GROUP BY는 SELECT 안에 있는 비집계 Column
SELECT * FROM table_A
GROUP BY
HAVING
LIMIT
___________________________________________________________________
SELECT*FROM patients
LIMIT 3;
___________________________________________________________________
select patients.first_name,
patients.last_name,
province_id FROM patients
WHERE
patients.province_id = 'NL';
___________________________________________________________________
SELECT *
댓글
댓글 쓰기