블로그 이미지
No pain, no gain!
lepoussin

Tag

Notice

Recent Post

Recent Comment

Recent Trackback

Archive

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
  • total
  • today
  • yesterday
05-05 05:08
2009. 5. 13. 00:54 Database/MySQL
MySQL에서 나름대로 많은 작업을 해왔지만 MS SQL에서 사용하던 FULL OUTER JOIN이 안된다는 것을 오늘에서야 알았다. 당황스러웠지만 침착하게(?) FULL OUTER JOIN 기능을 사용할 수 있는 방법에 관해서 트릭을 찾아보면서 고민을 좀 하였다.

그러는 중 내가 선택한 방법은 {LEFT | LIGHT} OUTER JOIN과 UNION의 조합이다. UNION을 이용할 때 두 질의의 결과값들이 중복되어 있을 경우, 이는 하나로 표시된다. 다음의 예제를 통해서 살펴보도록 하자.

test1과 test2 테이블을 만들고 다음과 같이 데이터를 넣어보자.

[test1] 테이블
name   age
-------------------
lin        22
sean    111

[test2] 테이블
name   age
-------------------
sean     28
ted        1

다음 질의를 실행하면 [test_result] 테이블이 자동으로 생성되고 그 결과가 들어가 있는 것을 확인할 수 있다.
SELECT t1.name as name, IFNULL(t1.age, 0) AS age1, IFNULL(t2.age, 0) AS age2
INTO test_result
FROM test1 t1
          LEFT OUTER JOIN test2 t2 ON t1.name = t2.name
UNION
SELECT t2.name, IFNULL(t1.age, 0), IFNULL(t2.age, 0)
FROM test1 t1
          RIGHT OUTER JOIN test2 t2 ON t1.name = t2.name

[test_result] 테이블
name   age1   age2
------------------------------
lin        22       0
sean    111      28
ted       0        1
posted by lepoussin
2009. 5. 13. 00:09 Database/MySQL
MS SQL에서 사용하는 ISNULL()은 MySQL에서 동작하지 않는다. MySQL에는 IFNULL()이라는 함수로 존재한다.

IFNULL(expr1, expr2)

expr1이 NULL이 아니면, IFNULL()은 expr1을 반환한다. 그것이 아니면(expr1이 NULL이면) expr2를 반환한다. 반환값으로 숫자, 문자열이 가능하다.

mysql> SELECT IFNULL(1,0);
            -> 1
mysql> SELECT IFNULL(NULL,10);
            -> 10
mysql> SELECT IFNULL(1/0,10);
            -> 10
mysql> SELECT IFNULL(1/0,'yes');
            -> 'yes'
posted by lepoussin
1. JOIN : 두 테이블의 정보를 결합하여 하나의 결과 집합인 "가상" 테이블을 만드는 것

2. INNER JOIN
  1) 구문
SELECT <선택 목록>
FROM <첫 번째 테이블>
<조인 유형> <두번째 테이블>
    [ON <조인 조건>]
  2) 간단한 JOIN
SELECT p.ProductID, s.SupplierID, p.ProductName, s.CompanyName
FROM Products p
INNER JOIN Suppliers s
   ON p.SupplierID = s.SupplierID
WHERE p.ProductID < 4
  3) 복잡한 JOIN
SELECT au_lname + ', ' + au_fname AS "Author", t.title
FROM authors a
JOIN titleauthor ta
   ON a.au_id = ta.au_id
JOIN titles t
   ON t.title_id = ta.title_id

3. OUTER JOIN
  1) 구문
SELECT <SELECT 목록>
FROM <왼쪽 테이블>
<LEFT|RIGHT> [OUTER] JOIN <오른쪽 테이블>
    ON <조인조건>
  2) LEFT OUTER JOIN
SELECT discounttype, discount, s.stor_name
FROM discounts d
LEFT OUTER JOIN stores s
   ON d.stor_id = s.stor_id

Initial Customer 10.50 NULL
Volume Discount 6.70 NULL
Customer Discount 5.00 Bookbeat

  3) RIGHT OUTER JOIN
SELECT discounttype, discount, s.stor_name
FROM discounts d
RIGHT OUTER JOIN stores s
 ON d.stor_id = s.stor_id

※ 출처: Beginning SQL Server 2005 Programming
posted by lepoussin
1. 기본적인 SELECT 문

※ 출처: Beginning SQL Server 2005 Programming
posted by lepoussin
1. 온라인 도움말

※ 출처: Beginning SQL Server 2005 Programming
posted by lepoussin