VF课件(第4章)1分析_第1页
VF课件(第4章)1分析_第2页
VF课件(第4章)1分析_第3页
VF课件(第4章)1分析_第4页
VF课件(第4章)1分析_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

第4章关系数据库标准语言SQL

SQL结构化查询语言

使用查询向导或设计器创建查询文件标准函数视图的创建与使用

结构化查询语言SQLSQL(StructuredQueryLanguage,结构化查询语言)SQL标准是于1986年10月美国国家标准局(ANSI)的数据库委员会X3H2批准作为关系数据库语言的美国标准,随之,国际化标准组织(ISO)也作出了同样的决定.数据定义语言DDL、数据查询语言DQL、数据操纵语言DML、数据控制语言DCL第4章关系数据库标准语言SQL一体化语言高度非过程化简洁实用两种使用方法4.1SQL结构化查询语言

4.1.1SQL语言概述SQL包括数据定义、数据操纵、数据查询和数据控制4个部分,是一种功能齐全的数据库语言。特点是:

SQL功能

命令动词

——————————————————————

数据查询

SELECT

数据定义

CREATE、DROP、ALTER

数据操作

INSERT、UPDATE、DELETE

数据控制

GRANT、REVOKE创建表结构4.1.2

数据定义语言数据定义的功能是定义数据库的结构,简称DDL

CREATETABLE|DBF<表名>[FREE](<字段名1><类型>[(<宽度>[,小数位])][NULL|NOTNULL][CHECK<条件表达式1>[ERROR<提示信息1>]][DEFAULT<表达式1>][PRIMARYKEY|UNIQUE][REFERENCES表名2[TAG索引名1]][,<字段名2>…][,PRIMARYKEY表达式2TAG索引名2|,UNIQUE表达式3TAG索引名3][,FOREIGNKEY表达式4TAG索引名4REFERENCES表名3[TAG索引名5]][,CHECK<条件表达式2>[ERROR<提示信息2>]]第4章关系数据库标准语言SQL4.1.2

数据定义语言

TABLE和DBF是等价的,前者是标准的SQL语言的关键词,后者是VisualFoxPro的关键词。可选项FREE用于设定创建自由表。可选项NULL或NOTNULL用于设定该字段是否允许保存为空值。可选项CHECK用于设定字段的有效性规则,ERROR设定当违反有效性规则时,显示错误信息的内容。可选项DEFAULT用于设定字段的默认值。可选项PRIMARYKEY或UNIQUE用于设定该字段是否是主关键字或唯一关键字,即建立主索引或候选索引。可选项FOREIGNKEY和REFERENCES用于建立表的普通索引,并通过该索引建立与REFERENCES后面表(作为主表)的关系。建立一个名为“学生数据库1”的数据库,在其中建立一个“学生档案表1”,表结构和学生档案表类似。CreateDatabase学生数据库1Createtable学生档案表1(学号C(6)

PrimaryKey,姓名C(6)

Unique,;性别C(2)

check性别=“男”or性别=”女”Error“性别是男或女”,;入学成绩N(5,1)check入学成绩>400default550,所在系C(10),;出生日期D,团员否L)打开”学生数据库1“,创建“学生成绩表1”,并通过“学号”字段与“学生档案表1”建立关系。OpenDatabase学生数据库1Createtable学生成绩表1(学号C(6)

,课程编号C(6),平时成绩N(5,1),;期末成绩N(5,1),foreignkey学号Tag学号references学生档案表1)修改表的结构

【格式1】ALTERTABLE<表名1>ADD|ALTER[COLUMN]<字段名><字段类型>[(<宽度>[,小数位数])][NULL|NOTNULL][CHECK<条件表达式>][ERROR<提示信息>]][DEFAULT<表达式>][PRIMARYKEY|UNIQUE][REFERENCES表名2[TAG索引名]]功能:修改数据表的结构,为其添加新字段或修改已有字段的类型、宽度、有效性规则、错误信息、默认值,定义主关键字和联系等。说明:该格式的命令不能修改字段名,不能删除字段,也不能删除已定义的规则等

