首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

DB2 730学习札记6

2012-09-29 
DB2 730学习笔记6使用联结从多个表中检索数据?联结join是一种将来自两个或更多表中的数据组合起来的查询。?

DB2 730学习笔记6

使用联结从多个表中检索数据

?

联结join是一种将来自两个或更多表中的数据组合起来的查询。

?

查询标识出哪些是经理的职员

select * from org

?

?DEPTNUMB DEPTNAME?????? MANAGER DIVISION?? LOCATION????
-------- -------------- ------- ---------- -------------
????? 10 Head Office??????? 160 Corporate? New York????
????? 15 New England???????? 50 Eastern??? Boston??????
????? 20 Mid Atlantic??????? 10 Eastern??? Washington??
????? 38 South Atlantic????? 30 Eastern??? Atlanta?????
????? 42 Great Lakes??????? 100 Midwest??? Chicago?????
????? 51 Plains???????????? 140 Midwest??? Dallas??????
????? 66 Pacific??????????? 270 Western??? San Francisco
????? 84 Mountain?????????? 290 Western??? Denver??????

? 8 record(s) selected.

?

select * from staff

?

ID???? NAME????? DEPT?? JOB?? YEARS? SALARY??? COMM????
------ --------- ------ ----- ------ --------- ---------
??? 10 Sanders?????? 20 Mgr??????? 7? 98357.50???????? -
??? 20 Pernal??????? 20 Sales????? 8? 78171.25??? 612.45
??? 30 Marenghi????? 38 Mgr??????? 5? 77506.75???????? -
??? 40 O'Brien?????? 38 Sales????? 6? 78006.00??? 846.55
??? 50 Hanes???????? 15 Mgr?????? 10? 80659.80???????? -
??? 60 Quigley?????? 38 Sales????? -? 66808.30??? 650.25
??? 70 Rothman?????? 15 Sales????? 7? 76502.83?? 1152.00
??? 80 James???????? 20 Clerk????? -? 43504.60??? 128.20
??? 90 Koonitz?????? 42 Sales????? 6? 38001.75?? 1386.70
?? 100 Plotz???????? 42 Mgr??????? 7? 78352.80???????? -
?? 110 Ngan????????? 15 Clerk????? 5? 42508.20??? 206.60
?? 120 Naughton????? 38 Clerk????? -? 42954.75??? 180.00
?? 130 Yamaguchi???? 42 Clerk????? 6? 40505.90???? 75.60
?? 140 Fraye???????? 51 Mgr??????? 6? 91150.00???????? -
?? 150 Williams????? 51 Sales????? 6? 79456.50??? 637.65
?? 160 Molinare????? 10 Mgr??????? 7? 82959.20???????? -
?? 170 Kermisch????? 15 Clerk????? 4? 42258.50??? 110.10
?? 180 Abrahams????? 38 Clerk????? 3? 37009.75??? 236.50
?? 190 Sneider?????? 20 Clerk????? 8? 34252.75??? 126.50
?? 200 Scoutten????? 42 Clerk????? -? 41508.60???? 84.20
?? 210 Lu??????????? 10 Mgr?????? 10? 90010.00???????? -
?? 220 Smith???????? 51 Sales????? 7? 87654.50??? 992.80
?? 230 Lundquist???? 51 Clerk????? 3? 83369.80??? 189.65
?? 240 Daniels?????? 10 Mgr??????? 5? 79260.25???????? -
?? 250 Wheeler?????? 51 Clerk????? 6? 74460.00??? 513.30
?? 260 Jones???????? 10 Mgr?????? 12? 81234.00???????? -
?? 270 Lea?????????? 66 Mgr??????? 9? 88555.50???????? -
?? 280 Wilson??????? 66 Sales????? 9? 78674.50??? 811.50
?? 290 Quill???????? 84 Mgr?????? 10? 89818.00???????? -
?? 300 Davis???????? 84 Sales????? 5? 65454.50??? 806.10
?? 310 Graham??????? 66 Sales???? 13? 71000.00??? 200.30
?? 320 Gonzales????? 66 Sales????? 4? 76858.20??? 844.00
?? 330 Burke???????? 66 Clerk????? 1? 49988.00???? 55.50
?? 340 Edwards?????? 84 Sales????? 7? 67844.00?? 1285.00
?? 350 Gafney??????? 84 Clerk????? 5? 43030.50??? 188.00

