관계형 데이터 모델링 - 논리적 데이터 모델링에 관한 영상
업무파악 -> 개념적 데이터 모델링 -> 논리적 데이터 모델링 -> 물리적 데이터 모델링
Entity => Table
Attribute => Column
Relation => PK,FK
ER Master
ermaster.sourceforge.net
이클립스 사용
지난 시간 복습
DataBase(DB)
공유되어 사용될 목적으로 통합 저장, 관리되는 데이터
검색과 갱신등을 효율적으로 하기 위해 구조화된 데이터
관련된 테이블들의 집합(테이블 폴더)
테이블(Table)
사물이나 개념의 본질적인 속성을 모아서 표로 만든것.
사물이나 개념을 표현하는 단위
ex) 학생(사물, 개념) - 학번, 이름, 전공(속성)
테이블은 엑셀 파일과 비슷하다.
DBMS(DataBase Management System)
데이터베이스를 체계적으로 관리할 수 있도록 기능을 제공하는 프로그램
대표적인 DBMS : Oracle, MySql, MsSql
SQL(Structed Query Language)
DBMS를 다루기 위한 표준화된 언어 체계
--
SQLyog 접속시
127.0.0.1 / localhost / * 가능
--
SQL 코드
<정렬 시>
낮은 > 높은 -> 오름차순(asc) ascending 약자
높은 > 낮은 -> 내림차순(desc) descending 약자
<국적으로 연결>
select * from Customers order by Country asc;
select * from Customers order by Country desc;
<고객 번호로 정렬>
select * from Customers order by CustomerID asc;
select * from Customers order by CustomerID desc;
--
<산술연산>
select 1 + 2;
select 1 - 2;
select 1 * 2;
select 1 / 2;
select 1 % 2;
--
<비교연산 -> 결과가 참(1), 거짓(0)>
select 1 > 10;
select 1 < 10;
select 1 = 10;
select 1 != 10;
select 10 > 10;
select 10 >= 10;
--
<논리연산( 1 = TRUE, 0 = FALSE )>
not 논리값 뒤집기
select not FALSE;
and -> 두개의 논리값이 모두 참일 때 참으로 귀결. 그 외에는 거짓. 여러 조건을 동시 만족
select TRUE and FALSE;
select 1 < 10 and 1 > 5;
or -> 두개의 논리값이 모두 거짓일 때 거짓으로 귀결. 그 외에는 참. 여러 조건 중 하나라도 만족
select FALSE or FALSE;
select 1 < 10 or 1 > 5;
<논리연산 and, or 우선순위 = and > or>
select true and true;
select true or false and false; -> and 먼저 연산. 결과 참
select (true or false) and false; -> or 먼저 연산. 결과 거짓
<별명 붙이기>
select 컬럼 or 값 as 별명 from 테이블
between, in
between -> 사이값 표현
in -> 여러 값을 포함시킬때
<문자열 포함 여부>
select * from 테이블 where 컬럼 like "%문자열%" => 어디든 포함만 되면 OK
select * from 테이블 where 컬럼 like "%문자열"
=> 문자열로 끝나는 것만
select * from 테이블 where 컬럼 like "문자열%"
=> 문자열로 시작하는 것만
select * from 테이블 where 컬럼 not like "%문자열%"
=> 문자열로 시작하지 않는 것만
-------------------------
집계함수란 모든 행을 대상으로 하나의 결과
<sum(컬럼) -> 모든 행의 합>
select sum(Quantity) from OrderDetails;
<avg(컬럼) -> 모든 행의 평균>
select avg(Quantity) from OrderDetatils;
<max(컬럼) -> 모든 행중의 최대값>
select max(Quantity) from OrderDetails;
<min(컬럼) -> 모든 행중의 최소값
select min(Quantity) from OrderDetails;
select Quantity from OrderDetails order by Quantity desc;
---------------------------
일반함수 -> 모든 행 각각에 적용해서 각각의 결과 가 나옴
select *, FLOOR(Price) as price_int from Products;
<집계 함수를 사용할 때 주의할 점>
SQL의 순서상 WHERE에서는 집계함수를 사용해서는 안된다. WHERE에서는 행을 집계하는데 집계함수는 행의 개수를 줄이기 때문에 행을 집계하는 데 방해가 된다. 단, 일반 함수의 경우는 행의 개수가 그대로 유지 되기 때문에 사용 가능하다.
<SQL 실행 순서>
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
<각 단계의 역할>
FROM : 특정 테이블의 데이터를 읽어옴
WHERE : 읽어온 데이터의 행을 조건에 맞게 거름
GROUP BY : 행을 특정 컬럼의 값을 기준으로 같은 값끼리 한 그룹으로 합침
HAVING : GROUP BY 된 결과에서 조건에 맞게 거름
SELECT : 최종 집계된 행에서 필요한 컬럼만 선택
ORDER BY : 최종 집계된 컬럼을 대상으로 정렬 작업
----------------
CONCAT -> 문자열 붙이기
SELECT CONCAT('hi', 'my name is', 'cha!') AS greeting;
REPLACE -> 문자열 치환
SELECT REPLACE('SQL Tutorial', 'SQL', 'HTML');
SUBSTRING -> 문자열 자르기
SELECT SUBSTRING('SQL Tutorial', 5, 8) AS ExtractString;
SELECT SUBSTRING('CHA TAEJIN', 5,6) AS ExtractString;
SELECT SUBSTRING_INDEX('www.w3schools.com', '.', 3);
날짜 계산(ADD)
SELECT ADDDATE ('2017-06-15', INTERVAL 2 YEAR);
날짜 차이(DIFFERENT)
SELECT DATEDIFF('2017-06-25', '2017-06-15');
현재 날짜
SELECT NOW()
--------------
어떤 값이 정해짐에 따라 참거짓으로 귀결되는 구분값이 2개일 때. 50 보다 크면 비쌈. 그렇지 않으면 저렴
select *, if(price > 50, '비쌈', '저렴') from Products;
select *, CASE
WHEN price >= 50 THEN '비쌈'
WHEN price >= 20 THEN '적정'
ELSE '저렴'
END from Products;
-----------------
<중복 제거 및 그룹핑>
중복값 제거 - > 범주(그룹)화
select distinct Country from Customers;
distinct -> 중복 제거 -> 행을 합칠 때 다른 행들의 값을 지움. -> 단순히 범주만 보고 싶을 때
사용법 : select distinct[합치고싶은 컬럼] from [테이블] where [조건] order by[정렬컬럼]
상품의 카테고리 범주 확인(중복값 제거)
select CategoryID from Products order by CategoryID;
select distinct CategoryID from Products order by CategoryID;
상품 카테고리 범주의 개수
select count(distinct CategoryID) from Products order by CategoryID;
group by -> 그룹화(범주화) -> 행을 합칠 때 다른 행들의 값을 기억 -> 그룹(범주)별로 집계하고 싶을 때
사용법 : select [컬럼] from [테이블] where[조건] group by[그룹화할컬럼] order by[정렬컬럼]
상품의 카테고리 범주별 집계 확인
카테고리별 상품 갯수
select CategoryID from Products group by CategoryID order by CategoryID;
select CategoryID, count(CategoryID) from Products group by CategoryID order by CategoryID;
카테고리별 평균 가격
select *, avg(price) from Products group by CategoryID;
그룹핑을 사용하는 예시
도시별 초등학교수 현황
학생별 평균점수 현황
국가별 gdp 현황
연도별 출생수 현황