1.为“学生成绩表1”增加一个”总评成绩“字段,并为该字段设置有效性规则2.修改“学生成绩表1”的平时成绩字段的宽度Altertable学生成绩表1Alter平时成绩N(4,1)check平时成绩<=100;Error“平时成绩不能超过100分”Default80Altertable学生成绩表1add总评成绩N(4,1)check总评成绩<=100;Error“总评成绩不能超过100分”Default90修改表的结构

【格式2

】ALTERTABLE<表名>ALTER[COLUMN]<字段名>[NULL|NOTNULL][SETDEFAULT<表达式>][SETCHECK<条件表达式>[ERROR<提示信息>]][DROPDEFAULT][DROPCHECK]功能:主要用于定义、修改和删除有效性规则和默认值定义

说明:该格式的命令不能修改字段名和删除字段1.删除“学生成绩表1”的”总评成绩”的有效性规则2.修改(定义)“学生成绩表1”的”平时成绩”的有效性规则3.修改“学生成绩表1”的”总评成绩”的默认值4.删除“学生成绩表1”的”总评成绩”的默认值Altertable学生成绩表1alter总评成绩DropcheckAltertable学生成绩表1alter平时成绩Setdefault70Setcheck‘平时成绩<90’error’平时成绩不能大于90’Altertable学生成绩表1alter总评成绩Setdefault100Altertable学生成绩表1alter总评成绩dropdefault修改表的结构

【格式3

】ALTERTABLE<表名>[DROP[COLUMN]<字段名>][RENAMECOLUMN<原字段名>TO<新字段名>][SETCHECK<条件表达式>[ERROR<提示信息>]][DROPCHECK][ADDPRIMARYKEY<表达式>TAG<索引标识>[FOR<逻辑表达式>]][DROPPRIMARYKEY][ADDUNIQUE<表达式>[TAG<索引标识>[FOR<逻辑表达式>]]][DROPUNIQUETAG<索引标识>][ADDFOREIGNKEY<表达式>TAG<索引标识>[FOR<逻辑表达式>]REFERENCES<表名2>[TAG<索引标识>]][DROPFOREIGNKEYTAG<索引标识>]功能:该格式可以删除字段、可以修改字段名、可以定义、修改和删除表一级的有效性规则等1.把“学生档案表1”中的“所在系”的名字改成“系别”2.为“学生档案表1”设置“学号和姓名不能同时为空”的规则3.删除“学生档案表1”中的“团员否”的字段4.将“学生档案表1”中“学号+课程编号“定义成主索引Altertable学生成绩表1renamecolumn‘所在系’to‘系别‘Altertable学生成绩表1setcheck学号<>nulland姓名<>nullAltertable学生成绩表1drop团员否Altertable学生成绩表1addprimarykey‘学号+课程编号’tagxk第4章关系数据库标准语言SQL删除数据表【格式】DROPTABLE<表名>功能:删除指定的表插入记录

4.1.3数据操纵命令

【格式1】INSERTINTO<表名>[(<字段名1>[,<字段名2>,...])]VALUES(<表达式1>[,<表达式2>,...])功能:向指定数据表的末端插入一条新记录说明:当需要插入表中的所有字段的数据时,表名后面的字段名可以缺省,但插入数据的格式及顺序必须与表的结构完全吻合;若只需要插入表中某些字段的数据,就需要列出插入数据的字段名,相应的表达式的数据位置应与之相对应。insertinto学生档案表111;

(学号,姓名,性别,入学成绩);values('00101','amy','女',560)【格式2】INSERTINTO<表名>FROMARRAY数组名|FROMMEMVAR功能:向指定数据表的末端插入一条新记录,其值来自于数组或对应的同名内存变量说明:数组中各元素与表中各字段顺序对应。如果数组中元素的数据类型与其对应的字段类型不一致,则新记录对应的字段为空值;如果表中字段个数大于数组元素的个数,则多出的字段为空值

