SQL (2) Join, Insert, Delete - case study w/ TB_ITEM_ATTR, TB_TEAM_ROLE, TB_ITEM, TB_TEAM_TXT

polite_cat·2025년 3월 22일

삐약띠SQL

목록 보기
2/4
post-thumbnail
INSERT INTO TB_TEAM_ROLE
-- TB_TEAM_ROLE에 새로운 레코드를 추가할 것이고
	(TeamCode,TeamID,ItemID, TeamRoleCat, TeamRoleType, RoleDescription ,ManagerID,
    RoleManagerID, FromTeamID, Assigned, AssignedDate, ProjectID ,ChangeSetID,
    Status, Creator ,LastUpdated)
-- 위 순서대로 속성을 나열해서 추가할 것임

-- 아래 select문의 결과가 생성하는 테이블이 insert되는 대상임
-- insert문의 나열된 열과 select문의 나열된 열은 상응함
(SELECT TM_TXT.TeamCode,TM_TXT.TeamID, ITM.ItemID,'TEAMROLETP','REL', NULL, NULL,
NULL, NULL ,2, GETDATE(), NULL, ITM.CurChangeSet,'TMP', 1, GETDATE()
From TB_ITEM_ATTR ITM_ATR
-- 기준이 되는 테이블은 TB_ITEM_ATTR이고
-- 해당 쿼리문에서는 편의를 위해 ITM_ATR라고 지칭하겠음

	INNER JOIN TB_ITEM ITM
    -- TB_ITEM과 Join 시킬 것임
    -- Inner Join이므로 둘 다 레코드가 존재하는 경우만 추출
	ON ITM_ATR.ItemID = ITM.ItemID
    -- Join 조건

	Inner JOIN TB_TEAM_TXT TM_TXT
    -- TB_TEAM_TXT Join 시킬 것임
    -- Inner Join이므로 둘 다 레코드가 존재하는 경우만 추출
    ON ITM_ATR.PlainText like'%'+TM_TXT.Name+'%'
    -- Join 조건
    -- ON 절에서 LIKE '%...%'를 사용하면 Full Scan이 발생할 가능성이 높아 성능 저하됨
    -- 지양하는게 좋음
    
WHERE ITM_ATR.AttrTypeCode = 'AT00017'  AND  ITM_ATR.LanguageID = 1042)
-- Where 조건문으로 select문의 최종 결과 필터링함
-- 기준이 되는 TB_ITEM_ATTR에서 애초에 필터링하고 시작한다고 봐도 무방함
profile
미야우

0개의 댓글