└── 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 | --------------------------------------------------------------------------------