declarr(4)arr(1)='00102'arr(2)='tom'arr(3)='男'arr(4)=578insertinto学生档案表111fromarrayarr更新记录

4.1.3数据操纵命令

【格式】UPDATE<表名>SET<字段名1>=<表达式1>[,<字段名2>=<表达式2>……][WHERE<条件表达式>]功能:对表中的记录进行修改,实现记录数据更新说明:一般使用WHERE子句指定条件,以更新满足条件的一些记录的字段值,并且一次可以更新多个字段;如果不使用WHERE子句,则更新全部记录1.将”学生档案表”中”刘辉“同学的所在系改成”计算机系“2.将”学生成绩表”中计算机系学生的”总评成绩“等于”平时成绩“的30%加上”期末成绩“的70%。Update学生档案表set系别=‘计算机系’where姓名=‘刘辉’Altertable学生成绩表set总评成绩=平时成绩*0.3+期末成绩*0.7where系别=‘计算机系’删除记录

4.1.3数据操纵命令

【格式】DELETEFROM<表名>[WHERE<条件表达式>]功能:从指定的表中,根据指定的条件逻辑删除记录说明:使用FROM指定从哪个表中删除,WHERE指定被删除的记录所满足的条件,如果不使用WHERE子句,则删除该表中的全部记录。

该命令是加逻辑删除标记,并没有从物理上删除。只有执行了PACK命令,逻辑删除的记录才真正地从物理上删除。4.1.4SELECT数据查询命令

查询命令SELECT是SQL语言的核心,SELECT命令的基本结构是SELECT…FROM…WHERE,它包含输出字段、数据来源、条件查询等基本子句。在这种固定格式中,可以不要WHERE,但是SELECT和FROM是必备的。例4-1查询全体学生的学号、姓名和年龄。

程序清单如下:

SELECT学号,姓名,年龄

FROMS例4-2查询学生的全部信息。

程序清单如下:

SELECT*FROMS注意:用‘*’表示表的全部列名,而不必逐一列出。4.1.4SELECT数据查询命令

基本查询

【格式】SELECT[ALL|DISTINCT][别名.]<选项>

[[AS]<列名>]...]FROM[<数据库名>!]<表名>DISTINCT和ALL选项的用法在SQL语句中,ALL表示输出所有记录,包括重复记录;DISTINCT表示输出无重复结果的记录。系统默认ALL选项。AS选项的用法在默认情况下,在数据查询结果中所显示出来的列标题就是在创建表时使用的字段名。但有时用AS选项给列或字段指定一个新的显示别名。新列名应遵循字段名的规定,中间不能有空格。使用时也可省略ASStudentSnumberSnameSsex

SdeptSdateSgrade001小红女信息系19569002小刚男税务系20589003小明男金融系185681。查询学生数据库中的”学生档案表“的所有学生的”姓名“”学号“2。根据学生档案表,列出所有系的系名3。输出学生数据库中的”学生档案表“的所有学生的”姓名“”学号“‘年龄’,其中没有年龄字段名,但有”出生日期“selectSnumber,SnamefromstudentselectdistinctSdeptfromstudent3。输出学生数据库中的”学生档案表“的所有学生的”姓名“”学号“‘年龄’,其中没有年龄字段名,但有”出生日期“selectSnumberas学号,Snameas姓名,;year(date())-year(Sdate)as年龄fromstudent第4章关系数据库标准语言SQL4.1.4SELECT数据查询命令

条件查询【格式】WHERE<条件表达式1>[AND|OR<条件表达式2>…]使用逻辑运算符用逻辑操作符AND、OR和NOT来连接一系列的表达式,及优化查询过程。使用逻辑运算符时,遵循下列原则使用AND返回满足所有条件的行使用OR返回满足任一条件的行使用NOT返回不满足条件的行使用圆括号为表达式分组改变表达式求值顺序增加表达式的可读性使用逻辑运算符(续)搜索条件的顺序MicrosoftSQLServer2000首先求NOT表达式的值,然后是AND,最后是OR当表达式中所有的操作符优先级相同时,求值顺序由左到右使用逻辑运算符(续)SELECT学号,姓名,年龄,

