您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 关系数据库标准语言SQL(带例子)
-1-关系数据库标准语言SQL一、查询功能SQL的核心是查询。SQL的查询命令也称作SELECT命令,它的基本形式由SELECT—FROM—WHERE查询块组成,多个查询块可嵌套执行。SQLSELECT命令的语法格式:SELECT[ALL|DISTINCT][TOP数值表达式[PERCENT]]字段名表FROM[FORCE][数据库名]表名[[AS]别名][[INNER|LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER]JOIN数据库名]表名[[AS]别名][ON条件][[INTO目标文件]|[TOFILE文本文件名[ADDITIVE]|TOPRINT[PROMPT]|TOSCREEN]][PREFERENCE名称][NOCONSOLE][PLAIN][OWAIT][WHERE条件[AND条件…][AND|OR条件[AND|OR条件…]]][GROUPBY字段名[,字段名…]][HAVING分组条件][UNION[ALL]查询命令][ORDERBY表达式[ASC|DESC][,表达式[ASC|DESC]…]]短语的含义:SELECT说明要查询的数据;FROM说明要查询的数据来自哪个或哪些表;WHERE说明查询条件;GROUPBY短语用于对查询结果进行分组,可以利用它进行分组汇总;HAVING必须跟随GROUPBY使用,用来限定分组必须满足的条件;ORDERBY用来对查询结果进行排序。以上短语是学习和理解SQLSELECT命令必须掌握的。1、简单查询SELECT字段名表|*FROM表名[WHERE条件]例如:SELECT*from课程SELECT学号,姓名,性别,出生日期from学生where性别=女2、简单联接查询SELECT字段名表|*FROM表名[WHERE联接条件AND条件]-2-例如:SELECT学生.学号,姓名,课程号,成绩from学生,选修where学生.学号=选修.学号and性别=女上式也等价于(下式运用了别名的操作):SELECTs.学号,姓名,课程号,成绩from学生s,选修xwheres.学号=x.学号and性别=女3、嵌套查询SELECT字段名表|*FROM表名[WHERE条件[NOT]IN(SELECT字段名表|*FROM表名[WHERE条件])]外层查询依赖于内层查询的结果,而内层查询与外层查询无关。例如:1、SELECT学号,姓名from学生where学号in(select学号from选修)2、selectdistinct学号from选修where成绩(selectavg(成绩)from选修)4、几个特殊运算符数值型字段名BETWEEN…AND…表示“介于…和…之间”;LIKE是字符串匹配运算符,在其后可使用“*公司”、“?公司”等字符串。例如:1、SELECT学号,姓名from学生where姓名like*玉*2、SELECT学号,课程号,成绩from选修where成绩between80and895、排序使用SQLSELECT可以将查询结果排序,具体格式为:ORDERBY表达式[ASC|DESC][,表达式[ASC|DESC]…]例如:SELECT学号,课程号,成绩from选修where成绩between80and89orderby课程号,成绩desc6、简单的计算查询SQL语言是完备的,也就是说,只要数据是按关系方式存入数据库的,就能构造合适的SQL命令把它检索出来。事实上,SQL不仅具有一般的检索能力,而且还有计算方式的检索。用于计算检索的函数有:(1)COUNT——计数(2)SUM——求和(3)AVG——计算平均值(4)MAX——求最大值-3-(5)MIN——求最小值这些函数可以用在SELECT短语中对查询结果进行计算。例如:1、SELECTavg(成绩)from选修2、SELECTavg(成绩)as平均成绩from选修7、分组与计算查询利用GROUPBY子句进行分组计算查询使用得更加广泛。格式如下:GROUPBY分组表达式1[,分组表达式2…][HAVING分组条件]注:HAVING子句总是跟在GROUPBY子句之后,不可单独使用。HAVING子句和WHERE子句不矛盾,在查询中是选用WHERE子句限定元组,然后进行分组,最后再用HAVING子句限定分组。SELECT课程号,avg(成绩)as平均成绩from选修groupby课程号8、利用空值查询SELECT字段名表|*FROM表名WHERE字段名IS[NOT]NULL注:查询空值时要使用ISNULL,而=NULL是无效的,因为空值不是一个确定的值,所以不能用“=”这样的运算符进行比较。Select*from课程where教师isnull9、别名与自联接查询在联接操作中,经常需要使用关系名作前缀,有时这样显得很麻烦。因此,SQL允许在FROM短语中为关系名定义别名,格式为:关系名别名SQL不仅可以对多个关系实行联接操作,也可以将同一关系与其自身进行联接,这种联接称为自联接。在可以进行自联接操作的关系上,实际存在着一种特殊的递归联系,即关系中的一些元组,根据出自同一值域的两个不同的属性,可以与另外一些元组有一种对应关系(一对多的联系)。例如:SELECTt.身份证号,t.姓名,s.姓名AS家长姓名FROMtStudsINNERJOINtStudtONs.身份证号=t.家长身份证号10、内外层互相关嵌套查询在嵌套查询中,有时内层查询的条件需要外层查询提供值,而外层查询的条件又需要内层查询的结果,这种查询为内外层互相关嵌套查询。格式如下:-4-SELECT别名1.字段名1[,别名1.字段名2…]FROM表名别名1[WHERE条件[NOT]IN(SELECT表达式FROM表名别名2WHERE别名1字段名=别名2字段名)]注:在此种查询中,是给一个表取了两个不同的别名;也就是说,无论外层还是内层都是在一个关系中进行的查询。通俗的看,就是将一个表看成两份。11、使用量词和谓词的查询前面我们使用过IN的NOTIN运算符,除此之外还有两类和子查询有关的运算符,形式如下:表达式比较运算符[ANY|ALL|SOME](子查询)[NOT]EXISTS(子查询)ANY、ALL和SOME是量词,其中ANY和SOME是同义词,在进行比较运算时只要子查询中有一行能使结果为真,则结果就为真;而ALL要求子查询中的所有行都使结果为真时,结果才为真。EXISTS是谓词,EXISTS和NOTEXISTS是用来检查在子查询中是否有结果返回,即存在元组或不存在元组。SELECT字段名表|*FROM表名WHERE表达式比较运算符[ANY|ALL|SOME](子查询)SELECT字段名表|*FROM表名WHERE[NOT]EXISTS(子查询)12、超联接查询SQL有专门的联接运算语法格式,它支持超联接查询,我们从SQLSELECT语句的完事语法格式中抽出与联接运算有关的语法格式如下:SELECT……FROM表名1[INNER|LEFT|RIGHT|FULL]JOIN表名2ON联接条件[WHERE……]其中:INNERJOIN为普通的联接;LEFTJOIN为左联接,即除满足联接条件的记录出现在查询结果之中外,第一个表中不满足联接条件的记录也出现在查询结果中;RIGHTJOIN为右联接,即除满足联接条件的记录出现在查询结果之中外,第二个表中不满足联接条件的记录也出现在查询结果中;FULLJOIN称为全联接,即两个表中的记录不管是否满足联接条件将都在目标表或查询结果中出现,不满足联接条件的记录对应部分为NULL。注意:这里的SQLSELECT语句的联接格式只能实现两个表的联接,如果要实现多个表的联接,还需要使用标准格式。-5-Select学生.学号,姓名,课程号,成绩from学生innerjoin选修on学生.学号=选修.学号13、集合的并运算SQL支持集合的并(UNION)运算,即可将两个SELECT语句的查询结果通过并运算合并成一个查询结果。为了进行并运算,要求两个查询结果具有相同的字段个数,并且对应字段的值要出自同一个值域,即具有相同的数据类型和取值范围。例如:SELECT学号,姓名,性别,家庭住址from学生where家庭住址like湖*unionSELECT学号,姓名,性别,家庭住址from学生where家庭住址like广*”二、操作功能SQL的操作功能是指对数据库中数据的操作功能,主要包括数据的插入、更新和删除三个内容。1、插入INSERTINTO表[(字段名1[,字段名2,…])]VALUES(记录值1[,记录值2,…])]例如:INSERTINTO课程VALUES(008,公文写作,01,王鸽,2)INSERTINTO课程(课程号,课程名称,教师,学分)VALUES(010,外国文学,王竹,2)2、更新SQL的数据更新命令格式如下:UPDATE表名SET字段名1=表达式1[,字段名2=表达式2,]WHERE条件例如:update学生set录取分数=录取分数+53、删除SQL从表中删除数据的命令格式如下:DELETEFROM表名[WHERE条件]这里的删除为逻辑删除记录,如果不使用WHERE子句,将删除该表中的全部记录。例如:deletefrom课程where课程号=010三、定义功能标准SQL的数据定义功能非常广泛,一般包括数据库的定义、表的定义、视图的定义、存储过程的定义、规则的定义和索引的定义-6-等若干部分。1、表的定义前面介绍了通过表设计器建立表的方法,也可以通过SQL的CREATETABLE命令建立表,相应的命令格式为:CREATETABLE表[NAME长表名][FREE](字段名1字段类型[(宽度[,小数位])][NULL][NOTNULL][CHECK定义域完整性的表达式[ERROR出错提示信息]][DEFAULT默认值][PRIMARYKEY|UNIQUE][REFERENCES建立联系的表[TAG索引名1]][NOCPTRANS][,字段名2,…][,PRIMARYKEY索引表达式TAG索引名2|,UNIQUE唯一索引表达式TAG索引名3][,FOREIGNKEY普通索引表达式TAG索引名4[NODUP]REFERENCES建立联系的表[TAG索引名5]][,CHECK定义域完整性的表达式[ERROR出错提示信息]])|FROMARRAY数组从以上句法格式基本可看出,用CREATETABLE命令建立表可以完成表设计器完成的所有功能。除建立表的基本功能外,它还包括满足实体完整性的主关键字(主索引)PRIMARYKEY、定义域完整性的CHECK约束及出错提示信息ERROR、定义默认值的DEFAULT等。另外,还可以使用FOREIGNKEY短语为建立普通索引;使用REFERENCES短语建立表之间的联系。CREATETABLE命令中可以使用的数据类型及说明数据类型说明bit是/否int长整型real单精度浮点型-7-2、表的删除删除表的SQL命令是:DROPTABLE表DROPTABLE直接从磁盘上删除表所对应的.dbf文件。如表是数据库中的表并且相应的数据库是当前数据库,则从数据库中删除了表;否则虽然从磁盘上删除了.dbf文件,但是记录在数据库.dbc文件中的信息却没有删除,此后会出现错误提示。所以要删除数据库中的表时,最好使数据库是当前打开的数据库,在数据库中进行操作。3、表结构的修改修改表结构的命令是ALTERTABLE,该命令有三种格式。格式1:ALTERTABLE表名ADD|ALTE
本文标题:关系数据库标准语言SQL(带例子)
链接地址:https://www.777doc.com/doc-2628701 .html