Presentation is loading. Please wait.

Presentation is loading. Please wait.

SELECT * FROM r WHERE A=B AND D>5 SELECT A,C FROM r WHERE...

Similar presentations


Presentation on theme: "SELECT * FROM r WHERE A=B AND D>5 SELECT A,C FROM r WHERE..."— Presentation transcript:

1

2 SELECT * FROM r WHERE A=B AND D>5

3 SELECT A,C FROM r WHERE...

4

5 SELECT * FROM r, s WHERE r.B=s.B AND r.D=s.D

6 SELECT * FROM r, s WHERE r.B<s.D

7 SELECT * FROM r UNION SELECT * FROM s

8

9

10

11

12

13

14 주어진 테이블들로부터 적절한 행들과 컬럼들을 선택한다  SELECT 문의 기본 구성  SELECT  검색할 컬럼들을 지정한다  FROM  검색할 테이블을 지정한다  WHERE  검색할 테이블 내의 행을 결정한다  WHERE 절이 없는 경우에는 해당 테이블의 모든 행들을 검색한다

15  형식 SELECT [ALL | DISTINCT] select_list [INTO [new_table_name]] [FROM { table_name | view_name } [(optimizer_hints)] [[, { table_name2 | view_name2 } [(optimizer_hints)] […, { table_name | view_name } [(optimizer_hints)]]] [WHERE clause] [GROUP BY clause] [HAVING clause] [ORDER BY clause] [COMPLETE clause] [FOR BROWSE]

16 SELECT * FROM authors SELECT * FROM authors au_id au_lname au_fname phone address city state zip contract ----------- ---------------- ------------- ------------ --------------------- --------------- ----- ----- -------- 172-32-1176 White Johnson 408 496-7223 10932 Bigge Rd. Menlo Park CA 94025 1 213-46-8915 Green Marjorie 415 986-7020 309 63rd St. #411 Oakland CA 94618 1 238-95-7766 Carson Cheryl 415 548-7723 589 Darwin Ln. Berkeley CA 94705 1 267-41-2394 O'Leary Michael 408 286-2428 22 Cleveland Av. #14 San Jose CA 95128 1 274-80-9391 Straight Dean 415 834-2919 5420 College Av. Oakland CA 94609 1... 712-45-1867 del Castillo Innes 615 996-8275 2286 Cram Pl. #86 Ann Arbor MI 48105 1 722-51-5454 DeFrance Michel 219 547-9982 3 Balding Pl. Gary IN 46403 1 724-08-9931 Stringer Dirk 415 843-2991 5420 Telegraph Av. Oakland CA 94609 0 724-80-9391 MacFeather Stearns 415 354-7128 44 Upland Hts. Oakland CA 94612 1 756-30-7391 Karsen Livia 415 534-9219 5720 McAuley St. Oakland CA 94609 1 807-91-6654 Panteley Sylvia 301 946-8853 1956 Arlington Pl. Rockville MD 20853 1 846-92-7186 Hunter Sheryl 415 836-7128 3410 Blonde St. Palo Alto CA 94301 1 893-72-1158 McBadden Heather 707 448-4982 301 Putnam Vacaville CA 95688 0 899-46-2035 Ringer Anne 801 826-0752 67 Seventh Av. Salt Lake City UT 84152 1 998-72-3567 Ringer Albert 801 826-0752 67 Seventh Av. Salt Lake City UT 84152 1 (23 row(s) affected) au_id au_lname au_fname phone address city state zip contract ----------- ---------------- ------------- ------------ --------------------- --------------- ----- ----- -------- 172-32-1176 White Johnson 408 496-7223 10932 Bigge Rd. Menlo Park CA 94025 1 213-46-8915 Green Marjorie 415 986-7020 309 63rd St. #411 Oakland CA 94618 1 238-95-7766 Carson Cheryl 415 548-7723 589 Darwin Ln. Berkeley CA 94705 1 267-41-2394 O'Leary Michael 408 286-2428 22 Cleveland Av. #14 San Jose CA 95128 1 274-80-9391 Straight Dean 415 834-2919 5420 College Av. Oakland CA 94609 1... 712-45-1867 del Castillo Innes 615 996-8275 2286 Cram Pl. #86 Ann Arbor MI 48105 1 722-51-5454 DeFrance Michel 219 547-9982 3 Balding Pl. Gary IN 46403 1 724-08-9931 Stringer Dirk 415 843-2991 5420 Telegraph Av. Oakland CA 94609 0 724-80-9391 MacFeather Stearns 415 354-7128 44 Upland Hts. Oakland CA 94612 1 756-30-7391 Karsen Livia 415 534-9219 5720 McAuley St. Oakland CA 94609 1 807-91-6654 Panteley Sylvia 301 946-8853 1956 Arlington Pl. Rockville MD 20853 1 846-92-7186 Hunter Sheryl 415 836-7128 3410 Blonde St. Palo Alto CA 94301 1 893-72-1158 McBadden Heather 707 448-4982 301 Putnam Vacaville CA 95688 0 899-46-2035 Ringer Anne 801 826-0752 67 Seventh Av. Salt Lake City UT 84152 1 998-72-3567 Ringer Albert 801 826-0752 67 Seventh Av. Salt Lake City UT 84152 1 (23 row(s) affected)

17 SELECT 키워드 다음의 select_list 에 컬럼들을 열거하면 된다 SELECT column_name [, column_name …] SELECT au_id, au_fname, au_lname FROM authors SELECT au_id, au_fname, au_lname FROM authors au_id au_fname au_lname ----------- ------------------- --------------- 172-32-1176 Johnson White 213-46-8915 Marjorie Green 238-95-7766 Cheryl Carson... 807-91-6654 Sylvia Panteley 846-92-7186 Sheryl Hunter 893-72-1158 Heather McBadden 899-46-2035 Anne Ringer 998-72-3567 Albert Ringer (23 row(s) affected) au_id au_fname au_lname ----------- ------------------- --------------- 172-32-1176 Johnson White 213-46-8915 Marjorie Green 238-95-7766 Cheryl Carson... 807-91-6654 Sylvia Panteley 846-92-7186 Sheryl Hunter 893-72-1158 Heather McBadden 899-46-2035 Anne Ringer 998-72-3567 Albert Ringer (23 row(s) affected)

18  컬럼 순서의 재배열  SELECT 키워드 다음에 열거하는 순서에 따라 결과로 나타나는 컬럼들의 순서가 결정된 다 SELECT au_fname, au_lname, au_id FROM authors SELECT au_fname, au_lname, au_id FROM authors au_fname au_lname au_id -------------------- --------------- ----------- Johnson White 172-32-1176 Marjorie Green 213-46-8915 Cheryl Carson 238-95-7766... Sylvia Panteley 807-91-6654 Sheryl Hunter 846-92-7186 Heather McBadden 893-72-1158 Anne Ringer 899-46-2035 Albert Ringer 998-72-3567 (23 row(s) affected) au_fname au_lname au_id -------------------- --------------- ----------- Johnson White 172-32-1176 Marjorie Green 213-46-8915 Cheryl Carson 238-95-7766... Sylvia Panteley 807-91-6654 Sheryl Hunter 846-92-7186 Heather McBadden 893-72-1158 Anne Ringer 899-46-2035 Albert Ringer 998-72-3567 (23 row(s) affected)

19  컬럼 제목의 변경 SELECT column_heading = column_name [, column_name …] 또는 SELECT column_name column_heading [, column_name …]  컬럼의 제목을 컬럼 이름이 아닌 다른 것으로 변경할 수 있다 SELECT FIRST = au_fname, au_lname LAST, au_id FROM authors SELECT FIRST = au_fname, au_lname LAST, au_id FROM authors FIRST LAST au_id -------------------- --------------- ----------- Johnson White 172-32-1176 Marjorie Green 213-46-8915 Cheryl Carson 238-95-7766... Heather McBadden 893-72-1158 Anne Ringer 899-46-2035 Albert Ringer 998-72-3567 (23 row(s) affected) FIRST LAST au_id -------------------- --------------- ----------- Johnson White 172-32-1176 Marjorie Green 213-46-8915 Cheryl Carson 238-95-7766... Heather McBadden 893-72-1158 Anne Ringer 899-46-2035 Albert Ringer 998-72-3567 (23 row(s) affected)

20 WHERE 절에 탐색 조건을 근거하여 어떤 행을 검색할 지를 지정한다 SELECTselect_list FROMtable_list WHEREsearch_conditions  주의 사항  WHERE 절에는 가능하면 NOT 은 사용하지 않는 것이 좋다  NOT 을 사용하면 색인의 도움을 받을 수 없다 !!  연산자 앞에는 가능하면 컬럼 이름이 오도록 한다

21  비교 연산자의 사용  =, >, =,, !=, !, !>  알 수 없는 값의 비교  IS NULL, IS NOT NULL SELECT * FROM authors WHERE zip > ‘90000’ SELECT * FROM authors WHERE zip > ‘90000’ SELECT au_lname, city FROM authors WHERE state = ‘CA’ SELECT au_lname, city FROM authors WHERE state = ‘CA’ SELECT title FROM titles WHERE price IS NULL SELECT title FROM titles WHERE price IS NULL

22  범위 비교  BETWEEN, NOT BETWEEN  리스트 비교  IN, NOT IN SELECT pubdate, title FROM titles WHERE pubdate BETWEEN ‘1/1/91’ AND ‘12/31/91’ SELECT pubdate, title FROM titles WHERE pubdate BETWEEN ‘1/1/91’ AND ‘12/31/91’ SELECT title, type FROM titles WHERE type IN (‘mod_cook’, ‘trad_cook’) SELECT title, type FROM titles WHERE type IN (‘mod_cook’, ‘trad_cook’) SELECT title, type FROM titles WHERE type = ‘mod_cook’ OR type = ‘trad_cook’ SELECT title, type FROM titles WHERE type = ‘mod_cook’ OR type = ‘trad_cook’

23  LIKE 키워드의 사용 SELECT select_list FROM table_list WHERE expression [NOT] LIKE “ string ”  정규 표현식 (regular expression) 형식의 와일드카드 사용  와일드카드 ( Wildcard) %: 임의의 0 개 이상의 문자열 _: 임의의 한 글자 []: 지정된 범위 또는 집합 안의 한 문자 [^]: 지정된 범위 또는 집합에 없는 한 문자

24 SELECT stor_name FROM stores WHERE stor_name LIKE ‘%Books%’ SELECT stor_name FROM stores WHERE stor_name LIKE ‘%Books%’ SELECT stor_name FROM stores WHERE stor_name LIKE ‘Bo%’ SELECT stor_name FROM stores WHERE stor_name LIKE ‘Bo%’ SELECT stor_name FROM stores WHERE stor_name LIKE ‘%[S-V]%’ SELECT stor_name FROM stores WHERE stor_name LIKE ‘%[S-V]%’ SELECT stor_name FROM stores WHERE stor_name LIKE ‘%M[^c]%’ SELECT stor_name FROM stores WHERE stor_name LIKE ‘%M[^c]%’

25 SELECT title_id, title, pub_id, price, pubdate FROM titles WHERE (title LIKE ‘T%’ OR pub_id = ‘0877’) AND (price > $16.00) SELECT title_id, title, pub_id, price, pubdate FROM titles WHERE (title LIKE ‘T%’ OR pub_id = ‘0877’) AND (price > $16.00) SELECT title_id, title, pub_id, price, pubdate FROM titles WHERE (title LIKE ‘T%’) OR (pub_id = ‘0877’ AND price > $16.00) SELECT title_id, title, pub_id, price, pubdate FROM titles WHERE (title LIKE ‘T%’) OR (pub_id = ‘0877’ AND price > $16.00) SELECT title_id, title, pub_id, price, pubdate FROM titles WHERE title LIKE ‘T%’ OR pub_id = ‘0877’ AND (price > $16.00) SELECT title_id, title, pub_id, price, pubdate FROM titles WHERE title LIKE ‘T%’ OR pub_id = ‘0877’ AND (price > $16.00)

26 SELECT 문에서는 WHERE 절을 만족하는 모든 행을 표현하는 것이 디폴트이다 SELECT [ ALL | DISTINCT ] select_list FROM table_list WHERE search_conditions  ALL  조건을 만족하는 모든 행을 표현한다  DISTINCT  중복을 제거하고 결과를 나타낸다  테이블 Vs. 릴레이션

27 SELECT city, state FROM authors SELECT city, state FROM authors SELECT DISTINCT city, state FROM authors SELECT DISTINCT city, state FROM authors

28 하나 또는 그 이상의 열에 대한 질의 결과를 정렬한다  SQL 서버 설치할 때 선택한 정렬 순서를 따른다 (sp_helpsort) SELECT column_name [, column_name… ] FROM table_list [ ORDER BY column_name | select_list_number | expression [ ASC | DESC ] [, column_name | select_list_number | expression [ ASC | DESC ] … ] WHERE search_conditions

29  고려 사항  ORDER BY 절에 컬럼 명이 아닌 상대적인 컬럼 번호를 사용할 수 있다  오름차순 (ASC) 또는 내림차순 (DESC) 이 지정되지 않으면 오름차순으로 가정한다  최고 16 컬럼까지 정렬할 수 있다  정렬의 대상이 된 열이 select_list 에 반드시 나타날 필요는 없다 SELECT pub_id, type, price, title FROM titles ORDER BY type, price DESC SELECT pub_id, type, price, title FROM titles ORDER BY type, price DESC SELECT pub_id, type, price, title FROM titles ORDER BY 2, 3 DESC SELECT pub_id, type, price, title FROM titles ORDER BY 2, 3 DESC

30  산술 연산자들 +, -, /, *, %  연산자 우선 순위 ( )  *, /, *  -, +  한 수식에서 같은 우선 순위를 가지는 연산자들에 대해서는 왼쪽에 나타나는 연산자가 오른쪽에 나타나는 연산자에 우선한다  산술 연산자가 적용되는 자료형들  int, smallint, tinyint, float, real, money, smallmoney  단, % 는 money, smallmoney, float, real 자료형에 대해서 수행되지 않는다

31 SELECT price, (price * 1.1), title FROM titles SELECT price, (price * 1.1), title FROM titles price title -------- ----------- --------------------------- 19.99 21.98900 The Busy Executive's Dat... 11.95 13.14500 Cooking with Computers:... 2.99 3.28900 You Can Combat Computer...... 19.99 21.98900 Prolonged Data Deprivati... 7.99 8.78900 Emotional Security: A Ne... 20.95 23.04500 Onions, Leeks, and Garli... 11.95 13.14500 Fifty Years in Buckingha... 14.99 16.48900 Sushi, Anyone? (18 row(s) affected) price title -------- ----------- --------------------------- 19.99 21.98900 The Busy Executive's Dat... 11.95 13.14500 Cooking with Computers:... 2.99 3.28900 You Can Combat Computer...... 19.99 21.98900 Prolonged Data Deprivati... 7.99 8.78900 Emotional Security: A Ne... 20.95 23.04500 Onions, Leeks, and Garli... 11.95 13.14500 Fifty Years in Buckingha... 14.99 16.48900 Sushi, Anyone? (18 row(s) affected)

32  집계 함수 (Aggregate Functions)

33 3 전체 테이블 또는 테이블 내의 컬럼들로 구성된 그룹들에 대한 요약 값을 새로운 컬럼으로 생성한다 aggregate_function ( [ALL | DISTINCT] expression )  expression  컬럼 이름, 상수, 산술 / 비트 연산자 등으로 구성된다  계산 함수들 AVG ( [ALL|DISTINCT] expression ) SUM ( [ALL|DISTINCT] expression ) COUNT ( [ALL|DISTINCT] expression ), COUNT ( * ) MAX ( expression ), MIN ( expression )  SELECT 문이나 GROUP BY 와 함께 사용된다  일반적으로 select list 나 HAVING 절에 위치한다

34 SELECT COUNT(*) FROM titles SELECT COUNT(*) FROM titles SELECT COUNT(price) FROM titles SELECT COUNT(price) FROM titles SELECT COUNT(DISTINCT title_id) FROM titles SELECT COUNT(DISTINCT title_id) FROM titles SELECT COUNT(*) FROM titles WHERE price IS NOT NULL SELECT COUNT(*) FROM titles WHERE price IS NOT NULL

35 4 계산 함수와 함께 각 그룹에 대해 하나의 행과 하나의 요약 정보를 생성한다 SELECT select_list FROM table_name WHERE search_conditions GROUP BY [ALL] aggregate_free_expression [, aggregate_free_expression …]] [HAVING search conditions]  GROUP BY  선택된 테이블의 각 그룹에 대한 요약 정보를 생성한다  HAVING  결과 행들에 대해 제약을 가한다  조건에 맞지 않는 그룹들을 제외한다  조직화된 요약 데이터를 구성하기 위해 사용된다

36  참고 사항  ANSI 표준 SQL 에서의 요구사항  select_list 에 있는 모든 컬럼들은 반드시 GROUP BY 절에 나타나야 한다  HAVING 절에 있는 컬럼은 반드시 하나의 값을 반환해야 한다  HAVING 절을 포함한 질의는 반드시 GROUP BY 절을 포함해야 한다  Transact-SQL 에서는 ANSI 표준 SQL 보다 더 많은 옵션을 제공  GROUP BY 절은 수식을 포함할 수 있다  GROUP BY ALL 은 WHERE 절에서 제외된 그룹까지도 포함한다  ALL 은 SELECT 문이 WHERE 절을 포함할 때만 의미가 있다

37 SELECT title_id, copies_sold = SUM(qty) FROM sales GROUP BY title_id SELECT title_id, copies_sold = SUM(qty) FROM sales GROUP BY title_id title_id copies_sold -------- ----------- BU1032 15 BU1111 25 BU2075 35... PS3333 15 PS7777 25 TC3218 40 TC4203 20 TC7777 20 (16 row(s) affected) title_id copies_sold -------- ----------- BU1032 15 BU1111 25 BU2075 35... PS3333 15 PS7777 25 TC3218 40 TC4203 20 TC7777 20 (16 row(s) affected)

38 SELECT title_id, copies_sold = SUM(qty) FROM sales GROUP BY title_id HAVING SUM(qty) > 30 SELECT title_id, copies_sold = SUM(qty) FROM sales GROUP BY title_id HAVING SUM(qty) > 30 title_id copies_sold -------- ----------- BU2075 35 MC3021 40 PC8888 50 PS2091 108 TC3218 40 (5 row(s) affected) title_id copies_sold -------- ----------- BU2075 35 MC3021 40 PC8888 50 PS2091 108 TC3218 40 (5 row(s) affected)

39 SELECT title_id, copies_sold = SUM(qty) FROM sales WHERE ord_date BETWEEN ‘1/1/1994’ AND ‘12/31/1994’ GROUP BY ALL title_id SELECT title_id, copies_sold = SUM(qty) FROM sales WHERE ord_date BETWEEN ‘1/1/1994’ AND ‘12/31/1994’ GROUP BY ALL title_id title_id copies_sold -------- ----------- BU1032 15 BU1111 NULL... MC3021 40 PC1035 NULL PC8888 NULL PS1372 NULL PS2091 108 PS2106 NULL... (16 row(s) affected) title_id copies_sold -------- ----------- BU1032 15 BU1111 NULL... MC3021 40 PC1035 NULL PC8888 NULL PS1372 NULL PS2091 108 PS2106 NULL... (16 row(s) affected)

40  조인의 구현  ANSI SQL 문법  SQL 서버 문법  Inner 조인  Cross 조인  Outer 조인  둘 이상의 테이블의 조인  Self 조인

41 3 각 테이블에서의 컬럼들을 사용하여 두 개의 테이블을 연결한다  고려 사항  연결하는 컬럼은 조인에 포함된 각 테이블에 있는 데이터를 쉽게 일치시키거나 비교할 수 있어야 한다  ANSI SQL 문법 또는 SQL 서버 문법을 사용할 수 있다  하나의 SELECT 문에서 동시에 ANSI SQL 문법과 SQL 서버 문법을 사용할 수 없다  두 테이블 모두에 존재하는 컬럼 이름을 참조하는 경우에는 반드시 table_name.column_name 형식을 따라야 한다

42  형식 SELECT table_name. column_name [, table_name. column_name … ] FROM { table_name [ join_type ] JOIN table_name ON search_conditions } WHERE [ search_condition … ]  WHERE 절을 사용한 행의 선택에서 연결된 테이블을 구성한다  어떤 형식의 조인이 처리될 것인지 알리기 위해 ANSI 조인 키워드를 사용할 수 있다  INNER JOIN: 연결 조건을 만족하는 행들만을 포함한다  CROSS JOIN: 테이블 간의 모든 행들의 조합을 포함한다  OUTER JOIN: 연결 조건을 만족하는 행들과 연결된 테이블 중 한 테이블의 남 은 행을 포함한다

43  형식 SELECT table_name. column_name [, table_name. column_name … ] FROM { table_name, table_name } WHERE table_name.column_name join_operator table_name.column_name  컬럼 들의 값을 한 행씩 비교하여 비교 결과가 참일 때 그 행을 나열한다  FROM 절에 조인에 관련되는 모든 테이블을 나열하고 WHERE 절에 어떤 행들이 결 과에 포함되어야 하는지를 명시한다  WHERE 절에 사용할 수 있는 연산자들 =, >, =,

44 3 두 테이블의 연결 조건에 맞는 행들만을 포함한다  내부 연결의 일반적 유형  Equijoin  비교되는 컬럼의 값이 같은 경우에 연결이 이루어진다  중복된 컬럼 정보를 만들게 된다  Natural join  Equijoin 이 만들어 내는 결과 집합에서 중복된 컬럼 데이터를 제거한다

45 USE pubs SELECT authors.au_lname, authors.state, publishers.* FROM publishers INNER JOIN authors ON publishers.city = authors.city USE pubs SELECT authors.au_lname, authors.state, publishers.* FROM publishers INNER JOIN authors ON publishers.city = authors.city USE pubs SELECT authors.au_lname, authors.state, publishers.* FROM publishers, authors WHERE publishers.city = authors.city USE pubs SELECT authors.au_lname, authors.state, publishers.* FROM publishers, authors WHERE publishers.city = authors.city ANSI 조인

46 3 연결되는 테이블들의 모든 행들의 모든 조합을 결과에 포함한다  연결된 테이블의 Cartesian product 를 반환한다 SELECT pub_name, title FROM titles CROSS JOIN publishers SELECT pub_name, title FROM titles CROSS JOIN publishers SELECT pub_name, title FROM titles, publishers SELECT pub_name, title FROM titles, publishers ANSI 조인

47 3 한 테이블에 있는 행에는 제한 조건을 가하지 않는 반면에 다른 테이블에 대해서는 행에 제 한을 한다  고려 사항  관계된 테이블에서 일치하지 않는 outer 테이블의 모든 행을 보여준다  두 테이블 간에만 이루어질 수 있다  기본 키와 참조 키가 동기화 되지 않았는지 등을 알아보는데 유용하게 사용된다

48  ANSI SQL 문법  LEFT OUTER JOIN  왼쪽 테이블의 모든 행을 포함한다  RIGHT OUTER JOIN  오른쪽 테이블의 모든 행을 포함한다  FULL OUTER JOIN  왼쪽, 오른쪽 테이블의 일치하지 않는 모든 행을 포함한다  SQL 서버 문법  *=  왼쪽 테이블의 모든 행을 포함한다  =*  오른쪽 테이블의 모든 행을 포함한다

49 SELECT title, stor_id, ord_num, qty, ord_date FROM titles LEFT OUTER JOIN sales ON titles.title_id = sales.title_id SELECT title, stor_id, ord_num, qty, ord_date FROM titles LEFT OUTER JOIN sales ON titles.title_id = sales.title_id SELECT title, stor_id, ord_num, qty, ord_date FROM titles, sales WHERE titles.title_id *= sales.title_id SELECT title, stor_id, ord_num, qty, ord_date FROM titles, sales WHERE titles.title_id *= sales.title_id ANSI 조인

50 SELECT title, stor_id, ord_num, qty, ord_date FROM sales, titles LEFT OUTER JOIN sales ON titles.title_id = sales.title_id WHERE qty IS NULL SELECT title, stor_id, ord_num, qty, ord_date FROM sales, titles LEFT OUTER JOIN sales ON titles.title_id = sales.title_id WHERE qty IS NULL SELECT title, stor_id, ord_num, qty, ord_date FROM titles, sales WHERE titles.title_id *= sales.title_id AND qty IS NULL SELECT title, stor_id, ord_num, qty, ord_date FROM titles, sales WHERE titles.title_id *= sales.title_id AND qty IS NULL ANSI 조인

51  ANSI SQL 문법 SELECT table_name. column_name [, table_name. column_name … ] FROM table_name [ join_type ] JOIN table_name ON search_conditions … [ join_type ] JOIN table_name ON search_conditions WHERE [ search_condition … ]  SQL 서버 문법 SELECT table_name. column_name [, table_name. column_name … ] FROM table_name, table_name [, table_name …] WHERE table_name.column_name join_operator table_name.column_name [AND table_name. column_name join_operator table_name. column_name …]

52 SELECT stor_name, qty, title FROM titles INNER JOIN sales ON titles.title_id = sales.title_id INNER JOIN stores ON stores.stor_id = sales.stor_id SELECT stor_name, qty, title FROM titles INNER JOIN sales ON titles.title_id = sales.title_id INNER JOIN stores ON stores.stor_id = sales.stor_id SELECT stor_name, qty, title FROM titles, sales, stores WHERE titles.title_id = sales.title_id AND stores.stor_id = sales.stor_id SELECT stor_name, qty, title FROM titles, sales, stores WHERE titles.title_id = sales.title_id AND stores.stor_id = sales.stor_id ANSI 조인

53 3 테이블의 행을 같은 테이블 안에 있는 다른 행과 연관시킨다  비교되는 컬럼은 같은 자료형이어야 하고 여러 방법에 대해 비교 가능해야 한다  같은 테이블을 조인하기 위해서는 하나의 테이블을 두 개의 다른 논리적 테이블로 참조 할 수 있도록 별명을 할당해야 한다

54  ANSI SQL 문법 SELECT column_name, column_name [, column_name … ] FROM table_name alias [ join_type ] JOIN table_name alias ON search_conditions  SQL 서버 문법 SELECT column_name, column_name [, column_name … ] FROM table_name alias, table_name alias [, table_name … ] WHERE alias.column_name join_operator alias.column_name

55 SELECTau1.au_fname, au1.au_lname, au2.au_fname, au2.au_lname, au2.zip FROM authors au1 INNER JOIN authors au2 ON au1.zip = au2.zip WHERE au1.city = ‘Oakland’ AND au1.state = ‘CA’ AND au1.au_id < au2.au_id SELECTau1.au_fname, au1.au_lname, au2.au_fname, au2.au_lname, au2.zip FROM authors au1 INNER JOIN authors au2 ON au1.zip = au2.zip WHERE au1.city = ‘Oakland’ AND au1.state = ‘CA’ AND au1.au_id < au2.au_id SELECTau1.au_fname, au1.au_lname, au2.au_fname, au2.au_lname, au2.zip FROM authors au1, authors au2 WHERE au1.city = ‘Oakland’ AND au1.state = ‘CA’ AND au1.zip = au2.zip AND au1.au_id < au2.au_id SELECTau1.au_fname, au1.au_lname, au2.au_fname, au2.au_lname, au2.zip FROM authors au1, authors au2 WHERE au1.city = ‘Oakland’ AND au1.state = ‘CA’ AND au1.zip = au2.zip AND au1.au_id < au2.au_id ANSI 조인

56

57  Employee (fname, minit, lname, ssn, bdate, address, sex, salary, superssn, dno)  Department (dname, dnumber, mgrssn, mgrstartdate)  dept_locations (dnumber, dlocation)  Project (pname, pnumber, plocation, dnum)  works_on (essn, pno, hours)  Dependent (essn, dependent_name, sex, bdate, relationship)

58  Retrieve the birthdate and address of the employee whose name is ‘ John B.Smith ’ SELECT bdate, address FROM employee WHERE fname = ‘John’ AND minit=‘B’ AND lname=‘Smith’

59  Retrive the name and address of all employees who work for the ‘ Research ’ department SELECT fname, lname, address FROM employee, department WHERE dname=‘Research’ AND dnumber=dno

60  For every project located in ‘ Stafford ’ list the project number, the controlling department number, and the department manager ’ s last name, address, and birthdate SELECT pnumber, dnum, lname, address, bdate FROM project, department, employee WHERE dnum-dnumber AND mgrssn=ssn AND plocation=‘Staffod’

61  For each employee, retrieve the employee ’ s first and last name and the first and last name of his or her immediate supervisor SELECT e.fname, e.lname, s.fname, s.lname FROM employee e s WHERE e.superssn=s.ssn

62  Make a list of all project numbers for projects that involve an employee whose last name is ‘ Smith ’ as a worker or as a manager of the department that controls the project (SELECT pnumber FROM project, department, employee WHERE dnum=dnumber AND mgrssn=ssn AND lname=‘Smith’) UNION (SELECT pnumber FROM project, works_on, employee WHERE pnumber=pno AND essn=ssn AND lname=‘Smith’)

63  Retrieve the name of each employee who has a dependent with the same first name and same sex as the employee SELECT e.fname, e.lname FROM employee e WHERE e.ssn IN (SELECT essn FROM dependent WHERE essn=e.ssn AND e.fname=dependent_name AND sex=e.sex)

64  Retrieve the names of employees who have no dependents SELECT fname, lname FROM employee WHERE NOT EXISTS (SELECT * FROM dependent WHERE ssn=essn)

65  Retrieve the social security number of all employees who work on project number 1,2, or 3 SELECT DISTINCT essn FROM works_on WHERE pno IN (1,2,3)

66  Retrieve the names of all employees who do not have supervisors SELECT fname, lname FROM employee WHERE superssn IS NULL

67  Find the sum of the salaries of all employees, the maximum salary, the minimum salary, and the average salary SELECT SUM(salary), MAX(salary), MIN(salary) FROM employee

68  Retrieve the total number of employees in the company and the number of employees in the ‘ Research ’ department  SELECT COUNT(*) FROM employee  SELECT COUNT(*) FROM employee, department WHERE dno=dnumber AND dname=‘Research’

69  For each department, retrieve the department number,the number of employees in the department, and their average salary SELECT dno, COUNT(*), AVG(salary) FROM employee GROUP BY dno

70  For each project on which more than two employees work retrieve the project number, project name, and number of employees who work on that project SELECT pnumber, pname, COUNT(*) FROM project, works_on WHERE pnumber=pno GROUP BY pnumber, pname HAVING COUNT(*) >2

71  For each project, retrieve the project number, project name, and number of employees from department 5 who work on that project SELECT pnumber, pname, COUNT(*) FROM project, works_on, employee WHERE pnumber=pno AND ssn=essn AND dno=5 GROUP BY pnumber, pname

72  Retrieve all employees who were born during the 1950s SELECT fname, lname FROM employee WHERE bdate LIKE ‘______5_’

73  Find the salary lists to give all employees who work on the ‘ Product X ’ project a 10% raise SELECT fname, lname, 1,1*salary FROM employee, works_on, project WHERE ssn=essn AND pno=pnumber AND pname=‘ProductX’

74  List ordered by the employee ’ s department and within each department ordered alphabetically by name SELECT dname, lname, fname, pname FROM department, employee, works_on, project WHERE dnumber=dno AND ssn=essn AND pno=pnumber ORDERED BY dname, lname, fname


Download ppt "SELECT * FROM r WHERE A=B AND D>5 SELECT A,C FROM r WHERE..."

Similar presentations


Ads by Google