系别FROM学生信息表

WHERE(姓名LIKE‘张%’OR系别

=信息系)

AND(年龄>16)学号姓名年龄系别014张霞21外语029梁咪22信息062张晓天21金融示例

BETWEEN用法

【格式】<字段>BETWEEN<范围始值>AND<范围终值>功能:字段内容在指定的范围内。IN用法

【格式IN(<数据项列表>)功能:字段内容是结果集合或子查询中的内容1.根据学生档案表,输出计算机系入学成绩不低于90分的学生的姓名,学号2.根据学生档案表,输出计算机系入学成绩介于80分到90分之间的学生的姓名,学号3.根据学生档案表,输出计算机系和金融系学生的姓名,学号(两种表示方法)selectSnumberas学号,Snameas姓名fromstudentWhereScore>=90andsdept=‘计算机系’selectSnumberas学号,Snameas姓名fromstudentWhere(Scorebetween80and90)andsdept=‘计算机系’selectSnumber,SnamefromstudentWheresdept=‘计算机系’orsdept=‘金融系’selectSnumber,SnamefromstudentWheresdeptin(‘计算机系’,‘金融系’)检索一定范围内的值使用BETWEEN来查询在一定范围内的值,使用BETWEEN时,注意SQLServer返回的结果集中,包含范围内的边缘值尽量使用BETWEEN,而不用AND和比较操作符表示的表达式(>=xAND<=y)。要使结果集不包含边缘值,则使用(>xAND<y)要返回不在指定区域的行时,使用NOTBETWEEN使用值列表作为搜索条件使用IN语句指定一个值的列表作为查询条件。使用IN时,注意使用IN搜索条件和使用由OR操作符连起来的一系列比较操作符,其效果是等价的在搜索条件中不能包含NULL值,这将返回不可预测的结果集使用NOTIN搜索条件来返回值不在指定列表中的行。使用NOT会降低数据检索速度4.1.4SELECT数据查询命令

条件查询LIKE及通配符

【格式】<字段>LIKE<字符表达式>功能:对字符型数据进行字符串比较,提供两种通配符,即下划线“_”和百分号“%”,下划线表示1个字符,百分号表示0个或多个字符

NULL用法

【格式】IS[NOT]NULL

功能:测试字段值是否为空值说明:在查询时用“字段名IS[NOT]NULL”的形式,而不能写成“字段名=NULL”或“字段名!=NULL”1。输出学生数据库中的“学生档案表”的所有“李”姓学生的“姓名”“学号”。2。输出学生数据库中的”学生档案表”的所有“李”姓,且名字只有一个字的学生的“姓名”“学号”。3。输出”学生档案表“的所有添加了简历的学生的”姓名“”学号”。selectSnumber,SnamefromstudentWheresnamelike’李%’selectSnumber,SnamefromstudentWheresnamelike’李_’selectSnumber,SnamefromstudentWhereSresumeisnotnull使用比较运算符操作符描述=等于>大于<小于>=大于或等于<=小于或等于<>不等于使用比较操作符来比较表中的值与指定的值或表达式的值使用比较运算符(续)SELECTlastname,cityFROMstudentWHEREcountry='USA'lastnamecityDavolioSeattleFullerTacomaLeverlingKirklandPeacockRedmondCallahanSeattle示例简单的计算查询

4.1.4SELECT数据查询命令

用于计算查询的函数很多,常用的函数及其功能如下:

