보통은 Column 값에 따라 조회조건을 다르게 하려고 하면 UNION을 사용한다. 그러나 UNION을 사용하면, 컬럼별로 적용해야 하는 조회조건이 늘어날 수록, UNION 해야 하는 SELECT 쿼리의 갯수도 같이 늘어난다. 다른방법이 있는데 아래와 같이 and or 조건을 사용하는 것이다. - 주소가 서울인 레코드의 경우에만 20살 이상의 남성을 검색하고, 타 지역의 경우엔 전부 검색을 원할 때는? where (city = '서울' and age >= 20 and sex = 'man') OR (city != '서울') 이렇게 하면 각 조건마다 union 을 사용 한 것과 같은 효과를 낸다.
가장 최근 데이터를 조회 하려면? - select max(id), name, age from T1 group by name, age; 정답. 만약, group by에 빠진 컬럼이 있다면? - select max(id), name, age from T1 group by name; 이렇게 age가 group by 에서 빠지게 되면 이름과 age가 정상적으로 맵핑되지 않는다. case 1. 그럼 조인할 때는? select max(t1.id), t1.name, t2.address ... from t1 inner join t2 on t1.id = t2.id group by t1.name, t2.address .... 이렇게 컬럼 갯수가 많아지면, 조회하는 컬럼 전체를 group by로 지정하기 어려움. 그러면 이..
아래 조인 조건을 보자. AS-WAS : 조인조건에서 ACCOUNT 테이블 조인 조건에서 OR을 사용하여 실행계획 cost가 매우 높게 나옴. AS-IS : select로 각각 분리하여 조인으로 변경. account 테이블 6000만건 이상 조회시. 5분 소요되는 것을 3초로 단축. index를 스캔하지 않던 조건을 index를 타도록 변경한 사례. 결과적으로 아래와 같은 쿼리로 실행.
테이블을 조회하다보면 한 컬럼에 두개 이상의 조건을 걸어야 할 때가 있습니다. 예를 들면 아래와 같습니다. ex) 구매일이 '2021-04-01' 이전과 이후 데이터를 모두 가지고 있는 회원 데이터를 조회 하려면? SELECT * FROM member_order m1 INNER JOIN member_order m2 ON m1.id = m2.id AND m1.buy_date > '2021-04-01' AND m2.buy_date
select T_main.countryCode as `countryCode`, T_main.entity as `entity`, ifnull(T_main.saleType, 'Total') as `saleType`, case when T_main.saleType is null then 'Total' when T_main.productName is null then 'sub-Total' else `T_main`.`productName` end as `productName`, T_main.disCode as `disCode`, case when T_main.saleType is null then '-' when T_main.productName is null then '-' else `T_main`.`itemN..
컬럼과 로우를 위치 변경하는 pivot 쿼리 예시. SELECT CASE WHEN T_TEAM_SALES.salesUserId = 'L000000' THEN 'Others' WHEN T_TEAM_SALES.salesUserId = 'L999999' THEN 'Resigned' WHEN `sales_user`.`name` IS NULL THEN 'Others' ELSE `sales_user`.`name` END AS `salesUserName`, CASE WHEN T_TEAM_SALES.salesTeamId = 'T0000000000' THEN 'Others' WHEN `sales_team`.`name` IS NULL THEN 'Others' ELSE `sales_team`.`name` END AS `sa..
-- 첫번째 쿼리. SELECT o.invoice_code FROM ORDER o INNER JOIN ORDER_USER bot ON o.id = bot.order_id LEFT JOIN BILLING_BOT_MAP map ON bot.name = map.bot_name LEFT JOIN BILLING b ON map.biling_id = b.id WHERE o.order_code = 'code123'; -- 두번째 쿼리. SELECT b.invoice_code FROM ORDER o INNER JOIN ORDER_USER bot ON o.id = bot.order_id LEFT JOIN BILLING_BOT_MAP map ON bot.name = map.bot_name LEFT JOIN BILLING ..
update시 관련 테이블의 데이터를 이용하려면 아래와 같이 조인 하여 사용한다. update account a inner join account_order o on a.id = o.user_id set a.order_expiry_at = o.order_end_at WHERE o.current_status = 'ORDERFAILED' AND o.updated_at >= '2020-10-21' AND o.error_msg = 'no value present';