└── README.md
/README.md:
--------------------------------------------------------------------------------
1 | DATABASE
2 | ============
3 |
4 | YUL
5 | ------
6 | * Author - Min Yul
7 | * 개인 개발 [블로그](https://velog.io/@minyul)
8 |
9 |
10 | 계획
11 | -------
12 | * 데이터베이스 기술 모음 저장소 [ 개발블로그에 링크 및 README에 정리를 할 계획 ]
13 | * 공부하는 책 목록 : real mysql, 친절한 sql 튜닝, MySQL 퍼포먼스 최적화, SQL 코딩의 기술
14 | -------
15 |
16 |
17 | ### 개발 [블로그](https://velog.io/@minyul) 정리 모음
18 |
19 | #### velog
20 | * [2021-06-27] Mysql Query Between 과 >=, <= 성능 차이 비교 ( 더미데이터 50만 ) [BLOG에 정리한 부분](https://velog.io/@minyul/Mysql-Query-Between-%EA%B3%BC-%EC%84%B1%EB%8A%A5-%EC%B0%A8%EC%9D%B4-%EB%B9%84%EA%B5%90-%EB%8D%94%EB%AF%B8%EB%8D%B0%EC%9D%B4%ED%84%B0-50%EB%A7%8C)
21 | * [2021-06-28] Cluster Index vs Non-Cluster Index 이론 및 성능 비교 ( JPA + MYSQL )[BLOG에 정리한 부분](https://velog.io/@minyul/Cluster-Index-vs-Non-Cluster-Index-%EC%9D%B4%EB%A1%A0-%EB%B0%8F-%EC%84%B1%EB%8A%A5-%EB%B9%84%EA%B5%90-JPA-MYSQL)
22 | * [2021-06-29] MySQL TimeZone 설정 - serverTimezone=Asia/Seoul 로 수정할 때 [BLOG에 정리한 부분](https://velog.io/@minyul/MySQL-TimeZone-%EC%84%A4%EC%A0%95-serverTimezoneAsiaSeoul-%EB%A1%9C-%EC%88%98%EC%A0%95%ED%95%A0-%EB%95%8C)
23 | * [2021-07-04] MySQL의 데이터 흐름 및 특징 - 답이 아닌 책을 읽으면서 나의 머리에 있는 흐름을 정리한 글 [BLOG에 정리한 부분](https://velog.io/@minyul/MySQL%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%9D%90%EB%A6%84-%EB%B0%8F-%ED%8A%B9%EC%A7%95-%EB%8B%B5%EC%9D%B4-%EC%95%84%EB%8B%8C-%EC%B1%85%EC%9D%84-%EC%9D%BD%EC%9C%BC%EB%A9%B4%EC%84%9C-%EB%82%98%EC%9D%98-%EB%A8%B8%EB%A6%AC%EC%97%90-%EC%9E%88%EB%8A%94-%ED%9D%90%EB%A6%84%EC%9D%84-%EC%A0%95%EB%A6%AC%ED%95%9C-%EA%B8%80)
24 | * [2021-07-20] 쿼리 성능 진단은 최적화의 기초 [BLOG에 정리한 부분](https://velog.io/@minyul/%EC%BF%BC%EB%A6%AC-%EC%84%B1%EB%8A%A5-%EC%A7%84%EB%8B%A8%EC%9D%80-%EC%B5%9C%EC%A0%81%ED%99%94%EC%9D%98-%EA%B8%B0%EC%B4%88)
25 | * [2021-07-21] 스토리지 엔진 레벨에서의 접근법 [BLOG에 정리한 부분](https://velog.io/@minyul/%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80-%EC%97%94%EC%A7%84-%EB%A0%88%EB%B2%A8%EC%97%90%EC%84%9C%EC%9D%98-%EC%A0%91%EA%B7%BC%EB%B2%95)
26 | * [2021-07-22] where 조건 이해 [BLOG에 정리한 부분](https://velog.io/@minyul/Where-%EC%A1%B0%EA%B1%B4-%EC%9D%B4%ED%95%B4)
27 | * [2021-12-14] MySQL Transaction Isolation Level ( Real MySQL 8.0 ) [BLOG에 정리한 부분](https://velog.io/@minyul/MySQL-Transaction-Isolation-Level-Real-MySQL-8.0)
28 |
29 | #### naver
30 | * [2021-01-17] FK로 인해 삭제가 되지 않을 때 [BLOG에 정리한 부분](https://blog.naver.com/ggomjae/222210143484)
31 | * [2021-03-12] 날짜 더미데이터 및 쿼리 [BLOG에 정리한 부분](https://blog.naver.com/ggomjae/222272961474)
32 | * [2020-03-31] Join에 대한 정리 [BLOG에 정리한 부분](https://blog.naver.com/ggomjae/221883631299)
33 | * [2020-03-07] Group by에 대한 흐름 정리 [BLOG에 정리한 부분](https://blog.naver.com/ggomjae/221842203247)
34 |
35 | ### 프로그래머스 SQL 문제
36 | 1 ) ```SELECT```
37 |
38 | ```mysql based
39 | SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID
40 | SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC
41 | SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION = 'Sick' ORDER BY ANIMAL_ID
42 | SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION != 'Aged' ORDER BY ANIMAL_ID
43 | SELECT ANIMAL_ID, NAME, DATETIME FROM ANIMAL_INS ORDER BY NAME ASC, DATETIME DESC
44 | SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1
45 | ```
46 | * 만약 ```LIMIT 4,6``` 라면 5부터 6개 추출
47 |
48 |
49 |
50 | 2 ) ```SUM``` ```MAX``` ```MIN```
51 |
52 | ```mysql based
53 | SELECT ANIMAL_ID, MAX(DATETIME) AS 시간 FROM ANIMAL_INS
54 | SELECT DATETIME AS 시간 FROM ANIMAL_INS ORDER BY DATETIME limit 1
55 | SELECT count(*) AS count FROM ANIMAL_INS
56 | SELECT COUNT(distinct NAME) FROM ANIMAL_INS
57 | ```
58 | * 중복, NULL 제거 * -> ```distinct```
59 |
60 |
61 | 3 ) ```GROUP BY```
62 |
63 | ```mysql based
64 | SELECT ANIMAL_TYPE, count(*) AS count FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE
65 | SELECT NAME, COUNT(*) AS COUNT FROM ANIMAL_INS GROUP BY NAME HAVING COUNT(NAME)>= 2 ORDER BY NAME
66 | SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <= 19 GROUP BY HOUR(DATETIME) ORDER BY HOUR(DATETIME)
67 |
68 | ```
69 | * ```COUNT(*)``` : 조회된 전체행 건수를 반환한다
70 | * ```COUNT(컬럼)``` : 컬럼의 값이 NULL인 행은 카운트 하지 않는다
71 | * ```COUNT(DISTINCT 컬럼)``` : 컬럼 값을 중복제거하고, 컬럼의 값 건수를 반환한다
72 |
73 |
74 |
75 | 4 ) ```IS NULL```
76 |
77 | ```mysql based
78 | SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL ORDER BY ANIMAL_ID
79 | SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL ORDER BY ANIMAL_ID
80 | SELECT ANIMAL_TYPE, IFNULL(NAME,'No name') AS NAME, SEX_UPON_INTAKE FROM ANIMAL_INS ORDER BY ANIMAL_ID
81 | ```
82 | * ```IFNULL``` 중요
83 |
84 |
85 |
86 | 5 ) ```JOIN```
87 |
88 | ```mysql based
89 | SELECT B.ANIMAL_ID, B.NAME FROM ANIMAL_INS A RIGHT JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID WHERE A.ANIMAL_ID IS NULL ORDER BY ANIMAL_ID
90 | SELECT A.ANIMAL_ID, A.NAME FROM ANIMAL_INS A JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID WHERE A.DATETIME > B.DATETIME ORDER BY A.DATETIME
91 | SELECT A.NAME, A.DATETIME FROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID WHERE B.DATETIME IS NULL ORDER BY A.DATETIME LIMIT 3
92 | SELECT B.ANIMAL_ID, B.ANIMAL_TYPE, B.NAME FROM ANIMAL_INS A JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID WHERE A.SEX_UPON_INTAKE LIKE 'Intact%' AND (B.SEX_UPON_OUTCOME LIKE 'Spayed%' OR B.SEX_UPON_OUTCOME LIKE 'Neutered%') ORDER BY B.ANIMAL_ID
93 | ```
94 |
95 |
96 |
97 | 6 ) ```String``` ```DATE```
98 |
99 | ```mysql based
100 | SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty') ORDER BY ANIMAL_ID
101 | SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE NAME LIKE '%el%' AND ANIMAL_TYPE = 'DOG' ORDER BY NAME
102 | SELECT ANIMAL_ID, NAME, CASE WHEN SEX_UPON_INTAKE LIKE 'Neutered%' THEN 'O' WHEN SEX_UPON_INTAKE LIKE 'Spayed%' THEN 'O' ELSE 'X' END AS 중성화 FROM ANIMAL_INS ORDER BY ANIMAL_ID
103 | SELECT * FROM (SELECT A.ANIMAL_ID, A.NAME FROM ANIMAL_INS A, ANIMAL_OUTS B WHERE A.ANIMAL_ID = B.ANIMAL_ID ORDER BY A.DATETIME - B.DATETIME) WHERE ROWNUM <= 2
104 | SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME,'%Y-%m-%d') AS 날짜 FROM ANIMAL_INS ORDER BY ANIMAL_ID
105 | ```
106 | * ```CASE WHEN THEN ELSE END``` 중요
107 | * ```A.DATETIME``` - ```B.DATETIME```
108 | -------
109 |
--------------------------------------------------------------------------------