聚合函数描述AVG计算表达式中平均值COUNT表达式中值的数目COUNT(*)所选择的行的数目MAX表达式中的最大值MIN表达式中最小值SUM计算表达式中所有值的和STDEV样本标准偏差STDEVP填充标准偏差VAR样本方差VARP总体方差函数功能AVG(<字段名>)求一列数据的平均值SUM(<字段名>)给出一列数据的和COUNT(<*>)输出查询的行数MIN(<字段名>)给出列中的最小值MAX(<字段名>)给出列中的最大值1。输出“学生档案表”中学生入学成绩的最高分,最低分,平均分,总分。2。统计“学生档案表”中计算机系的女生的人数。selectmax(Score),min(Score),avg(Score),sum(Score)fromstudentselectcount(*)fromstudentwheresex=‘女’【1】在student表中,找出系的数目。

SELECTCOUNT(DISTINCTsdept)FROMstudent

说明:

除非对关系中的元组个数进行计数,一般应用COUNT函数应该使用DISTINCT。例如:

SELECTCOUNT(*)FROMstudent

将给出学生的记录数是6个。

【2】在职工表中,求支付的工资总数。

SELECTSUM(工资)FROM职工结果是:6160。这个结果是职工关系中的工资值的总和,它并不管是否有重复值。这时若使用命令:

SELECTSUM(DISTINCT工资)FROM职工

将得出错误的结果4910。原因是DISTINCT命令去掉重复值1250。

【5】在student中,求在计算机系的学生的最高分SELECTMAX(score)FROMstudentWHEREsdept=“计算机系"

结果是:1250

与MAX函数相对应的是MIN函数(求最小值)。比如,求最低分可以有如下命令:

SELECTMIN(score)FROMstudentWHEREsdept=“计算机系"

多表查询

4.1.4SELECT数据查询命令

在多表之间进行查询就比较复杂,必须处理表和表间的等值连接关系。等值连接是按对应字段的共同值将一个表中的记录与另一个表中的记录相连接。学号姓名性别出生日期所在系团员否入学成绩简历照片030102王萧丽女1981-12-23信息系F521.5MemoGen030221张宇辉男1982-05-16税务系F543MemoGen030101李俊明男1981-09-09会计系T499MemoGen030105刘少波男1982-11-15会计系F520MemoGen030104白兰兰女1980-05-22税务系F531MemoGen030219张曦女1981-09-03税务系T545MemoGen030108陈志寒男1982-07-12信息系T526MemoGen030216钱宇龙男1982-05-08金融系F522MemoGenstudent课程编号课程名称学时学分020469计算机原理543020489数据库理论543010350VB543020499C语言543020301计算机导论543020490数据结构724010304平面图形设计362sc学号课程编号平时成绩期末成绩总评0301010203812685860301010203012687900301020204892575780301030204692788890301040103502467710301040204992994950301050203013081.587sg学号姓名性别出生日期所在系团员否入学成绩简历照片030102王萧丽女1981-12-23信息系F521.5MemoGen030221张宇辉男1982-05-16税务系F543MemoGen030101李俊明男1981-09-09会计系T499MemoGen030105刘少波男1982-11-15会计系F520MemoGen030104白兰兰女1980-05-22税务系F531MemoGen030219张曦女1981-09-03税务系T545MemoGen030108陈志寒男1982-07-12信息系T526MemoGen030216钱宇龙男1982-05-08金融系F522MemoGenstudent课程编号课程名称学时学分020469计算机原理543020489数据库理论543010350VB543020499C语言543020301计算机导论543020490数据结构724010304平面图形设计362学号课程编号平时成绩期末成绩总评0301010203812685860301010203012687900301020204892575780301030204692788890301040103502467710301040204992994950301050203013081.5871.输出所有学生的成绩单,要求给出学号,姓名,课程编号,课程名称,期末成绩

selectStudent.学号,姓名,课程编号,课程名称,总评fromstudent,sc,sgwhereStudent.学号=sg.学号andsg.课程编号=sc.课程编号selecta.学号,a.姓名,b.课程编号,b.期末成绩,c.课程名称from学生档案表a,成绩表b,课程表cwherea.学号=b.学号andb.课程编号=c.课程编号第4章关系数据库标准语言SQL连接查询

4.1.4SELECT数据查询命令

