📑 1. 문제설명❌ 2. 실패한 시도SELECT U.User_id, U.Nickname, CONCAT(U.City,' ', U.Street_address1, ' ', U.Street_address2) AS 전체주소, CONCAT(SUBSTR(TLNO, 1, 3), '-', SUBSTR(TLNO, 4, 4), '-', SUBSTR(TLNO, 8)) AS 전화번호FROM Used_goods_board B JOIN Used_goods_user U ON B.Writer_id = U.User_idHAVING COUNT(BOARD_ID) >= 3ORDER BY U.User_id DESC; - CONCAT 함수는 + 가 아니라 , 를 사용..

My Tech Blog (SQL)
📑 1. 문제설명❌ 2. 실패한 시도코드는 작동하지만 정답 처리 X이유: CAR_ID 중복됨SELECT A.Car_idFROM Car_rental_company_car A JOIN Car_rental_company_rental_history B ON A.Car_id = B.Car_idWHERE A.Car_type = '세단' AND B.Start_date BETWEEN '2022-10-01' AND '2022-10-31'ORDER BY A.Car_id DESC;⭐ 3. 정답코드CAR_ID 중복이 없어야 하며 -> DISTINCT대여 기록이 있는 -> ON A.CAR_ID = B.CAR_IDSELECT DISTINCT(A.Car_id)FROM ..

📑 1. 문제설명⭐ 2. 정답코드SELECT Animal_id, name, CASE WHEN Sex_upon_intake LIKE '%Neutered%' OR Sex_upon_intake LIKE '%Spayed%' THEN 'O' ELSE 'X' END AS 중성화FROM ANIMAL_INSORDER BY ANIMAL_ID; 😊 3. TMIANSI SQL 표준에서는 ALIAS 에 작은따옴표를 사용하는 것이 허용되지 않지만 써도 상관은 없다. (나는 따옴표 썼음)SELECT Animal_id, name, CASE WHEN Sex_upon_intake LIKE '%Neutered%' ..

📑 1. 문제설명❌ 실패한 시도이름의 대소문자를 구별하지 않는다는 부분이 문제의 핵심 1차 시도 실패WHERE 절에서 `LOWER(NAME)` 해 주었으나 틀림쿼리는 돌아가고 결과는 나오지만 결국 WHERE절에서 LOWER()과 LIKE를 함께 쓴 것은 불필요한 처리를 하는 것이다. MySQL에서 LIKE 연산자는 기본적으로 대소문자를 구별하지 않는다. SELECT ANIMAL_ID, NAMEFROM ANIMAL_INSWHERE LOWER(ANIMAL_TYPE) = 'dog' AND LOWER(NAME) LIKE '%el%'ORDER BY NAME DESC; 2차 시도 실패이번에는 ORDER BY절에 LOWER() 함수를 써서 정렬했더니 틀렸다고 함.WHERE 절이랑 정렬이랑 별개니까 정렬에는 LOW..

📑 1. 특정 옵션이 포함된 자동차 리스트 구하기 문제CAR_RENTAL_COMPANY_CAR 테이블에서 '네비게이션' 옵션이 포함된 자동차 리스트를 출력하는 SQL문을 작성해주세요. 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요. ⭐ 정답코드SELECT * FROM CAR_RENTAL_COMPANY_CARWHERE OPTIONS LIKE '%네비게이션%'ORDER BY CAR_ID DESC;📑 2. 자동차 대여 기록에서 장기/단기 대여 구분하기 📌 틀린코드SELECT HISTORY_ID, CAR_ID, DATE_FORMAT(START_DATE, '%Y-%m-%d'), DATE_FORMAT(END_DATE, '%Y-%m-%d'), CASE WHEN DATEDIFF(END_DATE..

📑 1. 문제설명💡 2. 접근방식이 문제 핵심은 조건에 따라서 STATUS 라는 컬럼에 다른 결과값을 보여주는 것이다자바에서 조건문으로 IF나 CASE문 쓰는 것처럼 MySQL 에서는 SELECT 절에 CASE 문을 써 줄 수 있다.CASE WHEN 컬럼명 = '조건' THEN '결과값' 해 주면 조건에 따라 다른 결과가 도출된다.그리고 CASE 문을 끝낼 때는 END AS 별칭을 사용한다 만약에 나열한 조건에 해당하지 않는 경우의 기본 값을 주고 싶다면 WHEN 대신 ELSE 절에 기본값을 세팅해 주면 된다. ⭐ 3. 정답코드계속 틀려서 출력은 잘 되는데 왜 틀리나 했더니 MySQL 에서 기본값은 오름차순이었다처음에 내림차순이 기본값이라 생각하고 생략했음ORDER BY BOARD_ID;만 썼더니 계..

📑 1. 문제설명💡 2. 접근방식WHERE절이랑 HAVING 절 쓰임이 너무너무 헷갈린다. 왜 HAVING을 사용하는가? 이 문제에서는 평균 대여 기간(AVG)을 계산한 후 해당 값이 7 이상인 그룹만 필터링해야 한다.평균을 계산하려면 먼저 CAR_ID 별로 그룹화를 해야한다.이후에 조건을 적용할 수 있는 절이 바로 HAVING이다.즉, WHERE 절로는 그룹화 이후의 집계 결과를 필터링할 수 없기 때문에 반드시 HAVING을 사용해야 한다. 언제 WHERE절을 써야 하고, 언제 HAVING 절을 써야 하는지 정말 헷갈린다.이건 SQL 쿼리문 실행 순서와 관련이 있다.FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BYHAVING은 GROUP BY 이후 실행..

1. 게시글 수정하는 update 메서드 만들기BbsDAO 클래스 하단에 메서드 추가public int update(int bbsID, String bbsTitle, String bbsContent) { String SQL = "UPDATE BBS SET bbsTitle = ?, bbsContent = ? WHERE bbsID = ?"; PreparedStatement psmt = null; try { psmt = conn.prepareStatement(SQL); psmt.setString(1, bbsTitle); psmt.setString(2, bbsContent); psmt.setInt(3, bbsID); return p..