? 35 record(s) selected.

?

联结查询(内联结查询,返回差集中满足联结条件的行)?

SELECT deptnumb, deptname, id AS manager_id, name AS manager

????? FROM org, staff? WHERE manager = id? ORDER BY deptnumb

?

?

也可以写为:

SELECT?deptnumb,deptname,id?AS manager_id,name?AS manager

??????FROM org INNER JOIN staff ON manager = id?ORDER?BY deptnumb

?

DEPTNUMB DEPTNAME?????? MANAGER_ID MANAGER?
-------- -------------- ---------- ---------
????? 10 Head Office?????????? 160 Molinare
????? 15 New England??????????? 50 Hanes???
????? 20 Mid Atlantic?????????? 10 Sanders?
????? 38 South Atlantic???????? 30 Marenghi
????? 42 Great Lakes?????????? 100 Plotz???
????? 51 Plains??????????????? 140 Fraye???
????? 66 Pacific?????????????? 270 Lea?????
????? 84 Mountain????????????? 290 Quill???

? 8 record(s) selected.

?

?

外部联结Outer?join返回内部联结操作产生的行,加上内部联结操作不会返回的行。

有三种类型的外部联结:

左外部联结Left outer join或Left join包括内部联结,加上左表中内部联结操作不会返回的行。

?

SELECT?deptnumb,deptname,id?AS manager_id,name?AS manager? FROM org LEFT JOIN staff ON manager = id?ORDER?BY deptnumb

?

DEPTNUMB DEPTNAME?????? MANAGER_ID MANAGER?
-------- -------------- ---------- ---------
????? 10 Head Office?????????? 160 Molinare
????? 15 New England??????????? 50 Hanes???
????? 20 Mid Atlantic?????????? 10 Sanders?
????? 38 South Atlantic???????? 30 Marenghi
????? 42 Great Lakes?????????? 100 Plotz???
????? 51 Plains??????????????? 140 Fraye???
????? 66 Pacific?????????????? 270 Lea?????
????? 84 Mountain????????????? 290 Quill???

? 8 record(s) selected.?

?

右外部联结Right outer join或Rigth join包括内部联结,加上右表中内部联结操作不会返回的行。

SELECT?deptnumb,deptname,id?AS manager_id,name?AS manager? FROM org RIGHT JOIN staff ON manager = id?ORDER?BY deptnumb

?

DEPTNUMB DEPTNAME?????? MANAGER_ID MANAGER?
-------- -------------- ---------- ---------
????? 10 Head Office?????????? 160 Molinare
????? 15 New England??????????? 50 Hanes???
????? 20 Mid Atlantic?????????? 10 Sanders?
????? 38 South Atlantic???????? 30 Marenghi
????? 42 Great Lakes?????????? 100 Plotz???
????? 51 Plains??????????????? 140 Fraye???
????? 66 Pacific?????????????? 270 Lea?????
????? 84 Mountain????????????? 290 Quill???
?????? - -????????????????????? 20 Pernal??
?????? - -????????????????????? 40 O'Brien?
?????? - -????????????????????? 60 Quigley?
?????? - -????????????????????? 70 Rothman?
?????? - -????????????????????? 80 James???
?????? - -????????????????????? 90 Koonitz?
?????? - -???????????????????? 110 Ngan????
?????? - -???????????????????? 120 Naughton
?????? - -???????????????????? 130 Yamaguchi
?????? - -???????????????????? 150 Williams
?????? - -???????????????????? 170 Kermisch
?????? - -???????????????????? 180 Abrahams
?????? - -???????????????????? 190 Sneider?
?????? - -???????????????????? 200 Scoutten
?????? - -???????????????????? 210 Lu??????
?????? - -???????????????????? 220 Smith???
?????? - -???????????????????? 230 Lundquist
?????? - -???????????????????? 240 Daniels?
?????? - -???????????????????? 250 Wheeler?
?????? - -???????????????????? 260 Jones???
?????? - -???????????????????? 280 Wilson??
?????? - -???????????????????? 300 Davis???
?????? - -???????????????????? 310 Graham??
?????? - -???????????????????? 320 Gonzales
?????? - -???????????????????? 330 Burke???
?????? - -???????????????????? 340 Edwards?
?????? - -???????????????????? 350 Gafney??

? 35 record(s) selected.

?

完全外部联结Full outer join或Full join包括内部联结,加上左表和右表中联结操作不会返回的行。?

?

使用UNION集合操作符将两个或更多的查询组合成一个查询。

?

SELECT sales_person FROM sales WHERE region = 'Ontario-South'

?

SALES_PERSON??
---------------
LUCCHESSI?????
LEE???????????
LUCCHESSI?????
LEE???????????
GOUNOT????????
LUCCHESSI?????
LEE???????????
GOUNOT????????
LEE???????????
GOUNOT????????
LUCCHESSI?????
LEE???????????
GOUNOT????????

? 13 record(s) selected.

?

SELECT sales_person FROM sales WHERE sales > 3

?

SALES_PERSON??
---------------
LEE???????????
GOUNOT????????
LEE???????????
LEE???????????
LEE???????????
GOUNOT????????
LEE???????????
LEE???????????
LEE???????????
LEE???????????
LEE???????????
GOUNOT????????

? 12 record(s) selected.

?

SELECT sales_person FROM sales
? WHERE region = 'Ontario-South'
UNION
SELECT sales_person FROM sales
? WHERE sales > 3

?

SALES_PERSON??
---------------
GOUNOT????????
LEE???????????
LUCCHESSI?????

? 3 record(s) selected.

?

?

EXCEPT集合操作符生成的结果表中包含第一个查询返回的所有行,但是去掉了第二个任何后续查询返回的行。

?

SELECT sales_person FROM sales
? WHERE region = 'Ontario-South'
EXCEPT
SELECT sales_person FROM sales
? WHERE sales > 3

?

SALES_PERSON??
---------------
LUCCHESSI?????

? 1 record(s) selected.

?

INTERSECT集合操作符生成的结果表只包含所有查询都返回的行。

?

SELECT sales_person FROM sales
? WHERE region = 'Ontario-South'
INTERSECT
SELECT sales_person FROM sales
? WHERE sales > 3

?

SALES_PERSON??
---------------
GOUNOT????????
LEE???????????

? 2 record(s) selected.

?

?

使用GROUP BY 子句对结果进行总结

使用GROUP BY 自己对结果集中的行进行组织。每个组在结果集中由一行表示。

?

SELECT sales_date,MAX(sales) AS max_sales FROM sales GROUP BY sales_dateSALES_DATE

?

SALES_DATE MAX_SALES?
---------- -----------
03/29/1996?????????? 2
12/31/2005?????????? 3
03/29/2006?????????? 7
03/30/2006????????? 18
03/31/2006????????? 14
04/01/2006?????????? 9

?

GROUPING SETS子句,分组集可以用来在一遍分析不同聚合层次上的数据。

YEAR函数返回日期值的年份;

SUM函数用来返回每个分组的销售区间的总量;

分组集列表指定如何对数据进行分组;

在分组集列表中添加一对空的圆括号,可以获得结果集中的总量。

?

SELECT YEAR(sales_date) AS year,region,SUM(sales) AS total_sale FROM sales GROUP BY GROUPING SETS (YEAR(sales_date),region,())

?

YEAR??????? REGION????????? TOTAL_SALE
----------- --------------- -----------
????????? - -????????????????????????????? 155
????????? - Manitoba???????????????? 41
????????? - Ontario-North???????????? 9
????????? - Ontario-South??????????? 52
????????? - Quebec??????????????????? 53
?????? 1996 -?????????????????????????? 2
?????? 2005 -?????????????????????????? 8
?????? 2006 -?????????????????????????? 145

? 8 record(s) selected.

?

HAVING子句与GROUP BY 子句一起使用,检索出满足特定条件的组的结果。

返回销售总量超过25的销售人员。

?

?SELECT sales_person, SUM(sales) AS total_sales FROM sales
? GROUP BY sales_person
? HAVING SUM(sales) > 25

?

SALES_PERSON??? TOTAL_SALES
--------------- -----------
GOUNOT?????????????????? 50
LEE???????????????????????????91

? 2 record(s) selected.

?

?

?

?

?


?

?????

????? ?

?

?

热点排行