连接查询是一种基于多个表的查询。连接分为内部连接和外部连接。外部连接又分为左外连接、右外连接和全外连接

内部连接(INNERJOIN)指将所有满足连接条件的记录都包含在查询结果中。在VisualFoxPro中连接动词为INNERJOIN(等价于JOIN),连接条件用ON引出。1.输出所有学生的成绩单,要求给出学号,姓名,课程编号,课程名称,期末成绩selecta.学号,a.姓名,b.课程编号,b.期末成绩,c.课程名称from学生档案表a,成绩表b,课程表cwherea.学号=b.学号andb.课程编号=c.课程编号selecta.学号,a.姓名,b.课程编号,b.期末成绩,c.课程名称from学生档案表a

innerjoin

成绩表bona.学号=b.学号innerjoin

课程表conb.课程编号=c.课程编号SELECTbuyer_name,sales.buyer_id,qtyFROMbuyersINNERJOINsalesONbuyers.buyer_id=sales.buyer_idsalesbuyer_idprod_idqty114323151553711421003buyersbuyer_nameAdamBarrSeanChaiEvaCoretsErinO’Meliabuyer_id1234结果buyer_nameAdamBarrAdamBarrErinO’MeliaEvaCoretsbuyer_idqty11431553711ErinO’Melia41003示例连接查询

4.1.4SELECT数据查询命令

外部连接(OUTERJOIN)

左外连接(LeftOuterJoin):包括了左表(FROM子句中的第一个表)中的全部记录以及右表(FROM子句中的第二个表)中与之匹配的记录。

右外连接(RightOuterJoin):包括了右表中的全部记录以及左表与之匹配的记录。

全外部连接(FullOuterJoin):包括了左表和右表所有的记录。使用外联接左(右)外联接可以从两个表中返回符合联接条件的记录,同时也将返回左(右)边不符合联接条件的记录使用左(右)外联接时,请注意不满足联接条件的记录将显示空值左联接可以显示第一个表中所有记录右联接可以显示第二个表中所有记录可以把LEFTOUTERJOIN或RIGHTOUTERJOIN简写为LEFTJOIN或RIGHTJOIN1.从学生档案表中输出所有期末成绩大于90分的学生的学号,姓名,课程编号,期末成绩selecta.学号,a.姓名,b.课程编号,b.期末成绩from学生档案表a

leftouterjoin

成绩表bona.学号=b.学号andb.期末成绩>90SELECTbuyer_name,sales.buyer_id,qtyFROMbuyersLEFTOUTERJOINsalesONbuyers.buyer_id=sales.buyer_idsalesbuyer_idprod_idqty114323151553711421003buyersbuyer_nameAdamBarrSeanChaiEvaCoretsErinO’Meliabuyer_id1234结果buyer_nameAdamBarrAdamBarrErinO’MeliaEvaCoretsbuyer_idqty11431553711ErinO’Melia41003SeanChaiNULLNULL示例使用全外部连接SELECTbuyer_name,qtyFROMbuyers

fullouterJOINsales结果buyer_nameAdamBarrAdamBarrAdamBarrAdamBarrqty1553711

AdamBarr1003

SeanChai15

SeanChai5

SeanChai37

SeanChai11

SeanChai1003

EvaCorets15

......salesbuyer_idprod_idqty114323151553711421003buyersbuyer_id1234buyer_nameAdamBarrSeanChaiEvaCoretsErinO’Melia示例联接两个以上的表联接任意数目的表都有可能,通过使用共同拥有的字段,任何一个表都可以和其他表联接自联接(Self-Join)使用自联接,可以查询一个表中各记录之间的关系使用自联接时,应注意

引用表的两份副本时,必须使用表的别名生成自联接时,表中每一行都和自身比较一下,并生成重复的记录,使用WHERE子句来消除这些重复记录1.列出经理极其职员的清单雇员号雇员姓名经理E3赵勇E4钱潮E3E6孙洁E3E8李路E6selecta.雇员姓名,‘领导’,b.雇员姓名from雇员表a,雇员表bWherea.雇员号=b.经理赵勇领导钱潮赵勇领导孙洁孙洁领导李路排序查询

