상세 컨텐츠

본문 제목

MsSQL 공부 1

Developer/MsSQL

by 웰크 2016. 5. 2. 17:25

본문



테이블 생성 및 Foreign Key 설정

 1 
 2 IF NOT EXISTS (
 3     SELECT name
 4         FROM sys.databases
 5         WHERE name = N'Test1DB'
 6 )
 7   CREATE DATABASE Test1DB;
 8 GO 
 9 USE Test1DB;
10 GO
11 CREATE TABLE buyer (
12     buyer_id     int         IDENTITY
13     PRIMARY KEY NONCLUSTERED,
14     buyer_name   varchar(20) NOT NULL
15 );
16 GO
17 CREATE TABLE product (
18     product_id   int         IDENTITY
19     PRIMARY KEY NONCLUSTERED,
20     product_name varchar(20) NOT NULL
21 );
22 GO
23 CREATE TABLE orders (
24   orders_id    int         IDENTITY
25     PRIMARY KEY NONCLUSTERED,
26     buyer_id     int         NOT NULL,
27     product_id   int         NOT NULL,
28     qty          int         NOT NULL
29 );
30 ALTER TABLE orders
31   ADD
32     FOREIGN KEY (buyer_id)
33       REFERENCES buyer;
34 ALTER TABLE orders
35   ADD
36     FOREIGN KEY (product_id)
37       REFERENCES product;
38 GO
39 --초기 데이터 삽입
40 INSERT INTO buyer VALUES ('한국유통');
41 INSERT INTO buyer VALUES ('대한물류');
42 SELECT * FROM buyer;
43 GO
44 INSERT INTO product VALUES ('수박');
45 INSERT INTO product VALUES ('배추');
46 INSERT INTO product VALUES ('고구마');
47 SELECT * FROM product;
48 GO
49 INSERT INTO orders VALUES (1,1,10);
50 INSERT INTO orders VALUES (1,2,100);
51 INSERT INTO orders VALUES (2,1,20);
52 INSERT INTO orders VALUES (2,2,200);
53 SELECT * FROM orders;



IF NOT EXISTS 
 - 같은 이름의 테이블 또는 컬럼이 있는지 없는지
   체크해주는 명령어

30 ALTER TABLE orders
31   ADD
32     FOREIGN KEY (buyer_id)
33       REFERENCES buyer;
 - orders 테이블에 Foreign Key 설정






Join의 종류

Cross Join  (두 테이블 모두 가져옴)
1 USE Test1DB;
2 GO
3 SELECT *
4   FROM buyer
5   CROSS JOIN orders;


Inner Join (조건을 만족하는 행만 가져옴)
1 SELECT b.buyer_id, b.buyer_name, o.orders_id, o.product_id, o.qty
2   FROM buyer AS b
3     INNER JOIN orders AS o
4       ON b.buyer_id = o.buyer_id;


Outer Join (조건을 만족하지 않는 행까지 가져옴)
1 SELECT p.product_id, p.product_name, o.orders_id, o.buyer_id, o.qty
2   FROM product AS p
3     LEFT OUTER JOIN orders AS o
4       ON p.product_id = o.product_id
5         AND p.product_name <> '수박';


Self Join (자기 자신의 테이블과 하는 조인)
1 SELECT a.SalesOrderID, a.SalesOrderDetailID AS 'a.SalesOrderDetailID',
2     b.SalesOrderDetailID AS 'b.SalesOrderDetailID'
3   FROM SalesLT.SalesOrderDetail a
4     INNER JOIN SalesLT.SalesOrderDetail b
5       ON a.SalesOrderID = b.SalesOrderID
6         AND a.SalesOrderDetailID < b.SalesOrderDetailID
7   ORDER BY a.SalesOrderID, a.SalesOrderDetailID, b.SalesOrderDetailID;




하위 쿼리
(이왕이면 조인으로 사용하는게 좋다)

단순 하위 쿼리
1 SELECT SalesOrderDetailID, UnitPriceDiscount, UnitPriceDiscount - (
2     SELECT AVG(UnitPriceDiscount) FROM SalesLT.SalesOrderDetail
3   ) AS 'UnitPriceDiscount의 평균값과의 차이'
4   FROM SalesLT.SalesOrderDetail;


상관 하위 쿼리
1 SELECT DISTINCT SalesOrderID, UnitPrice AS '최고 단가'
2   FROM SalesLT.SalesOrderDetail AS a
3   WHERE UnitPrice = (
4     SELECT MAX(UnitPrice)
5       FROM SalesLT.SalesOrderDetail AS b
6       WHERE a.SalesOrderID = b.SalesOrderID
7   );


EXISTS 와 NOT EXISTS
(한 행이라도 결과 집합을 돌려주는지 판단)

1 SELECT *
2   FROM Test1DB.dbo.product AS p
3   WHERE EXISTS (
4     SELECT 1
5       FROM Test1DB.dbo.orders AS o
6       WHERE p.product_id = o.product_id
7   );

or

1 SELECT *
2   FROM Test1DB.dbo.product AS p
3   WHERE NOT EXISTS (
4     SELECT 1
5       FROM Test1DB.dbo.orders AS o
6       WHERE p.product_id = o.product_id
7   );





유니온 (UNION)
(둘 이상의 Select문들의 결과 집합을 하라로 만들어주는 연산자)

1 SELECT FirstName + ' ' + LastName AS Name, 'Contact' AS source, EmailAddress
2   FROM AdventureWorks.Person.Contact
3 UNION
4 SELECT ReviewerName, 'ProductReview' AS source, EmailAddress
5   FROM AdventureWorks.Production.ProductReview;



'Developer > MsSQL' 카테고리의 다른 글

MsSQL 입문  (0) 2016.04.15

관련글 더보기