-- 조인(Join) : Left 조인

-- 카테고리테이블설계

Create Table dbo.Categories

(

       CategoryID Int Identity(1, 1) Not Null Primary Key, -- 카테고리번호

       CategoryName VarChar(25) Not Null  -- 카테고리명

)

Go

 

Insert Categories Values('가전')  -- 1번카테고리

Go

Insert Categories Values('컴퓨터') -- 2번카테고리

Go

Insert Categories Values('서적')

Go

 

--상품테이블설계

Create Table dbo.Products

(

       ProductID Int Identity(1, 1) Not Null Primary Key,   -- 상품고유번호

       ModelName VarChar(25) Not Null,        -- 상품명

       SellPrice Int Null,                    -- 가격

       CategoryID Int Null                    -- 카테고리(1,2,3)

)

Go

 

--[!] 외래키따로지정: 외부에서

Alter Table dbo.Products

Add Foreign Key(CategoryID) References Categories(CategoryID)

Go

 

-- 가전, 냉장고, 100

Insert Products Values('냉장고', 100, 1)

Go

 

-- 컴퓨터, 노트북, 200

Insert Products Values('노트북', 200, 2)

Go

Insert Products Values('데스크톱', 150, 2)

Go

 

-- 상품평(코멘트) 테이블설계

Create Table dbo.Reviews

(

       ReviewID Int Identity(1, 1) Primary Key,      -- 일련번호

       ProductID Int References Products(ProductID), -- 외래키

       Comment VarChar(3850)                         -- 내용

)

Go

Insert Into Reviews Values(1, '냉장실에서얼음이얼어요...')

Insert Into Reviews Values(2, '브랜드가모닝글로리')

 

 

 

Select * From Categories

Select * From Products

 

 

-- 상품리스트출력: 카테고리명, 상품명, 판매가

--[1] SQL Server 전용문법

Select CategoryName, ModelName, SellPrice

From Categories, Products

Where Categories.CategoryID = Products.CategoryID

Go

 

--[2] ANSI-SQL 공통문법

Select CategoryName, ModelName, SellPrice

From Categories Join Products

       On Categories.CategoryID = Products.CategoryID

Go

 

--[3] 상세표시: Join은기본적으로Inner Join이다.

Select

       Categories.CategoryName,

       Products.ModelName,

       Products.SellPrice

From Categories Inner Join Products

       On Categories.CategoryID = Products.CategoryID

Go

 

--[4] 축약표시-> SQL Server전용문법이다.

Select c.CategoryName, p.ModelName, p.SellPrice

From Categories c, Products p

Where c.CategoryID = p.CategoryID

Go

 

/*

위의[1], [2], [3], [4]는모두똑같은구문이다. 표현방식은다르지만실행결과는모두같다.

*/

 

Select * From Products

Select * From Reviews

 

-- 상품명, 코멘트

-- 기본조인(Inner Join)은매치되는결과만가져온다. '데스크톱' 누락

Select p.ModelName, r.Comment

From Products p Inner Join Reviews r

       On p.ProductID = r.ProductID

Go

 

-- Left Outer Join : 왼쪽테이블의모든목록은출력

Select p.ModelName, r.Comment

From Products p  Left Outer Join Reviews r

       On p.ProductID = r.ProductID

Go

 

 

-- 3개테이블조인

-- 카테고리명, 상품명, 판매가, 코멘트

Select c.CategoryName, p.ModelName, p.SellPrice, r.Comment

From

       Categories c

             Join Products p

                    On c.CategoryID = p.CategoryID

                    Join Reviews r

                           On p.ProductID = r.ProductID

Go          

 

Select c.CategoryName, p.ModelName, p.SellPrice, r.Comment

From Categories c, Products p, Reviews r

Where

       c.CategoryID = p.CategoryID

       And

       p.ProductID = r.ProductID

Go

 

 

'.NET프로그래밍 > SQL Server 2008' 카테고리의 다른 글

31. GroupBy  (0) 2009.09.14
30. 서브쿼리(=하위쿼리)  (0) 2009.09.14
28. 명령어로 사용자생성하기  (0) 2009.09.14
27. 사용자정의함수  (0) 2009.09.14
26. 구성함수  (0) 2009.09.14
Posted by holland14
: