计算机软件及应用SQL语言_第1页
计算机软件及应用SQL语言_第2页
计算机软件及应用SQL语言_第3页
计算机软件及应用SQL语言_第4页
计算机软件及应用SQL语言_第5页
已阅读5页,还剩129页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程目标

学习如下内容

函数的使用

>字符串函数、算术函数、日期函数、统计函数

>其它函数

SQL数据查询语言

数据操纵

>INSERT>UPDATE>DELETE语句

查询结果的集合运算

>UNION>INTERSECT、MINUS

♦事务控制命令

SQL函数的类型(P.27)

函数

单行(Single-row)移行(Multiple-row)

函数-A函薮

SQL函数的类型

字符串函数

算术函数

♦:♦日期函数

♦:♦统计函数

其它函数

单行函数

>操作数据项

>接受参数返回一个值

>作用于返回的每一行

>每行返回一个结果

>可以改变数据类型

>可嵌套使用

functionname(column|expression,[argl,arg2,...])

字符串函数

函数返回值

ASCn(char)字符串首字符的ASC码值

CHR(n)ASC码值为n的字符

CONCAT(strl,str2)把两个列值拼接起来;“『操作符更通用

INITCAP(char)将字符串中每个单词的首字母大写

INSTR(char,c)返回指定字符的位置

LENGTH(char)计算字符串的长度

SUBSTR(char,m[,n])求子串。column中从起始位置m开始长度

为n的子串

Replace(str1,str2,str3)

字符串函数

LOWER(char)、将字符串中所有的大写字母变为小

UPPER(char)(大)写

LPAD(char1,n[,char2])从左侧用字符串char2补齐字符串

char1至长度n(右对齐)

RPAD(char1,n[,char2])从右侧用char2补齐charl至长度n.

LTRIM(char[,SET])把char中最左侧的若干个字符去掉,

以使其首字符不在SET中

RTRIM(char[,SET])把char中最右侧的若干个字符去掉,

以使其尾字符不在SET中

TO_DATE(char[?fmt])将字符型的日期转换为日期型

TONUMBER(char[,f将字符串转换为数字

mt])

字符处理函数示例(1)

函数结果

CONCAT(TGood!,1String»)GoodString

SUBSTR。String11,3)Str

LENGTH。StringI6

INSTR(!String1,fr»)3

LPAD(sal,10/*T)******5000

TRIM(SFROM!SSMITHJMITH

字符处理函数示例(2)

selectempno,lower(ename),IsDoing;initcap(job)fromemp;

selectempno,concat(concat(concat(ename/^conca^lsVf))job)

fromemp;

selectempno,substr(ename,l,l)||7||lower(ename),substr(job,293)

fromemp;

selectempno,lpad(empno,10/#1)fromemp;

算术函数

函数返回值

ABS(n)返回n的绝对值

CELL(n)返回大于或等于n的最小整数

EXP(n)返回e的n次幕

FLOOR(n)返回小于或等于n的最大整数

LN(n)返回以E为底的n的对数

LOG(m,n)返回以m为底的n的对数

MOD(m,n)返回m除以n的余数

PI()返回常数3.1415926535897931

POWER(m,n)返回m的n次方

算术函数

ROUND(m[,n])对m进行四舍五入(n大于0时,将m四舍

五入到小数点右边n位,n等于零时,表示

对m进行取整,n小于0时,则小数点左边

的数字位置被圆整。

SIGN(n)判断n的正负(n大于0返回,n等于0返回0,

n小于0返回-1

SQRT(n)返回n的平方根

SQUARE(n)返回n的平方

TRUNC(m[,n])对m进行截断操作(n截断到小数点后第n

位,如果n未给出,则系统默认为0,n也可

以为负数,表示小数点左边的数字位置被

删除成零。

算术函数示例(1)

ROUND:四舍五入

TRUNC:截取

MOD:模

算术函数示例(2)

selectsal/22fromemp;

selectename,round(sal/22,0),round(sal/22,-1)fromemp;

selectround(20,-2),round(35,-1)fromdual;

selecttrunc(35,-l),trunc(12356.67,-2)fromdual;

日期函数

默认的日期格式:DD-MON-YY

函数返回值

ADD_MONTHS(d,n)返回日期d添加n个月的日期

LASTDAY(d)返回d所在月份最后一天的日期

MONTHS_BETWEEN(dl,d2)日期dl和d2之间相隔的月数

NEXT_DAY(d,day)d后第一周指定的日期。

ROUND(d,format)日期d按format格式进行舍入

TRUNC(d,format)返回截尾到由format指定单位

的日期上

SYSDATE返回系统当前日期和时间。

使用日期函数示例(1)

MONTHS_BETWEENfOI-SEP-95','11-JAN-94')

-------»19.6774194

ADD_MONTHS('11-JAN-94',6)—'11-JUL-94,

NEXT_DAT("01-SEP-95','FRIDAT')—'08・SEP-95'

LAST_DAr('O1-SEP-95')—'30-SEP-95'

ROUND(,25-JUL-95,,•MONTH')-»01-AUG-95

ROUND('25-JUL-gS\'YEAR')-a01-JAN-96

TRUNC('25«JUL-95','MONTH')—201-JUL-95

TRUNC('25»JUL・95','YEAR')-a01-JAN-95距

日期函数示例(2)

selectsysdatefromdual;

selectlast_day(sysdate)fromdual;

selectadd_months(sysdate,2)fromdual;

selectmonths_between(sysdate/12-3月-03")

fromdual;

selectnext_day(sysdate,1)fromdual;

日期运算总结

运算结果描述

日期十数字日期在某个日期上添加指定数量的日

日期•数字日期|在某个日期上减去指定数量的日

日期■日期日的数番两个日期之间相差的日数

日期十小时数/24日期在某个日期上添加指定数量的小时

日期和日期之间不能执行加运算

数据类型转换函数

TOCHAR(d,format)

TO_CHAR(num,format)

TO_NUMBER(string,format)

TO_DATE(string,format)

使用数据类型转换函数

,,

selectempno?ename,to_char(hiredate,yyyy-mm-dd)

fromemp;

selectto_char(sysdate,,yy,)fromdual;

createtabletest(dldate);

insertintotestvalues,19-10月-899)

select*fromtestwhere(to_char(dl/yy,)=89)

selectempno,ename,hiredate,to_char(sal/$99,999,)as

salaryfromemp;

selectto_char(sysdate/dd-mm-yy:hh:mi:ss,)fromdual;

selecttodateC*101319607mmddyyyy,)fromdual;

其它函数

NVL函数:

A功能:把可能包含了空值的表达式1,转换成有实际意义的

数据表达式2o

A格式:NVL(表达式1,表达式2)

A作用的数据类型:可用于字符型、数值型、日期型.

A注意事项:转换前后的类型必须一致:

-NVL(comm,0)

-NVL(hiredate,'O1-JAN-97")

-NVLUob,'NoJobYet')

DECODE函数

♦:♦类似于其他语言的或者

,用于分支判断

DECODE(col/expressionsearchi,resultl

[,search2,result2f...,]

[,default])

decode函数介绍

语法:

DECODE(expression,value1,returnedvalue1,...

valueN,returned_valueN

[defaultreturned_value])

含义:

当expression取值为valueN时,DEC0DE函数的返回值为

returnedvalueN

defaultreturnedvalue可选项,当expression不等于

Valuel至valueN的值时,DECODE函数的返回值为

defaultreturned_value。

Selectempno,initcap(enae),sal+nvl(comm,0)astotaIsa1

Fromemp

Orderbytotalsal;

EMPNOINITCAP(ENTOTALSAL

7369Smith800

7900James950

7876Adams1100

7934Miller1300

7844Turner1500

7521Ward1750

7499Allen1900

7782Clark2450

例1

Selecteno,cname,tno

decode(tno,825,4ZE萍',804,'李诚,,856,'李旭',)

Fromcourse;

enocnametnoDEC

3-105计算机导论825王萍

3-245操作系统804李诚

6-166数字电路856李旭

9-888高等数学825王萍

例2:

selectsum(sal)fromemp

groupbydecode(&xx,1,job,2,deptno)

输入xx的值:2

原值2:groupbydecode(&xx,l,job,2,deptno)

新值2:groupbydecode(2,l,job,2,deptno)

SUM(SAL)

8750

10875

9400

统计函数

函数格式功能

AVGAVG([DISTINCT|ALL]v列名〉)计算一列值的平均值(要求数值

列)

COUNTCOUNT([DISTINCT|ALL]*)统计元组个数

COUNTCOUNT([DISTINCT|ALL]<歹U统计一列中值的个数

名〉)

MAXMAX([DISTINCT|ALL]〈歹U名〉)求一列值中的最大值

MINMIN([DISTINCT|ALL]v列名〉)求一列值中的最小值

SUMSUM([DISTINCT|ALL]〈歹U名〉)计算一列值的总和(要求数值列)

STDDESTDDEV(〈歹名〉)・,计算一列值的标准差

V

VARIANVARIANCE(〈列名〉)计算一列值的方差

CE

SQL数据查询语言

查询语句的一般结构

单表查询

多表查询

嵌套查询

分组查询

集合查询

查询语句的一般结构

孝命令:SELECT

格式:

SELECT[ALL|DISTINCT]<目标列表达式>[,<目标列表达式

习…

FROM〈表名或视图名>[,〈表名或视图名刁…

A[HEREv条件表达式刁

>[GROUPBY〈歹名1>[HAVING<条件表达式>]]

>[ORDERBY〈歹lj名2>[ASC|DESC]];

描述:

>根据WHERE子句的条件表达式,从FROM子句指定的基本表或

视图中找出满足条件的元组,再按SELECT子句中的目标列表达

式,选出元组中的属性值形成结果表。如果有GROUPBY子句

则将结果按〈列名”的值进行分组,该属性列相等的元组为一个

组。通常会在每组中作用集函数。如果GROUP子句带有

HAVING短语,则只有满足指定条件的组才予输出。如果有

ORDERBY子句,则结果表还要按〈列名2>的值升序或降序排列。

单表查询

♦无条件查询

有条件查询

排序

单表查询-无条件查询(1)

查询所有列

>SQL>selectdept:

查询选若干列

ASQL>selectdeptnodnamefromdept;

ASQL>selectempno,sal*0.18fromemp;

单表查询-无条件查询(2)

♦:♦SELECT中的〈目标表达式>可以是表中的列,也可

以是表达式,包括算术表达式、字符串常数、函数

等。(字符串用单引号定界)。

1.使用算术表达式(+、・、*、/)

Selectempno,fromemp;

2.使用字符常量

Selectempno,,enamefromemp;

3.使用函数

Selectempno,(ename)fromemp;

单表查询-无条件查询(3)

4.改变列标题

Selectempno9sal,

job,deptfromemp;

5.使用连接字符串

Selectename||||'1"||"monthsalary=|||sal

asmonthyfromemp

6.消除重复行

>SQL>selectenamefromemp;

>SQL>selectenamefromemp;

单表查询-有条件查询(1)

查询满足条件的元组可以通过WHERE子句实现。

>[例]:

selectempno,ename,salfromemp;

>结果

EMPNOENAMESAL

7566JONES2975

7698BLAKE2850

7782CLARK2450

7788SCOTT3000

7839KING5000

7902CLARK3000

已选择6行。

单表查询-有条件查询(2)

WHERE常用的查询条件

查询谓词

条件

比较大小二,>,V,>=,<=,<>

确定范围BETWEENAND,NOTBETWEEN

AND

确定集合IN,NOTIN

字符匹配LIKE,NOTLIKE

空值ISNULL,ISNOTNULL

多重条件AND,OR

单表查询-有条件查询(3)

1.比较大小

>selectempno9ename9salfromempwheredeptno=10;

>Selectempno代name9salfromempwheresal>1500

2■确定范围

❖谓词BETWEENAND与NOTBETWEENAND°

。selectempno9ename9sal9deptnofromempwhere

deptno1020

❖selectempno,ename,sal,deptnofromempwheresal

10002000

单表查询-有条件查询(4)

3.确定集合

♦:♦谓词IN可以用来查找属性值属于指定集合

的元组。

❖selectempno9ename9sal9deptnofromemp

wheredeptno(10,30);

单表查询-有条件查询(5)

4.字符匹配

❖谓词可以用来进行字符串的匹配

❖一般格式:[NOT]LIKEY匹配串丁

三注释

。〈匹配串〉可以是一个完整的字符串,也可以含

有通配符的字符串。通配符包括'%,、"Jo

。%(百分号)代表任意长(长度为0)字符串。

❖_(下划线)代表任意单个字符。

❖selectempno9ename9sal9deptnofromempwhere

enamelike'S%';

单表查询-有条件查询(6)

5■空值___________________

♦:♦涉及空值查询时使用ISNULL或ISNOT

NULL,这里的IS不能用=替代。

。selectempno9ename9sal9deptnofromemp

wherecomm

❖selectempno9ename9sal9deptnofromemp

wherecomm

单表查询-有条件查询(7)

6■多重条件

❖用逻辑运算符NOT、AND和OR来联结多个查询条件。

。优先级:NOT、AND、OR(用户可以用括号改变优先级)。

IN谓词实际上是多个OR运算的缩写。

。selectempno9ename9sal9deptnofromempwhere

commisnotnullsal>1500;

❖selectename,job,salfromemp

where(job=fSALESMAN1orjob=6CLERK1)

andsal>1500;

单表查询-有条件查询(8)

7.SELECT的交互查询

>使用替代变量

>Definedepartnumber=20;

>Select*fromempwheredeptno=

&departnumber;

查询排序(1)

♦:♦用ORDERBY从句排序

>ASC:升序(缺省)

>DESC:降序

>表达式排序

>多列排序

>别名排序

>ORDERBY从句要放在SELECT语句的最后.

查询排序(2)-升序

±OracleSQL+Plus

文件⑹编辑(日搜索⑤选项@帮助⑻

SQL>selectempno,ename,job,salfromemp

2orderbysal;

EMPNOENAMEJOBSAL

7369SMITHCLERK800

7900JAMESCLERK950

7876ADAMSCLERK1100

7521WARDSALESMAN1250

7654MARTINSALESMAN1250

7934MILLERCLERK1300

7844TURNERSALESMAN1500

7499ALLENSALESMAN1600

7782CLARKMANAGER2450

7698BLAKEMANAGER2850

7566JONESMANAGER2975

7788SCOTTANALYST3000

7902FORDANALYST3000

7839KINGPRESIDENT5000

己选择1咯。默认情况下是升序排列

查询排序(3)-降序

土OracleSQL*Plus

文件(E)编辑(日搜索(分选项(Q)帮助(由

1selectenpno,ename,job,salFromemp

2*orderbysaldesc

EMPNOENAMEJOBSAL

7839KINGPRESIDENT5000

7788SCOTTANALYST3000

7902FORDANALYST3000

7566JONESMANAGER2975

7698BLAKEMANAGER2850

7782CLARKMANAGER2450

7499fiLLENSALESMAN1600

7844TURNERSALESMAN1500

7934MILLERCLERK1300

7521WARDSALESMAN1250

7654MARTINSALESMAN1250

7876ADAMSCLERK1100

7900JAMESCLERK950

7369SMITHCLERK800

己选择1咯。

查询排序(4)-表达式排序

±OracleSQL*Plus

文件⑹编辑⑹搜索⑸选项⑼帮助出

SQL>selectename,hiredate.deptno,,sal*12

2Fromemp

3orderbysal*12desc;

ENAMEHIREDATEDEPTNOSALSAL*12

KING17-11月-8110500060000

SCOTT19-4月-8720300036000

FORDG3-12月-8120300036000

024目

JONES--8120297535700

01-5m.

BLAKE-8130285034200

09目

-^6

CLARK20-2m.-8110245029400

ALLEN-8130160019200

08-9目

TURNER23-1m.-8130150018000

MILLER2--8210130015600

22目

-

WARD289m.-8130125015080

MARTIN23--8130125015000

5nR

ADAMS.-8720110013208

JAMESG3-12月-813095011400

SMITH17-12月-80208009600

己选择行。

查询排序(5)-多列排序

±OracleSQL*Plus

文件(日编辑(日搜索选项(6帮助(由

SQL>selectename,sal,deptno

2Fronemp

3orderbydeptno.saldesc;

ENAMESfiLDEPTNO

KING500010

CLARK245010

MILLER130010

SCOTT380020

FORD300020

JONES297520

ADAMS110020

SMITH80020

BLAKE285030

ALLEN160030

TURNER150030

WARD125030

MARTIN125030

JAMES95030

己选择14行。

查询-排序(6)-别名排序

土OracleSQL*Plus

文件(日编辑(巳搜索(切选项◎帮助(d)

SQL>selectempno,ename,sal*12annsal

2fromemp

3orderbyannsal;

EMPNOENAMEANNSAL

7369SMITH9600

7900JAMES11400

7876ADAMS13200

7521WARD15000

7654MARTIN15600

7934MILLER15600

7844TURNER18000

7499ALLEN19200

7782CLARK29400

7698BLAKE34200

7566JONES35700

EMPNOENAMEANNSAL

7788SCOTT36000

7902FORD36000

7839KING60000

己选择1岭亍。

常用的统计函数

函数格式功能

AVGAVG([DISTINCT|ALL]v歹ij名〉)计算一列值的平均值(要求数

值列)

COUNTCOUNT([DISTINCT|ALL]*)统计兀组个数

COUNTCOUNT([DISTINCT|ALL]〈歹U名统计一列中非空值的个数

>)

MAXMAX([DISTINCT|ALL]v列名》)求一列值中的最大值

MINMIN([DISTINCT|ALL]v列名〉)求一列值中的最小值

SUMSUM([DISTINCT|ALL]〈歹U名>)计算一列值的总和(要求数值

列)

STDDEVSTDDEV(〈歹U名〉)..计算一列值的标准差

VARIANCEVARIANCE。!^〉)计算一列值的方差

只有COUNT(*)函数不忽略空值。

例1:求出表emp中所有雇员的平均工资

SQL>selectavg(sal)fromemp;

AVG(SAL)

2073.2143

例2:计算工资在1000.3000之间的雇员人数

SQL>selectcount(empno)fromempwheresal

between1000and3000;

COUNT(EMPNO)

11

AVG,SUM

❖函数AVG和SUM应用于数值型.

SQL>SELECTAVG(sal),MAX(sal),

2MIN(sal)zSUM(sal)

3FROMemp

4WHEREjobLIKESALES%1;

MIN,MAX

MIN和MAX可用于任意类型.

SQL>SELECTMIN(hiredate),MAX(hiredate)

COUNT

♦:♦COUNT(*)返回符合条件的记录数.

SQL>SELECTCOUNT(*)

2FROMemp

3WHEREdeptno=30;

COUNT(叩加返回的的行数.

SQL>SELECTCOUNT(comm)

2FROMemp

3WHEREdeptno=30;

集合函数与Null

♦集合函数忽略列中的null值(COUNT除外).

SQL>SELECTAVG(comm)

2FROMemp;

在集合函数中可以使用NVL函数

NVL函数强制集合函数包括null值.

SQL>SELECTAVG(NVL(comm,0))

2FROMemp;

r

分组查询(1)

将查询结果表按某一列或多列值分组,值

相等的为一组。

EMP

DEPTNOSAL

102450

1050002916.6667

101300

2080DEPTNOAVG(SAL)

20110

20300

20300

20297

30160

30285

30125

3095

30150

30125

分组查询(2)

SELECT[column^group_function(column)

FROMtable

[WHEREcondition]

[ORDERBYcolumn];

分组查询(3)

A如果未对查询分组,集函数将作用于整个查

询结果;如果分组后集函数将作用于每一个组,

即每一个分组都有一个集函数。

A在包含GROUPBY子句的查询语句中,

SELECT子句后面的(除聚集函

数外),均应该包含在GROUPBY子句中。

SQL>SELECTdeptno,AVG(sal)

2FROMemp

3GROUPBYdeptno;

分组查询(4)

A[例]计算每个工种的平均工资

SOL>SELECTJOB,AVG(SAL)FROMEMP

GROUPBYJOB;

A结果

JOBAVG(SAL)

ANALYST3000

CLERK950

MANAGER2758.33333

PRESIDENT5000

SALESMAN1400

分组查询(5)

。GROUPBY子句

>[例]查询每个部门各工种的雇员数

SOL>SELECTJOB,DEPTNO,COUNTY*)

FROMEMPGROUPBYDEPTNO,JOB;

结果

JOBDEPCOUNT(*)

MANAGER101

PRESIDENT101

ANALYST202

CLERK202

MANAGER201

CLERK301

MANAGER301

SALESMAN304

分组查询(6)

使用多个列分组

EMP

DEPTNOJOBSAL

10MANAGER2450

DEPTNOJOBSUM(SAL)

10PRESIDENT5000

10CLERK1300

10CLERK1300

20CLERK800

10MANAGER2450

20CLERK1100

10PRESIDENT5000

20ANALYST3000

20ANALYST6000

20ANALYST3000

20CLERK1900

20MANAGER2975

20MANAGER2975

30SALESMAN1600

30CLERK950

30MANAGER2850

30MANAGER2850

30SALESMAN1250

30SALESMAN5600

30CLERK950

30SALESMAN1500

30SALESMAN1250

分组查询(7)

在GROUPBY从句中使用多个列

SQL>SELECTdeptno,job,sum(sal)

2FROMemp

3GROUPBYdeptno,job;;

DEPTNOJOBSUM(SAL)

10CLERK1300

10MANAGER2450

10PRESIDENT5000

20ANALYST6000

20CLERK1900

9rowsselected.

102450

105000

101300

20800

201100DEPTNOMAX(SAL)

203000

203000105000

202975203000

分组查询(9)

♦:♦使用HAVING从句选择满足条件分组

执行次序:

>对行进行分组.

>对每组数据执行组函数.

>返回符合HAVING从句的分组结果.

SELECTcolumn,group_function

FROMtable

[WHEREcondition]

[GROUPBYgroup_by_expression]

[HAVINGgroup_condition]

[ORDERBYcolumn];

WHERE与HAVING

行作用对象不同。

WHERE作用于基本表或视图,从中选择

满足条件的元组

HAVING短语作用于组,从中选择满足条

件的组。

[例]查询平均工资超过2000的部门,并按部门号进行排序

SQL>SELECTdeptno,avg(sal)fromemp

_____GROUPBYdeptno

HAVINGAVG(SAL)>2000

ORDERBYdeptno;

A结果

DEPTNOAVG(SAL)

ITT-------3725--------------------

202175

selectdeptno,max(sal)

fromemp

groupbydeptno;

selectename9deptno,max(sal)

fromemp、?

groupbydeptno;

selectename,sal

fromemp

where(deptno,sal)IN

;该语句执行什么结果?

(selectdeptno,max(sal)

fromemp

groupbydeptno);

SQL>selectdeptnovmax(sal)

2Fromenp

3groupbydeptno;

DEPTNOMAX(SAL)

105000

203000

302850

SQL>select:ename,deptno,max(sal)

2Frontemp

3groupbydeptzno;

selectename,deptzno,max(sal)

ERROR位于笫1行:

ORA-00979:不是GROUPBV表达式

»在包含GROUPBY子句的查询语句中,SELECT子

句后面的所有字段列表(除聚集函数外),均应该包

含在GROUPBY子句中。(必须保证是有意义的前

提下)

SQL>selectename,deptno,sal

2Fromemp

3where(deptno,sal)IN

H(selectdeptno,max(sal)

5Fromenp

6groupbydeptno);

ENAMEDEPTNOSAL

KING105000

SCOTT203000

FORD203000

BLAKE302850

Sql>selectdeptno,avg(sal)

fromemp;

从多个表中得到数据

EMPDEPT

DEPTNODNAMELOC

10ACCOUNTINGNEWYORK

20RESEARCHDALLAS

30SALESCHICAGO

40OPERATIONSBOSTON

EMPNODEPTNOLOC

1o

78393oNEWYORK

76981oCHICAGO

77822oNEWYORK

75663oDALLAS

76543oCHICAGO

7499CHICAGO

14rowsselected.

连接(Join)是什么?

使用连接(join)从多个表中查询数据.

SELECTtablel.column,table2.column

FROMtablel,table2

WHEREtablel.columnl=table2.column2;

>连接条件写在WHERE从句中.

>同一列名出现在多个表中时,列名前要

加上表名来区分.

连接查询

。连接操作是从笛卡尔积中选择满足条件的元组

♦:♦连接类型:

»交叉连接:笛卡尔积。

»内连接:使用比较运算符进行表间某列或某

些列数据的比较操作,并列出这些表中与连

接条件相匹配的数据行。内连接分为

、和O

»外连接:外连接不仅要列出与连接条件相匹

配的数据行,还要列出左表、右表或两个表

中所有不符合查询条件的数据行。外连接分

为、利。

笛卡尔(Cartesian)积

>以下情况可以出现笛卡尔积:

W连接条件省略

-连接条件非法

b一个表的所有行被连接到另一个表的

所有行

>为了避免笛卡尔积,一定要在WHERE

从句中包含合法的连接条件。

>SQL>SELECTencnne,dnamefromemp,dept;

生成笛卡尔积

EMP(14行)DEPT(4行)

EMPNOENAME…DEPTNODEPTNODNAMELOC

•••

7839KING…1010ACCOUNTINGNEWYORK

7698BLAKE…3020RESEARCHDALLAS

•••30SALESCHICAGO

7934MILLER…1040OPERATIONSBOSTON

ENAMEDNAME

KINGACCOUNTING

“笛卡尔积:BLAKEACCOUNTING

14*4=56行"f•••

KINGRESEARCH

BLAKERESEARCH

•••

56rowsselected.

内连接

等值与非等值连接查询

>连接条件的一般格式是:

>[〈表名1〉.]<列名1>[〈表名2>.]<列名2>

>也可以采用下面的形式:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论