MySQL
-
[MySQL] CHAR VARCHAR TEXTMySQL 2024. 10. 1. 01:13
[CHAR] 고정형 글자를 한개를 넣든 두개를 넣든 항상 8바이트의 공간을 차지 그래서 INSERT나 UPDATE가 일어나면 일단 DB에 밀어넣고 남는 부분을 공백으로 채움 [VARCHAR(VARIABLE CHAR)] 가변형 글자를 한개 넣으면 1바이트, 2개를 넣으면 2바이트로 바뀌어서 저장됨 즉 공간을 필요한 만큼만 차지하게 만들어줌 즉 VARCHAR은 INSERT나 UPDATE가 있을때 현재 자신이 차지하고 있는 영역이 얼마인지 확인하고 부족한 경우 더 할당하고 남으면 줄여서 INSERT 함. [TEXT] 가변형길이 제한이 없다 [CHAR VS VARCHAR?] 차이점 CHAR의 경우 데이터가 낭비될 수 있지만 추후 연산이 필요없기 때문에 검색속도 및 읽히는 속도가 VARCHAR에 비해 빠르..
-
[MySQL] WHERE IN 서브쿼리MySQL 2024. 9. 17. 16:12
subquery는 매우 강력하다 WHERE IN 절에 여러개의 조건을 명시할 수 있다즉, “WHERE 칼럼명 = 값 하나”이런 식 말고 WHERE 칼럼명 IN ( SELECT 뭐시기 뭐시기 )이런식으로서브쿼리를 WHERE 절에서도 사용할 수 있다는 것이다!1. 서브쿼리의 결과가 스칼라 값일때 WHERE 칼럼명 = (서브쿼리) 2. 서브쿼리의 결과가 튜플일때 WHERE (칼럼명, 칼럼명) = (서브쿼리) // 서브쿼리 결과가 1개 일때WHERE (칼럼명, 칼럼명) IN (서브쿼리) // 서브쿼리 결과가 1개 이상일때https://school.programmers.co.kr/learn/courses/30/lessons/293261 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution..
-
[MySQL] 꿀팁 몇가지MySQL 2024. 9. 16. 20:41
[WITH AS 로 CTE로 테이블 미리 빼놓기]WITH ap AS ( SELECT * FROM AIR_POLLUTION WHERE LOCATION1 = '경기도' AND LOCATION2 = '수원')// ROUND 함수 -> 소수 셋째자리에서 반올림이면 두번째 자리 까지니까 2SELECT YEAR(YM) AS YEAR, ROUND(AVG(PM_VAL1),2) AS 'PM10', ROUND(AVG(PM_VAL2),2) AS 'PM2.5'FROM apGROUP BY YEAR(YM)ORDER BY YEARWITH HE AS ( SELECT DEPT_ID, ROUND(AVG(SAL),0) AS AVG_SAL FROM HR_EMPLOYEES GROUP BY DEPT_ID)SEL..
-
[MySQL] DATE 관련MySQL 2024. 9. 16. 20:40
[DATE 타입] 날짜는 포함하지만 시간은 포함하지 않음YYYY-MM-DD 형식만 가능함 [DATETIME 타입]날짜와 시간을 모두 포함할때 사용YYYY-MM-DD HH:MM:SS 형식 [TIME 타입]시간만 포함HH:MM:SS [TIMESTAMP 타입]날짜와 시간을 모두 포함 [DATETIME vs TIMESTAMP] DATETIME은 문자형TIMESTAMP는 숫자형 DATETIME은 8바이트TIMESTAMP는 4바이트 DATETIME은 데이터값을 입력해주어야만 날짜가 입력됨TIMESTAMP는 데이터값 입력안해줘도 저장시에 자동으로 현재 날짜랑 시간이 입력됨 [DATE_FORMAT : 날짜 포맷팅]// 2024-10-15 10:15:00// 위에꺼가 2024-10-15 이렇게 출력됨SELECT A..
-
[MySQL] STRING 관련MySQL 2024. 9. 16. 20:40
[SELECT 문에서 CASE-END : 특정 칼럼을 조건에 따라 다르게 출력]새로운 칼럼을 정의하는 것이므로 SELECT에 넣어줘야함! SELECT BOARD_ID, WRITER_ID, TITLE, PRICE, CASE WHEN STATUS = 'DONE' THEN '거래완료' WHEN STATUS = 'RESERVED' THEN '예약중' ELSE '판매중' END AS STATUS FROM USED_GOODS_BOARDWHERE DATE(CREATED_DATE) = '2022-10-5'ORDER BY BOARD_ID DESC SELECT loan_number, amount, CASE WHEN p>..
-
[MySQL] 쿼리 실행 순서MySQL 2024. 9. 16. 19:18
SQL 문법들 사이에서 실행되는 순서가 있다어떠한 쿼리든 순서에 따라 실행되기 때문에 이러한 처리 순서를 파악하고 있어야만 성능 좋은 쿼리가 만들어진다 // 1. 테이블 명시FROM 테이블1JOIN 테이블2 ON 조건// 2. 명시된 테이블에서 조건으로 특정 엔티티들만 추출하기WHERE 조건// 3. 그룹으로 묶고 HAVING으로 특정 그룹들만 추출GROUP BY 조건HAVING 조건// 4. 원하는 칼럼들만 추출하기SELECT 칼럼명 (DISTINCT, IF NULL)// 5. 정렬하기ORDER BY, LIMIT 1. FROM : 쿼리 실행 순서 중 가장 먼저 실행되는 부분으로 지정 테이블의 모든 데이터를 가져온다2. JOIN ON : FROM 테이블 직후 실행되며 대상 테이블을 새로 구성해준다 3...
-
[MySQL] GROUP BYMySQL 2024. 8. 23. 15:21
[GROUP BY 핵심 포인트] 1. WHERE가 GROUP BY 보다 먼저다 따라서 미리 거를 놈들은 WHERE 절에서 거르자.SQL 실행 순서가 FROM - JOIN - WHERE - GROUP BY - HAVING 순이다. 2. GROUP BY 이후 SELECT 작업에서는 GROUP BY의 기준칼럼과 집계함수만 사용가능하다 3. GROUP BY 후 HAVING 절에서도 집계함수와 SELECT에서 새롭게 정의된 칼럼을 사용할 수 있다// SELECT에서 새롭게 정의된 AVERAGE 칼럼을 HAVING에서 쓰고 있는 모습SELECT SUM( CASE WHEN LENGTH IS NULL THEN 10 ELSE LENGTH END ..
-
[MySQL] 특정 칼럼이 최대인 레코드 조회MySQL 2024. 8. 18. 02:04
1. SELECT WHERE ( MAX )WHERE MAX 로 특정 값이 최대인 레코드의 PK 알아내고해당 ID에 맞는 레코드 SELECETSELECT CONCAT('/home/grep/src/',BOARD_ID,'/',FILE_ID,FILE_NAME, FILE_EXT) AS FILE_PATHFROM USED_GOODS_FILEWHERE BOARD_ID = ( SELECT BOARD_ID FROM USED_GOODS_BOARD WHERE VIEWS = (SELECT MAX(VIEWS) FROM USED_GOODS_BOARD))ORDER BY FILE_ID DESCSELECT CONCAT('/home/grep/src/',UGB.BOARD_ID,'/',FILE_ID, FILE_NAME, FI..