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 * 










댓글

이 블로그의 인기 게시물

베이스 캠프에서 (1)

베이스 캠프에서 (2)

Database 분석 (4)