




已阅读5页,还剩108页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL基础知识SQL语言分类 DDL :数据定义语言(CREATE,ALTER,DROP,DECLARE) DML:数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL :数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)SQL SERVER 2008 数据分类SQL自数据类型是数据的一种属性,表示数据所表示信息的类型。任何一种计算机语言都定义了自己的数据类型。当然,不同的程序语言都具有不同的特点,所定义的数据类型的种类和名称都或多或少有些不同。SQLServer 提供了 25 种数据类型:Binary (n)Varbinary (n)Char (n)Varchar(n)Nchar(n)Nvarchar(n)DatetimeSmalldatetimeDecimal(p,s)Numeric(p,s)Float(n)RealIntSmallintTinyintMoneySmallmoneyBitCursorSysnameTimestampUniqueidentifierTextImageNtext(1)二进制数据类型二进制数据包括 Binary、Varbinary 和 ImageBinary数据类型既可以是固定长度的(Binary),也可以是变长度的。常用来存放图像等数据。Binary(n) 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4 个字节。常用来存放图像等数据。Varbinary(n) 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4个字节,不是n 个字节。在 Image数据类型中存储的数据是以位字符串存储的,不是由 SQL SERVER 解释的,必须由应用程序来解释。用于存放照片,目录图片或图画。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image数据类型中。(2)字符数据类型字符数据的类型包括 Char,Varchar 和 Text字符数据是由任何字母、符号和数字任意组合而成的数据。Varchar 是变长字符数据,其长度不超过 8KB。Char 是定长字符数据,其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用Text数据类型存储。例如,因为 Html 文档全部都是 ASCII 字符,并且在一般情况下长度超过 8KB,所以这些文档可以 Text数据类型存储在SQL SERVER 中。 一般情况下,由于Char数据类型长度固定,因此它比Varchar类型的处理速度快。NTEXT数据类型与TEXT.类型相似不同的,是NTEXT 类型采用UNICODE 标准字符集(Character Set), 因此其理论容量为230-1(1, 073, 741, 823)个字节。(3)Unicode数据类型Unicode数据类型包括 Nchar,Nvarchar 和Ntext在 Microsoft SQL SERVER 中,传统的非 Unicode数据类型允许使用由特定字符集定义的字符。在 SQL SERVER安装过程中,允许选择一种字符集。使用 Unicode数据类型,列中可以存储任何由Unicode 标准定义的字符。在 Unicode 标准中,包括了以各种字符集定义的全部字符。使用Unicode数据类型,所占用空间是使用非 Unicode数据类型所占用的空间大小的两倍。 在 SQL SERVER 中,Unicode 数据以 Nchar、Nvarchar 和 Ntext数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时,应该使用Nvarchar 字符类型,这时最多可以存储 4000 个字符。当列的长度固定不变时,应该使用 Nchar 字符类型,同样,这时最多可以存储4000 个字符。当使用 Ntext数据类型时,该列可以存储多于 4000 个字符。 (4)日期和时间数据类型日期和时间数据类型包括 Datetime 和 Smalldatetime两种类型日期和时间数据类型由有效的日期和时间组成。例如,有效的日期和时间数据包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一个数据类型是日期在前,时间在后,后一个数据类型是时间在前,日期在后。在 Microsoft SQL SERVER中,日期和时间数据类型包括Datetime 和 Smalldatetime 两种类型时,所存储的日期范围是从 1753 年 1 月 1 日开始,到9999 年12 月 31 日结束(每一个值要求 8 个存储字节)。使用 Smalldatetime数据类型时,所存储的日期范围是 1900年 1 月 1日 开始,到 2079 年 12 月 31 日结束(每一个值要求 4 个存储字节)。日期的格式可以设定。设置日期格式的命令如下:Set DateFormat format | format _var|其中,format | format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。例如,当执行 Set DateFormat YMD 之后,日期的格式为年 月 日 形式;当执行 Set DateFormat DMY 之后,日期的格式为日 月有年 形式 (5)数字数据类型数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数整数由正整数和负整数组成,例如 39、25、0-2 和 33967。在 Micrsoft SQL SERVER 中,整数存储的数据类型是 Int,Smallint和 Tinyint。Int数据类型存储数据的范围大于 Smallint数据类型存储数据的范围,而 Smallint 据类型存储数据的范围大于Tinyint数据类型存储数据的范围。使用 Int数据类型存储数据的范围是从 -2 147 483 648 到 2 147 483 647(每一个值要求4个字节存储空间)。使用 Smallint数据类型时,存储数据的范围从 -32 768 到 32 767(每一个值要求2个字节存储空间)。使用Tinyint数据类型时,存储数据的范围是从0 到255(每一个值要求1个字节存储空间)。浮点数据类型用于存储十进制小数。浮点数值的数据在SQL Server 中采用上舍入(Round up 或称为只入不舍)方式进行存储。所谓上舍入是指,当(且仅当)要舍入的数是一个非零数时,对其保留数字部分的最低有效位上的数值加1 ,并进行必要的进位。若一个数是上舍入数,其绝对值不会减少。如:对3.14159265358979 分别进行2 位和12位舍入,结果为3.15 和3.141592653590。 REAL 数据类型 REAL数据类型可精确到第7 位小数,其范围为从-3.40E -38 到3.40E +38。 每个REAL类型的数据占用4 个字节的存储空间。FLOAT FLOAT数据类型可精确到第15 位小数,其范围为从-1.79E -308 到1.79E +308。 每个FLOAT 类型的数据占用8 个字节的存储空间。 FLOAT数据类型可写为FLOAT n 的形式。n 指定FLOAT 数据的精度。n 为1到15 之间的整数值。当n 取1 到7 时,实际上是定义了一个REAL 类型的数据,系统用4 个字节存储它;当n 取8 到15 时,系统认为其是FLOAT 类型,用8 个字节存储它。DECIMAL DECIMAL数据类型可以提供小数所需要的实际存储空间,但也有一定的限制,您可以用2 到17 个字节来存储从-10的38次方-1 到10的38次方-1 之间的数值。可将其写为DECIMAL p s 的形式,p 和s 确定了精确的比例和数位。其中p 表示可供存储的值的总位数(不包括小数点),缺省值为18; s 表示小数点后的位数,缺省值为0。 例如:decimal (15, 5),表示共有15 位数,其中整数10 位,小数5,总位数不包括小数点。 NUMERIC NUMERIC数据类型与DECIMAL数据类型完全相同。分为两种,是为了保持与ANSI标准兼容。(6)货币数据表示正的或者负的货币数量 。 在 Microsoft SQL SERVER 中,货币数据的数据类型是Money 和 Smallmoney Money数据类型要求 8 个存储字节,Smallmoney数据类型要求 4 个存储字节。 (7)特殊数据类型特殊数据类型包括前面没有提过的数据类型。Timestamp 用于表示SQL SERVER 活动的先后顺序,以二进制的格式存放。Timestamp 数据与插入数据或者日期和时间没有关系。主要用于在数据表中记录其数据的修改时间。它提供数据库范围内的唯一值,反映数据库中数据修改的相对顺序,相当于一个单调上升的计数器。当用该类型定义的列在更新或者插入数据行时,此列的值会自动更新,一个计数值将自动地添加到此数据列中。Bit 由 1 或者 0 组成。这种数据类型常作为逻辑变量使用。用来表示真或者假、ON 或者 OFF 等二值选择。Uniqueidentifier 称做唯一标识符数据类型。它是SQL SERVER根据计算机网络适配器地址和CPU时钟产生的全局唯一标识符代码(Globally Unique Identifier,简写为GUID),因此,该数据类型可以保证在全球范围内不同的计算机所产生的标识符是唯一的。由 16 位的二进制数字组成。当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户。 Cursor 在实际应用中,应用程序有时只需要每次处理一条或一部分记录。在这种情况下,就需要使用游标在服务器内部处理结果集。游标可视为一种特殊的指针,它不但可以定位在结果集的特定记录上,还可以从结果集的当前位置查询一条或多条记录并对读取到的数据进行处理。Sql_variant数据类型可以存储除文本、图形数据(TEXT、NTEXT、IMAGE)和TIMESTAMP类型数据外的其它任何合法的SQL Server数据。此数据类型大大方便了SQL Server的开发工作。table 数据类型用于存储对表或视图处理后的结果集。这一新类型使得变量可以存储一个表,从而使函数或过程返回查询结果更加方便快捷。用户定义的数据类型用户定义的数据类型基于在 Microsoft SQL SERVER 中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。例如,可定义一种称为 postal_code 的数据类型,它基于 Char数据类型。当创建用户定义的数据类型时,必须提供三个数:数据类型的名称、所基于的系统数据类型和数据类型的可空性。 (1)创建用户定义的数据类型创建用户定义的数据类型可以使用 Transact- SQL 语句。系统存储过程 sp_addtype 可以来创建用户定义的数据类型。其语法形式如下:sp_addtype type,system_data_bype,null_type其中,type 是用户定义的数据类型的名称。system_data_type 是系统提供的数据类型,例如 Decimal、Int、Char 等等。 null_type 表示该数据类型是如何处理空值的,必须使用单引号引起来,例如NULL、NOT NULL或者NONULL。例子:Use custExec sp_addtype ssn,Varchar(11),Not Null创建一个用户定义的数据类型ssn,其基于的系统数据类型是变长为11 的字符,不允许空。例子:Use custExec sp_addtype birthday,datetime,Null创建一个用户定义的数据类型birthday,其基于的系统数据类型是 DateTime,允许空。例子:Use masterExec sp_addtype telephone,varchar(24),Not NullEexc sp_addtype fax,varchar(24),Null创建两个数据类型,即 telephone 和 fax (2)删除用户定义的数据类型当用户定义的数据类型不需要时,可删除。删除用户定义的数据类型的命令是 sp_droptype type。例子: Use masterExec sp_droptype ssn注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。常规标识符常规标识符的格式规则是:首字符必须是字母、下划线_、符号或数字符号#之一,后续字符必须是字母、下划线_、符号、数字符号、美元符号$或十进制数字(09)之一;不能是T-SQL的保留字;不允许有空格或其他特殊字符。例如,mydatabase,_35a,five,five5分隔标识符分隔标识符可以不符合标识符的格式规则,但在使用时必须包含在双引号或者方括号内。例如,my table是非法的,my table和“my table”是合法的常量又称为字面量,用于表示确定的数据,值在程序运行中不变,其格式与值的数据类型相关。例如,abc,15,0x13ff,0,3.2,12/15/2010 ,12:30:12,$5.5。变量DECLARE 变量名 T-SQL语言中局部变量以一个符号开始,在程序中必须先声明再使用。DECLARE语句完成局部变量声明并赋初值null。SET语句和SELECT语句对局部变量进行赋值。 T-SQL语言中全局变量以两个符号开始,由SQLServer系统提供,保存了SQLServer系统的当前状态信息,用户只能使用,不能创建。注释单行注释:一行的全部或部分内容是注释,在该行注释开始位置之前使用“-”。多行注释:注释范围跨行,在该注释块开始位置之前加“/*”,在该注释块结束位置之后使用“*/”保留关键字Microsoft SQL Server 保留了一些专用的关键字,这些关键字具有特定的含义。数据库中对象的名称不能与保留关键字相同。如果存在这样的名称,那么需要使用“分隔标识符”来引用对象。建议在实际应用中不要使用保留关键字作为数据库对象的名称。运算符比较运算符: = = != !逻辑运算符:AND OR NOT LIKE ANY ALL IN SOME算术运算符:+ -* / %一元运算符:+ -位运算符:& | 字符串串联:+赋值运算符:=表达式 表达式由常量、变量、函数、字段和运算符等组合而成。 表达式中如果有多个运算符,将根据SQL Server 运算符优先级顺序由高到低来分别进行运算。两个运算符的优先级相同时,按照书写顺序从左到右进行运算。如果表达式中运算顺序与上述规定不一致时,可以使用括号调整运算符的优先级,表达式在括号中的部分优先级最高,括号可以嵌套使用。 表达式中如果用运算符对两个不同数据类型的操作数进行计算,将根据数据类型优先级将优先级较低的数据类型转换为优先级较高的数据类型。该转换是隐式转换。控制流T-SQL程序由3种结构组成,即顺序、选择和循环。T-SQL的控制流关键字将T-SQL语句组织起来,成为具备一定功能的程序。T-SQL的控制流关键字包括BEGIN.END、BREAK、GOTO、CONTINUE、IF.ELSE、WHILE、RETURN、WAITFOR等。批处理批处理是指一个T-SQL语句的执行组合,一个批处理里有一个或多个T-SQL语句。在输入批处理时,SQL Server将GO命令作为结束批处理的标志。脚本如果需要重复使用输入的T-SQL语句,可以先把T-SQL语句保存在SQL脚本文件中。TRY.CATCHT-SQL 代码中的错误可使用TRY.CATCH构造进行处理,其结构类似于JAVA和C+语言中的异常处理类。语法:TRY.CATCH的语法格式如下:BEGIN TRY sql_statement | statement_block END TRYBEGIN CATCH sql_statement | statement_block END CATCH ; ERROR系统函数ERROR系统函数返回执行的上一个T-SQL 语句的错误号,值为整数类型。如果上一个T-SQL 语句执行成功,则ERROR 系统函数的返回值是0;如果该语句生成错误,则ERROR系统函数的返回值就是该语句的错误号。每运行一个T-SQL语句,ERROR系统函数的值都随之更新。语法:ERROR事务的概念及其属性 事务是SQL Server单个逻辑工作单元,事务中包含了多个操作。事务的作用是保证数据逻辑的一致性,从而保证数据满足业务规则要求。 事务有4个属性,包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称ACID。 事务分成3类:显式事务、自动提交事务和隐式事务。 显式事务代码中,有明确的事务启动和结束的T-SQL语句。用于启动事务的语句是BEGINTRANSACTION语句,用于结束事务的语句是COMMITTRANSACTION和ROLLBACKTRANSACTION 自动提交事务是SQL Server的默认事务管理模式。每个T-SQL语句作为一个事务单独提交,不需要事务启动和结束语句。 隐式事务使用T-SQL语句SET IMPLICIT_TRANSACTIONS ON将隐性事务模式设置为打开,之后的每一个语句将自动启动一个新事务,该事务完成后依序启动下一个T-SQL 语句的事务视图及其分类 视图在使用时如同真实的表一样,也包含字段和记录。 视图和表的不同之处在于,视图是一个虚拟表,除索引视图以外,视图在数据库中仅保存其定义,其中的记录在使用视图时动态生成。 视图中的记录可以来自当前数据库的一个或多个表或视图,也可以来自远程数据库的一个或多个表或视图。 视图中的记录不但可以查询,而且可以进行更新 视图分为3种,即标准视图、索引视图和分区视图。 标准视图选取了来自一个或多个数据库中一个或多个表及视图中的数据,在数据库中仅保存其定义,在使用视图时系统才会根据视图的定义生成记录。 索引视图在数据库中不仅保存其定义,生成的记录也被保存,还可以创建唯一的聚集索引。使用索引视图可以加快查询速度,从而提高查询性能。 分区视图将一个或多个数据库中的一组表中的记录抽取且合并。分区视图的作用是将大量的记录按地域分开存储,使得数据安全和处理性能得到提高。创建视图语法:CREATE VIEW . . view_name (column ,.n ) WITH ,.n AS select_statement WITH CHECK OPTION := ENCRYPTION | SCHEMABINDING | 视图创建后,可以如同使用表一样使用视图。在SELECT、INSERT、UPDATE、DELETE语句中,只要是表的位置,都可以用视图来代替例:创建视图Viewclass,只显示班级表中的班级编号、班级名称和系编号。u CREATE VIEW Viewclass AS SELECT Classid,Classname,Departid FROM Class例:下列两个T-SQL语句运行结果一样吗?SELECT Classid,Classname,Departid FROM ClassSELECT Classid,Classname,Departid FROM Viewclass 结果是一样的。查询语句SECECT 语法:SELECT 栏位1,栏位2 FROM 表格名 WHERE 条件 GROUP BY 栏位1 ORDER BY 栏位1 ASC, DESC, 栏位2 ASC, DESC处理顺序:1.FROM 2.WHERE 3.GROUP BY 4.HAVING 5.SELECT 6 ORDER BYl FROM子句是在逻辑处理第一个要处理的查询子句,这个子句用于指定要查询的表名,以及对这些表进行操作的表运算符。l WHERE子句中,可以指定一个谓词或逻辑表达式,从而过滤由FROM阶段返回的行,只有让逻辑表达式结果为TRUE的行,才能由WHERE阶段返回给后续的逻辑查询处理阶段。l GROUP BY阶段可以将前面逻辑查询处理阶段返回的行按“组”进行组合,每个组由在GROUP BY 子句中指定的各元素决定, 如果被 SELECT 的只有函数栏, 那就不需要 GROUP BY 子句。l HAVING子句用于指定对组进行过滤的谓词或逻辑表达式,这与WHERE阶段对单独的行进行过滤相对应。只有能让HAVING子句中的逻辑表达式为TRUE的组,HAVING阶段才会把这些组返回到下一个逻辑查询处理阶段,逻辑表达式计算结果为FALSE或UNKNOWN的组被过滤掉。l SELECT子句用于指定需要在查询返回结果集中包含的属性(列)l ORDER BY子句用于展示数据时对输出结果中的行进行排序, ASC 代表结果会以由小往大的顺序列出,而 DESC 代表结果会以由大往小的顺序列出。如果两者皆没有被写出的话,那我们就会用 ASCALIAS完整的数据库对象名称包括4个组成部分:服务器名称、数据库名称、架构名称和对象名称,其语法格式为:服务器名称.数据库名称.架构名称.对象名称。这样的命名方法适用于远程调用数据和同时使用不同的数据库.语法:SELECT 表格别名.栏位 栏位别名 FROM 表格名 表格名别名栏位别名的目的是为了让 SQL 产生的结果易读TOP 只需要在排序的结果集中选取前面给定数量的记录而不是全部,可以使用TOP子句来指定结果集中返回的记录 在TOP选项中可以使用PERCENT关键字,在这种情况下,SQL Server会按照百分比来计算应该返回满足条件的行数(向上取整)语法:TOP (expression) PERCENT WITHTIES例1:查询课程号为00100001的所有成绩,取前5名。SELECT TOP(5) Studentid,Courseid,Score FROM Score WHERE Courseid=00100001 ORDER BY Score DESC例2:以下查询请求最近更新过的前%的订单select top(1)PERCENT orderid,orderdate,custid,empid from sales.orders order by orderdate descDISTINCT我们需要知道这个表格/栏位内有哪些不同的值,而每个值出现的次数并不重要。这要如何达成呢?在 SQL 中,这是很容易做到的。我们只要在 SELECT 后加上一个DISTINCT 就可以了。语法:SELECT DISTINCT 栏位名FROM 表格名AND OR语法:SELECT 栏位名 FROM 表格名 WHERE 简单条件 AND|OR 简单条件+ 代表之内的情况会发生n次。在这里的意思就是 AND 简单条件及 OR 简单条件的情况可以发生n次。另外,我们可以用 () 来代表条件的先后次序。IN操作符允许我们在 WHERE 子句中规定多个值语法:SELECT 栏位名 FROM 表格名 WHERE 栏位名 IN (值一, 值二, .)NOT IN操作符不允许我们在 WHERE 子句中规定多个值语法:SELECT 栏位名 FROM 表格名 WHERE 栏位名 NOT IN (值一, 值二, .)使用IN和EXISTS的结果是相同的。也可以使用NOT IN和NOT EXISTS,但是这个时候要注意NULL的情况BETWEEN 操作符 BETWEEN . AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。语法:SELECT 栏位名 FROM 表格名 WHERE 栏位名 NOT BETWEEN 值一 AND 值二重要事项: 不同的数据库对 BETWEEN 1 AND 3 操作符的处理方式是有差异的。某些数据库会列出介于 1 和 3 之间的人,但不包括 1 和 3 ;某些数据库会列出介于 1 和 3 之间并包括 1 和 3 的人;而另一些数据库会列出介于 1 和 e 之间的人,包括 q ,但不包括 3 。LIKE操作符用于在 WHERE 子句中搜索列中的指定模式,相似的列出来。语法:SELECT 栏位名 FROM 表格名 WHERE 栏位名 NOT LIKE 模式通配符在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符% 替代一个或多个字符_ 仅替代一个字符charlist 字符列中的任何单一字符charlist或者!charlist 不在字符列中的任何单一字符内连接是指返回多个表中完全符合连接条件的记录的连接查询。语法:SELECT table_or_view1.column_list, table_or_view2.column_list FROM table_or_view1IINER JOIN table_or_view2 ONtable1_or_view.column_name1=table_or_view2.column_name2 WHERE 外连接如果希望其中某个表中的记录甚至是两个表中的记录即使不符合连接条件也要返回,这时就要使用外连接。u外连接分为3类:左外连接、右外连接和完全外连接。语法:SELECT table_or_view1.column_list, table_or_view2.column_list FROM table_or_view1 LEFT | RIGHT | FULL OUTER JOIN table_or_view2 ON table1_or_view.column_name1=table_or_view2.column_name2 WHERE 交叉连接使用交叉连接来生成连接的源表的笛卡儿积,结果集的记录数是第一个表的记录数乘以第二个表的记录数。语法:SELECT table_or_view1.column_list, table_or_view2.column_list FROM table_or_view1 CROSS JOIN table_or_view2 WHERE 自连接在某些查询中,虽然查询内容只与一个表有关,但需要对表中不同的记录进行对比,这时就要采用自连接查询,将该表与自身连接。语法:SELECT A.column_list, B.column_list FROM table_or_view1 AS A INNER JOIN table_or_view1 AS B ON A.column_name1=B.column_name2 WHERE INNER JOIN与JOIN: 如果表中有至少一个匹配,则返回行LEFT JOIN: 关键字会从左表那里返回所有的行,即使在右表中没有匹配的行RIGHT JOIN: 关键字会从右表那里返回所有的行,即使在左表中没有匹配的行FULL JOIN: 只要其中一个表中存在匹配,就返回行UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。 UNION运算符通过组合其他两个表(例如T1和T2)并消去表中任何重复行而派生出一个结果表。当使用UNION ALL时,不消除重复行,两种情况下,派生表的每行不是来自T1就是来自T2注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用UNION ALL语法: SELECT column_name(s) FROM table_name1UNIONSELECT column_name(s) FROM table_name2例:(SELECT * FROM SP_SUBORD)UNION (SELECT * FROM SP_MGR) 或等价地用下面的 SQL 语句:SELECT * FROM (TABLE SP_SUBORD UNION TABLE SP_MGR)EXCEPT EXCEPT 运算符通过包括所有在T1中但不在T2中的行并消除所有重复行而派生出一个结果表,当使用 EXCEPT ALL时,不消除重复行INTERSECT运算符通过只包括T1和T2中都有的行,并消除所有重复行而派生出一个结果表,当使用 INTERSECT ALL时,不消除重复行。子查询用做集合 子查询在WHERE子句中使用IN(或NOTIN),将字段值与包含零个值或多个值的集合进行比较。 子查询在WHERE子句中使用ANY(或ALL),也是将字段值与包含零个值或多个值的子查询结果集进行比较。例如,ALL(子查询)的用法表示大于子查询结果集中所有的值,往往用于求最大值;ANY(子查询)的用法表示小于子查询中所有的值,往往用于求最小值。 在WHERE子句中使用EXISTS(或NOTEXISTS)关键字和子查询,就是用子查询的结果集中是否有记录来判断是否满足条件。子查询实际上不产生任何数据,它只返回TRUE或FALSE值子查询是SQL语句中极其重要的概念,还可以用在以下语句:CREATE TABLE AS CREATE VIEW AS SELECT WHERE HAVING INSERT INTO UPDATE SET WHERE 例:查询班级名称为电子、电子、机电、机电的学生学号、姓名和出生日期。SELECT Studentid, Studentname, Birthday FROM Student WHERE Classid IN (SELECT Classid FROM Class WHERE Classname IN(电子,电子,机电,机电)例:查询班年龄比班所有学生都小的学生学号、姓名和出生日期。SELECT Studentid, Studentname, Birthday FROM Student WHERE Classid=20702 AND BirthdayALL(SELECT Birthday FROM Student WHERE Classid=20701)例:查询“电子工程系”学生的学号、姓名和出生日期。SELECT Studentid, Studentname, Birthday FROM Student WHERE EXISTS(SELECT Classid FROM Class WHERE Student.Classid=Class.Classid AND EXISTS(SELECT Departid FROM Department WHERE Class.Departid=Department.Departid AND Departname=电子工程系)子查询用做单个值返回单个值的子查询可以用于SELECT语句中所有使用单个值的地方,使用的前提是此处的数据类型与使用的子查询的返回值的数据类型相同。子查询用做单个值时,往往在比较运算符之后。例:查询“电子”班所有学生的姓名、学号和班级编号。SELECT Studentid, Studentname, Classid FROM Student WHERE Classid=(SELECT Classid FROM Class WHERE ClassName=电子)相关子查询 子查询和外部查询语句之间的联系有两种:一种是子查询不依靠外部查询而执行,这类查询语句的执行顺序是先执行子查询,再将子查询的结果代入外部查询而执行;另一种是子查询必须依靠外部查询而执行,因为其语句中有外部查询的表中字段,这类子查询就称为相关子查询。 相关子查询的执行顺序是先执行外部查询,每次选择外部查询的一行记录,然后将该记录的字段值代入子查询执行,子查询的结果最后返回外部查询而得到最终结果。例:查询已修门课程的学生学号和姓名SELECT S.Studentid, S.Studentname FROM Student AS S WHERE (SELECT COUNT(*) FROM Score AS SC WHERE SC.Studentid=S.Studentid) =4CREATE TABLE 建立数据表语法:CREATE TABLE 表格名(栏位1 栏位1 资料种类,栏位2 栏位2 资料种类,. )CREATE TABLE 建数据表带约束新建数据表CREATE TABLE 表名称(列名称 数据类型 约束,列名称 数据类型 约束,列名称 数据类型 约束,.)约束有以下几种NOT NULL 强制字段始终包含值。这意味着如果不向字段添加值,就无法插入新纪录或者更新记录。UNIQUE 约束唯一标识数据库表中的每条记录,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束初始单个建立约束UNIQUECREATE TABLE Persons(Id_P int NOT NULL UNIQUE,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255)初始多个建立约束UNIQUECREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)当表已被创建时,如需在 P_Id 列创建 UNIQUE 约束,请使用下列 SQL:ALTER TABLE PersonsADD UNIQUE (P_Id)当表已被创建再定义多个列的 UNIQUE 约束:ALTER TABLE PersonsADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)撤销 UNIQUE 约束ALTER TABLE PersonsDROP CONSTRAINT uc_PersonIDPRIMARY KEY 约束唯一标识数据库表中的每条记录,主键必须包含唯一的值,主键列不能包含 NULL 值。初始建立单个PRIMARY KEYCREATE TABLE Persons(Id_P int NOT NULL PRIMARY KEY,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255)初始建立多个PRIMARY KEYCREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),CONSTRAINT uc_PersonID PRIMARY KEY (Id_P,LastName)表已存在创建单个 PRIMARY KEY 约束ALTER TABLE PersonsADD PRIMARY KEY (Id_P)表已存在定义多个列PRIMARY KEY 约束ALTER TABLE PersonsADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)注释:如使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。撤销 PRIMARY KEY 约束ALTER TABLE PersonsDROP CONSTRAINT pk_PersonIDFOREIGN KEY一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY,用于预防破坏表之间连接的动作。FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。初始建立单个FOREIGN KEYCREATE TABLE Orders(O_Id int NOT NULL PRIMARY KEY,OrderNo int NOT NULL,Id_P int FOREIGN KEY REFERENCES Persons(Id_P)初始建立多个FOREIGN KEYCREATE TABLE Orders(O_Id int NOT NULL,OrderNo int NOT NULL,Id_P int,PRIMARY KEY (O_Id),CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)REFERENCES Persons(Id_P)表已存在创建 FOREIGN KEY 约束ALTER TABLE OrdersADD FOREIGN KEY (Id_P)REFERENCES Persons(Id_P)表已存在定义多个列 FOREIGN KEY 约束ALTER TABLE OrdersADD CONSTRAINT fk_PerOrdersFOREIGN KEY (Id_P)REFERENCES Persons(Id_P)撤销 FOREIGN KEY 约束ALTER TABLE OrdersDROP CONSTRAINT fk_PerOrdersCHECK 约束用于限制列中的值的范围。如果对单个列定义 CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制初始建立单个CHECKCREATE TABLE Persons(Id_P int NOT NULL CHECK (Id_P0),LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255)定义多个列 CHECK 约束CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),CONSTRAINT chk_Person CHECK (Id_P0 AND City=Sandnes)表已存在创建 CHECK 约束ALTER TABLE PersonsADD CHECK (Id_P0)表已存在定义多个 CHECK 约束ALTER TABLE PersonsADD CONSTRAINT chk_Person CHEC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 离婚协议解除后赡养费支付及财产分配执行协议
- 离婚协议签订前夫妻共同债务确认谈话笔录
- 创业孵化器租赁合同含中介及创业辅导服务范本
- 绿色金融公私转账借款及环境保护责任合同
- 离婚协议书:财产分割、债务承担及子女抚养权协议
- 养殖场土地租赁与农业科技园区建设合同
- 生物医药研发特殊劳动关系科研人员合作协议
- 矿山生态修复治理手册
- 职业教育专业实训教学标准制定
- 养殖业合作社运作制度
- 大学生毕业论文写作教程全套教学课件
- 化学锚栓承载力计算
- 肺部感染性疾病课件
- 《交通运输概论》 课件 第五章 铁路运输系统(二)
- 腾讯基干领导力素质模型V4.0-最后版本
- 河北大学本科教育教学审核评估工作任务分解表
- 液体外渗的处理ppt
- 2016火力发电机组及蒸汽动力设备水汽质量
- 市政排水管网施工方案
- 知识表示与处理(人工智能专业)PPT完整全套教学课件
- 非煤矿山通用三级安全教育培训资料公司级
评论
0/150
提交评论