Back-End/Database, SQL16 [MySQL] 페이징 - LIMIT, OFFSET 지난 프로젝트에서 게시판 페이징을 뒷단에서 구현하지 않고 앞단에서 구현했었습니다. 개발 시점과 테스트시에는 아무런 문제가 없었지만 유저가 유입되고 게시글이 많이 쌓이게 되면 성능에 문제가 발생할 것이 분명합니다.(사실 말도 안 되는 개발쇼를 했던 것이다...) 리팩토링을 위해 MySQL 페이징 처리 관련 학습한 것을 정리합니다. MySQL 페이징은 LIMIT과 OFFSET으로! LIMIT : 가져올 개수 OFFSET : 가져오는 시작점(기입된 숫자보다 +1된 행부터 가져옵니다.) SELECT * FROM post LIMIT 10 OFFSET 0; #(1번째부터 10개를 가져옵니다.) SELECT * FROM post LIMIT 5 OFFSET 2; #(3번째부터 5개를 가져옵니다.) OFFSET을 사용하.. 2023. 3. 30. [MySQL] GROUP BY와 ONLY_FULL_GROUP_BY MySQL로 쿼리를 짜던 중 의구심이 들었다. GROUP BY절에 언급되지 않은 컬럼은 SELECT에 기술할 수 없는데 왜 내 쿼리는 작동하는 거지??? SELECT * FROM meal_pass_serial mps INNER JOIN meal_pass mp ON mps.meal_pass_uuid = mp.uuid WHERE mps.user_uuid IS NULL GROUP BY mps.meal_pass_uuid; chatGPT에게 여쭤보았다. 'ONLY_FULL_GROUP_BY' 모드는 처음 들어보는데 바로 조회해 봤다. SELECT @@SQL_MODE ONLY_FULL_GROUP_BY 모드가 없는 걸 보니 활성화되지 않았던 것이다.... 바로 활성화시키고 표준에 맞게 쿼리 짜도록 해야겠다! 2023. 2. 17. [MySQL] CASE를 알아보자! 주문내역을 관리하는 API를 만들었다. 주문상태 컬럼을 WAITING, RESERVED, CANCELED으로 관리하고 있고 그대로 뿌려준다. FE 개발자분께서 Response body에 추가적으로 WAITING일 때는 1을 나머지일 때는 0을 보내달라고 요청하셨다. 쿼리를 어떻게 수정할지 고민하다 CASE문을 알게됐고 적용할 수 있었다. SELECT *, (CASE WHEN reservation_status = 'WAITING' THEN 1 WHEN reservation_status = 'CANCELED' THEN 0 WHEN reservation_status = 'RESERVED' THEN 0 END) AS reservation_status_number, FROM reservation 2023. 2. 16. [MySQL] JSON_ARRAYAGG로 JSON 데이터 출력하기 MySQL의 JSON_ARRAYAGG 함수는 SQL 쿼리에서 JSON 배열을 생성할 때 사용할 수 있습니다. 용례는 다음과 같습니다. SELECT JSON_ARRAYAGG(column_name) FROM table_name; 위 쿼리는 'table_name' 테이블에서 'column_name' 컬럼의 값을 JSON 배열로 묶어 리턴합니다. 예시) CREATE TABLE fruits ( name VARCHAR(20) ); INSERT INTO fruits (name) VALUES ('apple'), ('banana'), ('cherry'); SELECT JSON_ARRAYAGG(name) FROM fruits; // [ "apple", "banana", "cherry"] 내가 사용한 쿼리 SELECT ur.. 2023. 2. 14. [MySQL] JSON 타입과 추출 imp_week 컬럼은 상점의 요일별 예약 가능 여부를 JSON 타입으로 저장하고 있다. JSON 타입으로 저장된 데이터는 MySQL에서 json_extract()로 추출할 수 있다. JSON_EXTRACT(컬럼명, '$[배열번호].Key명')의 형태로 사용한다. SELECT * FROM shop s INNER JOIN shop_reservation sr on s.uuid = sr.shop_uuid AND json_extract(imp_week, CONCAT('$[', WEEKDAY(NOW()), ']')) = 0 AND auth_student = 1 INNER JOIN shop_type st on st.uuid = sr.shop_type_uuid; 2023. 2. 9. [프로그래머스] SELECT_역순 정렬하기 -- 코드를 입력하세요 SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC; 2022. 12. 14. [프로그래머스] String, Date_이름에 el이 들어가는 동물 찾기 -- 코드를 입력하세요 SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE ANIMAL_TYPE = "Dog" AND NAME LIKE "%el%" ORDER BY NAME ASC; 2022. 12. 14. [프로그래머스] SUM, MAX, MIN_중복 제거하기 -- 코드를 입력하세요 SELECT COUNT(DISTINCT NAME) FROM ANIMAL_INS; 2022. 12. 14. [프로그래머스] SUM, MAX, MIN_동물 수 구하기 -- 코드를 입력하세요 SELECT COUNT(*) FROM ANIMAL_INS; 2022. 12. 14. [프로그래머스] SELECT_동물의 아이디와 이름 -- 코드를 입력하세요 SELECT ANIMAL_ID, NAME FROM ANIMAL_INS ORDER BY ANIMAL_ID ASC; 2022. 12. 14. 이전 1 2 다음