본문 바로가기
관리자

Programming-[Backend]/SQL

(23)
[TIL] groupBy 제거 필요 시 집계함수 활용, XOR 조건문 사용하기 1. groupBy 제거 필요 시 집계함수 활용 상황 querydsl에서 CaseBuilder를 사용하여 select 절을 구현하는 부분에서, groupBy를 하고 싶지 않은데 then절에 포함되어 groupBy를 지정해주어야만 했다. new CaseBuilder().when(ordersEntity.id.countDistinct().eq(1L)) .then(ordersEntity.id) .otherwise(0L).as("orderId") //중략... .groupBy( ... ordersEntity.id ) ordersEntity의 개수가 1개일때만 then절의 ordersEntity.id를 뽑아오는데, 그럼 select절에 ordersEntity.id가 있는 셈이므로 groupBy에 작성해주어야만 한다..
[TIL] inner join, left join의 차이. 예시 및 성능, MSSQL Server Management Studio 실행 계획 차이점1. 데이터 조회량 차이 inner join과 left join의 기본적인 차이는 간단하다. 기준이 되는 from 테이블(driving table)과 조인해오는 테이블(inner table)이 있을 때, 외래키를 갖는 데이터만 불러올지, 외래키가 없더라도 모든 데이터를 driving table 기준으로 조회할지 결정하는 것이다. orders 테이블의 member_id가 members 테이블의 id값과 외래키로 연결되어 있는 상태인데, '주인없는 주문'의 경우 member_id 값이 null이기 때문에 left join에서는 아래 그림처럼 null인 값도 포함하여 5개 행이 조회되지만, inner join으로 조회한다면 외래키가 없는 레코드(행)은 빠지게 되어 4개 행만 조회된다. 따라서 비즈니스 로..
[링크] ERD 관계선 표기법, 의미 참조 1. https://mjn5027.tistory.com/43
[링크][작성중] SQL Server Naming Convention 참조1의 내용을 바탕으로함 1. 테이블 이름 약어를 tbl로 쓰고, 이름은 복수형으로 쓴다. tblEmployees, tblOrders, tblProducts 2. 제약 조건 PK : Primary Key, FK : Foreign Key, UQ : Unique Key, DF : Default, CHK : Check PK_Employees, PK_Orders, PK_Products FK_Orders_Employees, FK_Items_Products (Target 테이블_Source 테이블 순) UQ_Employees_EmailID, UQ_Items_Code (테이블 이름_컬럼 이름) DF_Employees_IsActive, DF_Employees_CreateDate(테이블 이름_컬럼 이름) CHK_Emp..
[TIL] 1:N 관계 DB를 SQL 문으로 합계로 조회하기 po라는 테이블과 pol 이라는 테이블이 1:N의 관계를 갖고 있다고 가정하자. 합계 구하기 다음과 같이 조회한다면 3개의 행 값(id = 1, 2, 3)인 값이 조회될 것이다. SELECT * FROM po po.id별로 조회되는 것을 확인할 수 있다. LEFT JOIN을 하면, 6개의 행 값이 조회된다. SELECT * FROM po LEFT JOIN pol on po.id = pol.po_id 갯수가 더 많은 pol 기준으로 조회되고, 이에 따라 po.id가 중복된 값들을 확인할 수 있다. 이렇게 LEFT JOIN이 된 상황에서, po.id의 갯수를 구함과 동시에 pol.id의 갯수 합계를 구하고자 하면 어떻게 해야할까? 예를 들어 위 그림에서 총 13개 행 중에 po.id가 중복되지 않는 갯수는 ..
[TIL] SQL ANY_VALUE 가끔 SQL 구문 중 ANY_VALUE 구문이 나올 때가 있다. 다음 구문에서, customer.name 을 any_value로 지정하게 되면 customer.id를 통해 group by 가 이루어지면서 orders.value는 customer.id값이 같은 값끼리 더해지게 된다. 그러나 customer.name값은 이름에서 알 수 있듯이 이름 값이라서 sum 등의 합산(aggregate) 구문으로 치환될 수 없다. 이럴 때, any_value를 써주면 여러 행의 customer.name값 중 아무거나 1개의 값으로 대표되어 표기된다. 1 2 3 4 select customer.id , any_value(customer.name) , sum(orders.value) from customer join or..
SQL / Tutorial SQL (Structured Query Language) 데이터베이스용 프로그래밍 언어. Query 저장되어 있는 정보를 필터링 하기 위한 질문. 예시로는 검색창에 적는 검색어. 데이터베이스에 쿼리를 보내면 원하는 데이터를 뽑아올 수 있다. https://www.w3schools.com/sql/default.asp 명령문 SLELCT, FROM ex1) SELECT * FROM Customers; Customers 라는 테이블(시트)에서 모든 열을 선택하라 ex2) SELECT CustomerName, City FROM Customers; Customers 테이블에서 CustomerName, City 열을 선택하라 명령문 DISTINCT 1.SELECT Country FROM Customers 2. SE..