sql

TIL

[TIL][SQL] @Modifying 어노테이션

❓@Modifying 어노테이션이란? @Modifying(clearAutomatically = true, flushAutomatically = true) @Transactional @Query("UPDATE Restaurant r SET r.averageRating = :averageRating WHERE r.id = :restaurantId") void updateAverageRating(@Param("restaurantId") Long restaurantId, @Param("averageRating") double averageRating); 수정 쿼리를 수행하는 메서드에 붙인다. JPA에서 SLECT 쿼리가 아닌 UPDATE, DELETE, INSERT 등과 같은 수정 작업을 수행하는 메서드에 대한..

TIL

[TIL][SQL] 연관 데이터 없을 때 조회하기 (Join vs Left Join)

🤔문제 주 테이블의 상세 정보를 가져오는 코드에서 연관 데이터가 없으면 주 테이블의 정보도 반환되지 않는 문제 발생 ❗원인 주 테이블 id로 연관 테이블을 조회할 때 join을 사용 @Query("SELECT r FROM Restaurant r join fetch r.ratingList WHERE r.id = :id") Optional findByIdWithRatingsUsingFetchJoin(@Param("id") Long id); default Restaurant getById(Long id) { return findByIdWithRatingsUsingFetchJoin(id) .orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND)); } 💡해결방법..

Computer Science/Database

[Database] SQL Injection

SQL Injection 데이터베이스를 손상시킬 수 있는 코드 주입 기술 웹 페이지 입력을 통해 SQL 문에 악성코드를 배치하는 가장 일반적인 웹 해킹 기술 중 하나이다. 일반적으로 사용자의 사용자 이름/사용자 ID와 같은 입력을 요청할 때 발생하며 이름/ID 대신 사용자가 DB에서 무의식적으로 실행할 SQL 문을 제공한다. 1 = 1 은 항상 True SQL 쿼리의 WHERE 절에 삽입되어 항상 참인 조건을 만들어 모든 레코드를 선택하도록 유도하는 방법 예를 들어, 다음과 같은 SQL 쿼리가 있다고 가정: SELECT * FROM users WHERE username = 'admin' AND password = '12345'; 이 쿼리에서 "1 = 1"을 주입하여 WHERE절을 조작하면 다음과 같이 쿼..

Computer Science/Database

[Database] 조인(Join)

조인 (Join) 데이터베이스에서 두 개 이상의 테이블을 연결하여 하나의 결과 집합으로 결합하는 연산 테이블 간의 관계를 활용하여 데이터를 효과적으로 검색하고 조작하는 데 사용된다. INNER JOIN 두 테이블 간의 일치하는 행만 반환 = 교집합 그냥 JOIN 을 하면 INNER JOIN 과 같은 결과가 나온다. ex) 고객 정보와 주문 정보가 각각 다른 테이블에 저장되어 있는 경우, 두 테이블의 정보를 결합하여 해당 고객의 주문 내역을 조회하는 경우에 사용 SELECT * FROM 고객정보 INNER JOIN 주문정보 ON 고객정보.고객ID = 주문정보.고객ID WHERE 고객정보.고객ID = '고객ID값'; LEFT OUTER JOIN = LEFT JOIN 왼쪽 테이블의 모든 행을 포함하며, 오른쪽..

dbssk
'sql' 태그의 글 목록