일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Tomek links
- Clustering 기반 이상탐지
- 병리 AI
- Meta heuristic
- 밀도 기반 이상탐지
- Sequence data
- Random Undersampling
- Generative modeling
- multi modal
- Data Imbalance
- 거리 기반 이상탐지
- PM4Py
- Inatance segmentation
- Condensed neares neighbor rule
- 프로세스 마이닝
- Petri net
- Digital Pathology
- XAI
- 국비지원교육
- Grad-CAM
- OCSVM
- Fixed Learning
- Text generation
- One-Sided Selection
- auto encoder
- SQL 데이터 분석 첫걸음
- Process Mining
- 딥러닝
- Gausian Density Estimation
- GAN
- Today
- Total
Create Opportunities
[패스트 캠퍼스] SQL 기초 강의 (2주차) 본문
Day 6
데이터 그룹화 (GROUP BY)
- 데이터를 그룹화해서 통계낼 수 있어야 한다.
- 고객 등급 별 매출 통계, 상품 카테고리별 실적 통계 등…
Ex) SELECT type FROM mypokemon GROUP BY type;
그룹에 조건 주기 (HAVING)
- HAVING 조건식 형식으로 사용 → 조건식에는 그룹 함수를 사용.
- GROUP BY로 묶은 조건 중 HAVING 조건에 해당하는 값만 가져와라.
다양한 그룹 함수 (집계 함수)
모두 SELECT, HAVING 절에서 사용 가능하다.
데이터를 그룹화한 후 (조건에 따라) 집계할 수 있는 함수들로 보면 된다.
- COUNT, SUM, AVG, MIN, AVG
문법 순서 : SELECT(5) → FROM(1) → WHERE(2) → GROUP BY(3) → HAVING(4) → ORDER BY
Day 7
조건 만들기 (하나만 - IF)
- Ex) 구매 금액 10억 이상 고객은 VVIP로 1억 이상이면 VIP로…
- SELECT 절에수 주로 사용 → 결과 값을 새로운 컬럼으로 반환
- IF(attack ≥ 60, ‘strong’, ‘weak’) AS attack_class → attack_class 컬럼 참이면 strong 거짓이면 weak 반환.
- IFNULL : 데이터가 NULL인지 아닌지를 확인해서 NULL이면 새로운 값 반환.
- Ex) IFNULL(name, ‘unknown’) AS full_name : 이름 없으면 full_name 컬럼 unknown으로 반환
조건 만들기 (여러개 - CASE)
SELECT name, attack
CASE
WHEN attack >= 100 THEN 'very strong'
WHEN attack >= 60 THEN 'strong'
ELSE 'weak'
END AS attack_class
FROM mypokemon;
함수 만들기
원하는 함수를 직접 만들 수 있다. 어떻게?
- CREATE FUNCTION
CREATE FUNCTION getAbility(attack INT, defense INT)
RETURNS INT
BEGIN
DECLARE a INT;
DECLARE b INT;
DECLARE ability INT;
SET a = attack;
SET b = defense;
SELECT a _ b INTO ability;
RETURN ability;
END
- MySQL 워크벤치에서는 함수 생성 권한 생성해야함.
예시
set global log_bin_trust_function_creators = 1;
delimiter //
create function isStrong(attack int, defense int)
returns varchar(20)
begin
declare a int;
declare b int;
declare isStrong varchar(20);
set a = attack;
set b = defense;
select case
when a+b>120 then 'very strong'
when a+b>90 then 'strong'
else 'not strong'
end into isStrong;
return isStrong;
end
// delimiter ;
select name, isStrong(attack, defense) as isStrong
from mypokemon;
Day 8
테이블 합치기 (JOIN)
원하는 데이터가 항상 같은 테이블에 있지 않을 수 있다. → 같은 의미를 가지는 컬럼을 기준으로 테이블 합칠 수 있다.
- INNER JOIN : 두 테이블 모두 가지는 값만 합치기.
SELECT * FROM mypokemon INNER JOIN ability ON mypokemon.number = ability.number;
- LEFT, RIGHT JOIN : RIGHT JOIN [테이블] 인 경우에 테이블에 있는 모든 값 사용.
- OUTER JOIN : MySQL에는 없음 → LEFT JOIN + RIGHT JOIN
- UNION 사용함 → 두 쿼리의 결과를 중복 제거하고 합쳐서 보여줌.
- CROSS JOIN : 두 테이블에 있는 모든 값 각각 합치기.
- ON 없어도 됨. → 두 테이블의 ROW 수의 곱만큼의 ROW 결과
- SELF JOIN : 같은 테이블끼리의 INNER JOIN을 의미함.
SELECT * FROM mypokemon AS t1 INNER JOIN mypokemon AS t2 ON t1.number = t2.number;
Day 9
여러 테이블 한 번에 다루기 (서로 다른 테이블의 값을 한 번에 가져오고 싶다면 ?)
합집합, 교집합, 차집합을 의미하는 것임.
- 합집합
- UNION : 동일한 값은 제외
- UNION ALL : 동일한 값 포함
- 두 쿼리의 결과 값을 합쳐서 보여줌.
- 마지막에 ORDER BY 작성할 수 있다.
Ex)
select name from mypokemon UNION ALL select name from friendpokemon;
Day 10
조건에 조건 더하기 (서브 쿼리)
- 하나의 쿼리 내 포함된 또 하나의 쿼리
- 반드시 괄호 안에 있어야 함.
- group by 절에서는 사용 불가함
- insert ,update delete 문에서도 사용 가능
- 세미콜론을 붙이지 않아도 된다.
SELECT절의 서브 쿼리 (스칼라 서브 쿼리)
- 반드시 결과값이 하나의 값이어야 한다.
Ex) select number, name, (select height from ability where number = 25) as height from mypokemon where name = ‘pikachu’;
FROM절의 서브 쿼리 (인라인 뷰 서브쿼리)
- 반드시 결과값이 하나의 테이블이어야 하며, 별명을 가진다.
Ex) select number, height_rank from (select number.rank() over(order by height desc) as height_rank from ability) as A where height_rank = 3;
WHERE절의 서브 쿼리 (중첩 서브쿼리)
- 반드시 결과값이 하나의 컬럼이어야 하며, 하나의 컬럼에는 여러 개의 값이 존재할 수 있다. (EXISTS 제외)
- 특별히, 비교 연산자 사용시에는 결과값이 하나의 값이 된다.
Ex) 평균 키보다 작은 포켓몬의 번호 select number from ability where height < (select avg(height) from ability);
Ex) 공격력이 모든 전기 포켓몬의 공격력보다 작은 포켓몬 번호 select number from ability where attack < all(select attack from ability where type=’electric’);
- ALL : <, > 와 사용함 → 서브쿼리의 최소, 최댓값보다 작고 큰지를 확인할 수 있음.
Ex) bug 타입 포켓몬이 있다면, 모든 포켓몬의 번호 가져와라.
select number from ability where exists(select * from ability where type = ‘bug’);
Day 11
데이터 삭제하기
delete from mypokemon where attack > 50;
데이터 수정하기
이름이 chikorita인 포켓몬에 대해서 type을 변경하겠다.
update from mypokemon set type = ‘normal’ where name = ‘chikorita’;
제약 조건
- 데이터 입력 규칙
- 테이블을 만들거나 변경하면서 설정
- create table 및 alter table 구문에서 설정 가능
종류
- NOT NULL : 컬럼에 NULL 저장할 수 없다.
- UNIQUE : 컬럼의 값들은 서로 다른 값을 가져야 한다.
- DEFAULT : 입력값 없을 시 기본값 설정.
- PRIMARY KEY : 해당 컬럼은 기본 키다.
- FOREIGN KEY : 해당 컬럼은 외래 키다.
Ex) create table new_mypokemon(
number INT PRIMARY KEY,
name VARCHAR(20) UNIQUE,
type VARCHAR(20) NOT NULL,
attack INT DEFAULT 0,
defense INT DEFAULT 100,
FOREIGN KEY(number) REFERENCES mypokemon(number)
);
권한과 DCL
- DDL : 데이터 정의어
- DML : 데이터 조작어
- DCL : 데이터 제어어
- TCL : 트랜잭션 제어어
root 사용자(모든 데이터/모든 기능 사용)
다른 사용자들은 데이터에 대한 접근 권한을 명시할 수 있다.
Ex)
USE mysql; select user, host from user;
사용자 목록 조회할 수 있다.
- 사용자 생성 : create user [이름]@[ip 주소];
- 비밀번호와 함께 생성 : create user [이름]@[ip 주소] identified by “[사용자 비밀번호]”;
- 사용자 삭제 : drop user [이름];
- 권한 부여 : grant [권한] on [DB 명].[Table 명] to [이름]@[ip 주소];
- 권한 삭제 : revoke [권한] on [DB 명].[Table 명] from[이름]@[ip 주소];
- 권한 적용 : flush privileges;
트랜잭션과 TCL
트랜잭션 : DB의 데이터 상태를 바꾸는 작업 묶음
쿼리 실행 이후에 [트랜잭션 확정 or 트랜잭션 이전으로 돌아가기] 선택할 수 있다.
트랜잭션 시작 : START TRANSACTION;
확정 : COMMIT;
이전으로 돌아가기 : ROLLBACK;
트랜잭션 내에 특정한 저장지점 생성 : savepoint A;
→ rollback to [세이브포인트 이름];
!! 국비지원교육_SQL 데이터 분석 첫걸음 !!
'SQL' 카테고리의 다른 글
[Hacker Rank] 231206 (0) | 2023.12.06 |
---|---|
[패스트 캠퍼스] SQL 기초 강의 (1주차) (1) | 2023.03.15 |