Download presentation
Presentation is loading. Please wait.
Published byPreston Reed Modified over 9 years ago
2
SELECT * FROM r WHERE A=B AND D>5
3
SELECT A,C FROM r WHERE...
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
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 조인
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
Similar presentations
© 2025 SlidePlayer.com Inc.
All rights reserved.