4.1.4SELECT数据查询命令

ORDERBY子句

【格式】ORDERBY<排序项1>[ASC|DESC][,<排序项2>[ASC|DESC]...]

功能:缺省值为升序排列,用ASC表示。降序排列,用DESC表示。如果希望对多字段进行排序,要在ORDERBY后面的字段名与字段名之间加上逗号SELECTproductid,productname,categoryid,Unitprice

FROMproductsORDERBYcategoryid,unitpriceDESCproductidproductnamecategoryidunitprice38CotedeBlaye1263.500043IpohCoffee146.00002Chang119.0000…………63Vegie-spread243.90008NorthwoodsCranberrySauce240.000061Siropd'érable228.5000…………示例1。输出所有学生的入学成绩单,按“所在系”列出学号,姓名,所在系,如果“所在系”相同,再按“期末成绩”由高到低排序。selecta.学号,a.姓名,a.所在系from学生档案表aorderbya.所在系,入学成绩desc排序查询

4.1.4SELECT数据查询命令

TOP用法

【格式】TOP<数值表达式>[PERCENT]

说明:TOP短语要与ORDERBY短语同时使用才有效。

当不使用PERCENT时,<数值表达式>是1至32767之间的整数,说明显示前几个记录;当使用PERCENT时,<数值表达式>是0.01至99.99间的实数,说明显示结果中前百分之几的记录。

TOP短语不在相同值间作选择。例如指定输出前5项的记录,但第5项记录和第6项值相同,则查询输出6项记录。1。输出学生档案表中“入学成绩”最高的前3个学生的姓名,所在系,入学成绩selecttop3学号,姓名,所在系from学生档案表orderby入学成绩desc限制返回的行数

SELECTTOP2*

FROMstudentorderbyScore

SELECTTOP20PERCENT*

FROMstudentorderbysage分组查询

4.1.4SELECT数据查询命令

GROUPBY子句

【格式】GROUPBY<分组列名1>[,<分组列名2>...]

功能:GROUPBY子句可以将查询结果按指定字段值在行的方向上进行分组。GROUPBY子句与统计函数一起完成对每一个组生成一行和一个汇总值的功能,即每组产生一个汇总记录。1、输出学生档案表中所在系,各系学生的平均入学成绩和各系的人数select所在系,avg(入学成绩)as‘平均成绩’,count(*)as‘人数’from学生档案表groupby所在系使用GROUPBY子句SELECTproductid,orderid

,quantityFROMorderhist

GOSELECTproductid,SUM(quantity)AStotal_quantityFROMorderhistGROUPBYproductid

GOproductidtotal_quantity115235345productidorderidquantity11511102110222531153230productidtotal_quantity235只对满足WHERE子句的行分组SELECTproductid,SUM(quantity)AStotal_quantityFROMorderhistWHEREproductid=2GROUPBYproductid

GO示例1示例2分组查询

4.1.4SELECT数据查询命令

HAVING用法

功能:HAVING子句用来指定每一分组内应满足的条件。在使用HAVING子句时,它应该与GROUPBY子句连用,并放在GROUPBY子句之后,不可以单独使用。说明:HAVING子句和WHERE子句不矛盾,在查询中先用WHERE子句限定元组,然后进行分组,最后再用HAVING子句限定分组。

1。输出学生档案表中学生人数至少有5人的系名和人数。2。输出学生档案表中团员人数超过3人的系名和人数。select所在系,count(*)as‘人数’from学生档案表groupby所在系having人数>=5select所在系,count(*)as‘人数’from学生档案表where团员否=.t.groupby所在系having人数>3联合使用GROUPBY子句和HAVING子句(续)SELECTproductid,orderid,quantityFROMorderhist

SELECTproductid,SUM(quantity)AStotal_quantityFROMorderhistGROUP

温馨提示

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

评论

0/150

提交评论