您好,欢迎访问三七文档
关系语言SQL关系语言SQL1.1关系语言的概论1.2数据的定义1.3查询1.4数据更新1.5视图1.6临时表1.7查询优化1.8数据库日常操作1.1关系语言的概论SQL——StructuredQueryLanguage结构化查询语言SQL语言的主要特点之一:SQL是一种一体化的语言,它包括了数据定义、数据查询、数据操纵和数据控制等方面的功能,它可以完成数据库活动中的全部工作。而以前的非关系模型的数据语言一般包括存储模式描述语言、概念模式描述语言、外部模式描述语言和数据操纵语言等等,这种模型的数据语言,一是内容多,二是掌握和使用起来都不象SQL那样简单、实用。SQL语言的主要特点之二:SQL语言是一种高度非过程化的语言,它没有必要一步步地告诉计算机“如何”去做,而只需要描述清楚用户要“做什么”,SQL语言就可以将要求交给系统,自动完成全部工作。SQL语言的主要特点之三:SQL语言非常简洁,虽然SQL语言功能很强,但它只有为数不多的几条命令,下表给出了分类的命令动词,另外SQL的语法也非常简单,它很接近自然语言(英语),因此容易学习、掌握。SQL功能命令动词数据查询SELECT数据定义CREATE、DROP数据操纵INSERT、UPDATE、DELETE数据控制GRANT、REVOKESQL语言的主要特点之四:SQL语言可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用。现在很多数据库应用开发工具,都将SQL语言直接溶入到自身的语言之中,使用起来更方便。这些使用方式为用户提供了灵活的选择余地。此外,尽管SQL的使用方式不同,但SQL语言的语法基本是一致的。1.2数据的定义SQL语言支持三层模式结构SQL的数据定义功能基本表的定义视图的定义索引的定义CREATETABLEDROPTABLEALTERTABLECREATEVIEWDROPVIEWCREATEINDEXDROPINDEX基本表定义的语法图:数据类型一般有INT(整形)varchar(字符串)、CHAR(字符型)、NUMBER(数值型)、DATE(日期型)等,不同的系统可能还会提供BINARY(二进制型)、DATETIME(日期时间型)、TIME(时间型)、MONEY(货币型)、TEXT(文本型)和IMAGE(图象型)等等。);CREATETABLENOTNULL表名列名数据类型约束(,新建表格CREATETABLE订购单(职工号CHAR(2),供应商号CHAR(2),订购单号CHAR(4)NOTNULL,订购日期DATE);新建表格2另外一种建立表格方式:SELECT*INTO订购单2FROM订购单复制表格(包括表结构、数据)修改表结构的语法图:ALTERTABLEADDMODIFY表名列名数据类型();,修改表结构的命令格式:ALTERTABLE表名{ADD|MODIFY}(列名数据类型,列名数据类型,……列名数据类型);修改表结构的例:为订购单关系增加一个“完成日期”字段:ALTERTABLE订购单ADD完成日期DATE;将订购单关系的“职工号”字段的类型改为CHAR(4):ALTERTABLE订购单ALTERCOLUMN职工号CHAR(4);CHAR(2)可以放一个汉字注意在SQL中对修改表结构有诸多限制?如不可以改属性名、不可以删除属性等。(ALTERTABLE订购单ALTERCOLUMN职工号int;)从数据的完整性和独立性的角度来考虑删除表命令格式:DROPTABLE表名;例:DROPTABLE订购单;索引定义的语法图:索引:“聚集索引”(CLUSTERED)和“非聚集索引”(NONCLUSTERED)图书馆的例子:一个图书馆那么多书,怎么管理呢?建立一个字母开头的目录,例如:a开头的书,在第一排,b开头的在第二排,这样在找什么书就好说了,这个就是一个聚集索引,可是很多人借书找某某作者的,不知道书名怎么办?图书管理员在写一个目录,某某作者的书分别在第几排,第几排,这就是一个非聚集索引建立索引列:主键、外键、经常查询的列、WHERE子句中等索引定义的语法图:CREATEUNIQUEASCDESC索引名表名列名();,INDEXONCLUSTERED:建立聚集索引。NONCLUSTERED:建立非聚集索引。索引定义的命令格式:CREATE[UNIQUE]INDEX索引名ON表名(列名[ASC|DESC],……,列名[ASC|DESC]);建立索引的例:CREATEUNIQUEINDEXpur_idxON订购单(订购单号);CREATEINDEXsup_idxON订购单(供应商号);CREATEINDEXsup_emp_idxON订购单(供应商号,职工号);使用索引的原则:不应该在一个表上建立太多的索引(一般不超过两到三个),索引能改善查询效果,但也耗费了磁盘空间,降低了更新操作的性能,因为系统必须花时间来维护这些索引。除了为数据的完整性而建立的唯一索引外,建议在表较大时再建立普通索引,表中的数据越多,索引的优越性才越明显。索引的删除命令格式:DROPINDEX索引名;例:DROPINDEXsup_emp_idxON订购单;CREATETABLE表名(列名数据类型[NOTNULL][约束],列名数据类型[NOTNULL][约束],……列名数据类型[NOTNULL][约束]);基本表定义的命令格式:1.3查询SQL的数据查询功能基本格式:SELECT……FROM……WHERE……SQL查询命令语法图SELECTDISTINCTGROUPBY列名表名查询条件;,FROMWHERE,*列名,HAVING谓词ORDERBY列名ASCDESCCOMPUTE短语关键词解释:SELECT说明要查询的数据,“*”表示要指定表中的全部数据,DISTINCT说明要去掉重复元组;FROM说明要查询的数据来自哪个(些)表,可以基于单个表或多个表进行查询;WHERE说明查询条件,即选择元组的条件;GROUPBY短语用于对查询结果进行分组,可以利用它进行分组汇总;HAVING短语必须跟随GROUPBY使用,它用来限定分组必须满足的条件;ORDERBY短语用来对查询的结果进行排序;COMPUTE短语可以进行带明细的分组汇总。SQL查询命令格式:SELECT[DISTINCT]{*|表达式,…,表达式}FROM表名[,表名…][WHERE条件][GROUPBY列名[,列名…][HAVING谓词]][ORDERBY列名[ASC|DESC][,列名[ASC|DESC]…][COMPUTE…];例3.1:从职工关系中检索所有工资值。SELECT工资FROM职工;职工例3.1A:从职工关系中检索看工资值有哪些。(DISTINCT)SELECTDISTINCT工资FROM职工;职工例3.2:检索仓库关系中的所有元组。SELECT*FROM仓库;仓库“*”是通配符,以上命令等同于:SELECT仓库号,城市,面积FROM仓库;例3.3:检索工资多于1230元的职工号。SELECT职工号FROM职工WHERE工资1230;职工例3.4:哪些仓库有工资多于1210元的职工。SELECTDISTINCT仓库号FROM职工WHERE工资1210;职工例3.5:给出在仓库“WH1”或“WH2”工作,并且工资少于1250元的职工号。SELECT职工号FROM职工WHERE工资1250AND(仓库号='WH1'OR仓库号='WH2')职工例3.6:找出工资多于1230元的职工号和他们所在的城市。SELECT职工号,城市FROM职工,仓库WHERE(工资1230)AND(职工.仓库号=仓库.仓库号);仓库职工例3.7:找出工作在面积大于400的仓库的职工号,和这些职工工作所在的城市。SELECT职工号,城市FROM仓库,职工WHERE(面积400)AND(职工.仓库号=仓库.仓库号);仓库职工例3.8:哪些城市至少有一个仓库的职工的工资为1250元?SELECT城市FROM仓库WHERE仓库号IN(SELECT仓库号FROM职工WHERE工资=1250);仓库职工例3.9:查询所有职工的工资都多于1210元的仓库的信息。SELECT*FROM仓库WHERE仓库号NOTIN(SELECT仓库号FROM职工WHERE工资=1210);仓库职工检索要求进一步叙述为:检索所有职工的工资都多于1210元的仓库的信息,并且该仓库至少要有一名职工。SELECT*FROM仓库WHERE仓库号NOTIN(SELECT仓库号FROM职工WHERE工资=1210)AND仓库号IN(SELECT仓库号FROM职工);仓库职工例3.10:找出和职工E4挣同样工资的所有职工。SELECT职工号FROM职工WHERE工资=(SELECT工资FROM职工WHERE职工号=“E4”);职工连接查询Innerjoin:内连接Leftjoin:左连接Rightjoin:右连接Crossjoin:笛卡尔集连接查询的其他关键词DISTINCT:去掉重复元组;GROUPBY短语用于对查询结果进行分组,可以利用它进行分组汇总;HAVING短语必须跟随GROUPBY使用,它用来限定分组必须满足的条件;ORDERBY短语用来对查询的结果进行排序;COMPUTE短语可以进行带明细的分组汇总。常用公式聚合函数:MAX():查询最大值MIN():查询最小值COUNT():计数AVG():求平均值函数常用公式代数公式、计算符号ABS():求绝对值POWER(a,b):a的b次方+、—、*:加、减、乘/:求商(注意int,乘1.0)%:求余SIN()、COS()、TAN():正弦、余弦、正切1.4数据更新插入功能更新功能删除功能插入语句语法图:INSERTINTOVALUES表名列名值();,,SELECT查询块()插入语句命令格式:INSERTINTO表名[(列名,…,列名)]SELECT查询;INSERTINTO表名[(列名,…,列名)]VALUES(表达式,…,表达式);例:往订购单关系中插入元组:(E7,S4,OR76,1998/05/25)INSERTINTO订购单VALUES(”E7”,”S4”,”OR76”,”25-MAY-1998”);可用如下命令:INSERTINTO订购单(职工号,供应商号,订购单号,订购日期)VALUES(”E7”,”S4”,”OR76”,”25-MAY-1998”);或者:假设对前例尚未确定供应商,只插入职工号和订购单号两个字段。INSERTINTO订购单(职工号,订购单号)VALUES(E7,OR76);可以如此插入的前提是:供应商号和订购日期字段允许为空值。可以使用命令:INSERTINTO订购单VALUES(E7,NULL,OR76”,NULL);在SQL中还允许从一个关系中选择一些元组插入到另外一个关系中(当然相应属性要出自同一个值域)。例如:INSERTINTO订购单备份SELECT*FROM订购单;修改语句的语法图:UPDATESETFROM表名列名表名;,,表达式=视图名WHERE条件更新语句的命令格式:UPDATE表名SET列名=表达式,…列名=表达式FROM{表名|视图名}WHERE条件;UPDATE表名SET列名=表达式,…列名=表达式[WHERE条件];UPDATE职工SET工资=工资*1.10WHERE仓库号=WH1;例:给WH1仓库的职工提高10%的工资。例3.26将北京职工的工资提高10%。UPDATE职工SET工资=工资*1.10FROM仓库,职工WHERE仓库.仓库号=职工.仓库号
本文标题:SQL数据库
链接地址:https://www.777doc.com/doc-3150087 .html