4.1SQL语言概述(1)SQL语言的发展过程:SQL是结构化查询语言(StructureQueryLanguage)的缩写,它是使用关系模型的数据库应用语言,由IBM在70年代开发出来,作为IBM关系数据库原型SystemR的原型关系语言,实现了关系数据库中的信息检索。(2)SQL语言的特点1.综合统一数据库系统的主要功是通过数据库支持的数据语言来实现。非关系模型(层次模型、网状模型)的数据语言一般都分为:模式数据定义语言(SchemaDataDefinitionLanguage,模式DDL);外模式数据定义语言(SchemaDataDefinitionLanguage,外模式DDL,子模式DDL);数据存储有关的描述语言(DataStorageDescriptionLanguage,DSDL);2.高度非过程化非关系数据模型的数据操纵语言是“面向过程”的语言,用“过程化”语言完成某项请求,必须指定存取路径。而用SQL进行数据操作,只要提出“做什么”,而无须指明“怎么做”,因此无需了解存取路径。存取路径的选择以及SQL的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。3.面向集合的操作方式费关系数据模型采用的是面向记录的操作方式,操作对象是一条记录。而SQL采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。4.以同一种语法结构提供多种使用方式SQL既是独立的语言,又是嵌入式语言。作为独立的语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作;作为嵌入式语言,SQL语句能够嵌入到高级语言程序中,供程序员设计程序时使用。而在两种不同的使用方式下,SQL的语法结构基本上是一致的。这种以统一的语法结构提供多种不同使用方式的做法,提供了极大的灵活性与方便性。5.语言简洁,易学易用SQL功能极强,但由于设计巧妙,语言十分简洁,完成核心功能只有9个动词,如表所示。SQL接近英语口语,因此容易学习,容易使用。(3)SQL语言的功能SQL语言功能主要分成四部分:(1)数据定义。(DDL)用于定义SQL模式、基本表、视图和索引的创建和撤消操作。(2)数据操纵。(DML)数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作。(3)数据控制。包括对基本表和视图的授权,完整性规则的描述,事务控制等内容。(4)嵌入式SQL的使用规定。涉及到SQL语句嵌入在宿主语言程序中使用的规则。4.2支持的数据类型(1)数值型一、整数数据类型整数数据类型是最常用的数据类型之一。1、INT(INTEGER)INT(或INTEGER)数据类型存储从-2的31次方(-2,147,483,648)到2的31次方-1(2,147,483,647)之间的所有正负整数。每个INT类型的数据按4个字节存储,其中1位表示整数值的正负号,其它31位表示整数值的长度和大小。2、SMALLINTSMALLINT数据类型存储从-2的15次方(-32,768)到2的15次方-1(32,767)之间的所有正负整数。每个SMALLINT类型的数据占用2个字节的存储空间,其中1位表示整数值的正负号,其它15位表示整数值的长度和大小。3、TINYINTTINYINT数据类型存储从0到255之间的所有正整数。每个TINYINT类型的数据占用1个字节的存储空间。4、BIGINTBIGINT数据类型存储从-2^63(-9,223,372,036,854,775,807)到2^63-1(9,223,372,036,854,775,807)之间的所有正负整数。每个BIGINT类型的数据占用8个字节的存储空间。二、浮点数据类型浮点数据类型用于存储十进制小数。浮点数值的数据在SQLServer中采用上舍入(Roundup或称为只入不舍)方式进行存储。所谓上舍入是指,当(且仅当)要舍入的数是一个非零数时,对其保留数字部分的最低有效位上的数值加1,并进行必要的进位。若一个数是上舍入数,其绝对值不会减少。如:对3.14159265358979分别进行2位和12位舍入,结果为3.15和3.141592653590。1、REAL数据类型REAL数据类型可精确到第7位小数,其范围为从-3.40E-38到3.40E+38。每个REAL类型的数据占用4个字节的存储空间。2、FLOATFLOAT数据类型可精确到第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个字节存储它。3、DECIMALDECIMAL数据类型可以提供小数所需要的实际存储空间,但也有一定的限制,您可以用2到17个字节来存储从-10的38次方-1到10的38次方-1之间的数值。可将其写为DECIMAL[p[s]]的形式,p和s确定了精确的比例和数位。其中p表示可供存储的值的总位数(不包括小数点),缺省值为18;s表示小数点后的位数,缺省值为0。例如:decimal(155),表示共有15位数,其中整数10位,小数5。4、NUMERICNUMERIC数据类型与DECIMAL数据类型完全相同。注意:SQLServer为了和前端的开发工具配合,其所支持的数据精度默认最大为28位。但可以通过使用命令来执行sqlserver.exe程序以启动SQLServer,可改变默认精度。命令语法如下:SQLSERVR[/Dmaster_device_path][/Pprecisim_leve1]例4-4:用最大数据精度38启动SQLServersqlservr/dc:\Mssql2000\data\master.dat/p38/*在使用了/P参数后,如果其后没有指定具体的精度数值,则默认为38位./*(2)日期时间型日期和时间数据类型1DATETIMEDATETIME数据类型用于存储日期和时间的结合体。它可以存储从公元1753年1月1日零时起到公元9999年12月31日23时59分59秒之间(3)字符串型字符数据类型字符数据类型是使用最多的数据类型。它可以用来存储各种字母、数字符号、特殊符号。一般情况下,使用字符类型数据时须在其前后加上单引号’或双引号”。1CHARCHAR数据类型的定义形式为CHAR[(n)。以CHAR类型存储的每个字符和符号占一个字节的存储空间。n表示所有字符所占的存储空间,n的取值为1到8000,即可容纳8000个ANSI字符。若不指定n值,则系统默认值为1。若输入数据的字符数小于n,则系统自动在其后添加空格来填满设定好的空间。若输入的数据过长,将会截掉其超出部分。2、NCHARNCHAR数据类型的定义形式为NCHAR[(n)]。它与CHAR类型相似。不同的是NCHAR数据类型n的取值为1到4000。因为NCHAR类型采用UNICODE标准字符集(CharacterSet)。UNICODE标准规定每个字符占用两个字节的存储空间,所以它比非UNICODE标准的数据类型多占用一倍的存储空间。使用UNICODE标准的好处是因其使用两个字节做存储单位,其一个存储单位的容纳量就大大增加了,可以将全世界的语言文字都囊括在内,在一个数据列中就可以同时出现中文、英文、法文、德文等,而不会出现编码冲突。3、VARCHARVARCHAR数据类型的定义形式为VARCHARn)。它与CHAR类型相似,n的取值也为1到8000,若输入的数据过长,将会截掉其超出部分。不同的是,VARCHAR数据类型具有变动长度的特性,因为VARCHAR数据类型的存储长度为实际数值长度,若输入数据的字符数小于n,则系统不会在其后添加空格来填满设定好的空间。一般情况下,由于CHAR数据类型长度固定,因此它比VARCHAR类型的处理速度快。4、NVARCHARNVARCHAR数据类型的定义形式为NVARCHAR[(n)]。它与VARCHAR类型相似。不同的是,NVARCHAR数据类型采用UNICODE标准字符集(CharacterSet),n的取值为1到4000。(4)其他类型1.逻辑数据类型BIT:BIT数据类型占用1个字节的存储空间,其值为0或1。如果输入0或1以外的值,将被视为1。BIT类型不能定义为NULL值(所谓NULL值是指空值或无意义的值)。2.文本和图形数据类型这类数据类型用于存储大量的字符或二进制数据。1、TEXTTEXT数据类型用于存储大量文本数据,其容量理论上为1到2的31次方-1(2,147,483,647)个字节,在实际应用时需要视硬盘的存储空间而定。SQLServer2000以前的版本中,数据库中一个TEXT对象存储的实际上是一个指针,它指向一个个以8KB(8192个字节)为单位的数据页(DataPage)。这些数据页是动态增加并被逻辑链接起来的。在SQLServer2000中,则将TEXT和IMAGE类型的数据直接存放到表的数据行中,而不是存放到不同的数据页中。这就减少了用于存储TEXT和IMA-GE类型的空间,并相应减少了磁盘处理这类数据的I/O数量。2NTEXTNTEXT数据类型与TEXT.类型相似不同的,是NTEXT类型采用UNICODE标准字符集(CharacterSet),因此其理论容量为230-1(1,073,741,823)个字节。3IMAGEIMAGE数据类型用于存储大量的二进制数据BinaryData。其理论容量为2的31次方-1(2,147,483,647)个字节。其存储数据的模式与TEXT数据类型相同。通常用来存储图形等OLEObjectLinkingandEmbedding,对象连接和嵌入)对象。在输入数据时同BINARY数据类型一样,必须在数据前加上字符“0X”作为二进制标识4.3数据定义功能数据库的定义(1)创建:Createdatabase<数据库名>[ON[primary]<文件>[,...n][,<文件组>[,...n]][LOGON<文件>[,...n]]][COLLATE<校验方式名>][WITH<选项>[,...n]][;](2)修改:ALTERDATABASE<数据库名>ADDFILE<文件>[,...N][TOFILEGROUP{文件组}]|ADDLOGFILE<文件>[,...n]|REMOVEFILE<文件名>|MODIFYFILE<文件>[;](3)删除:DROPDATABASE<数据库名>[,...n][;]架构的定义(1)创建:CREATESCHEMA{<架构名>|AUTHORIZATION<所有者名>|<架构名>AUTHORIZATION<所有者名>}[{表定义语句|视图定义语句|授权语句|收权语句|拒绝权限语句}][;](2)修改:ALTERSCHEMA<架构名>TRANSFER<对象名>[;](3)删除:DROPSCHEMA<架构名>[;]表的定义:(1)创建:CREATETABLE<表名>(<属性列名1><数据类型>[列级约束条件],<属性列名2><数据类型>[列级约束条件],..................................,[表级约束条件])1.NOTNULL:非空约束,限制列取值非空2.PRIMARYKEY:主键约束,指定本列为主键3.FOREIGNKEY:外键约束,定义本列为引用其他表的外键4.UNIQUE:唯一值约束,限制列取值不能重复5.DEFAULT:默认值约束,指定列的默认值6.CHECK:列取值范围约束,限制列的取值范围一.主键1).当主键只有一个字段,采用列级约束条件进行约束CREATETABLES(SNOCHAR(6)PRIMARYKEY,SNCHAR(10),SDCHAR(16))2).当主键有多个字段,采用表级约束条件进行约束CREATETABLESC(SNOCHAR(6),CNOCHAR(6),GRADEDECIMAL(4,1),PRIMARYKEY(SNO,CNO))二.外键1.外键不一定要与主键同名,但是为了方便识别,通常采用同名方式。2.外键与对应的主键必须定义在同一值域上,即数据类型和长度要完全一致。(2)修改:ALTERTABLE<表名>ADD<属性列名><数据类型>[完整性约束条件]|<完整性约束>(3)删除:DROPTABLE<表名>[CASCADE|RESTRICT]4.4数据查询功能学生数据库的基本结构:student表course表sc表单表查询:SELECT[ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]···FROM<表名或视图名>[,<表名或视图名>···]|(SELECT语句>)[AS]<别名>[WHERE<条件表达式>][GROUPBY<列名1>[HAVING<条件表达式>]][ORDERBY<列名2>[ASC|DESC]];整个SELECT语句的含义是,根据WHERE子句的条件表达式从FROM子句指定的基本表、视图或派生表中找出满足条件的元组,再按SELECT子句中的目标列表达式选出元组中的属性值形成结果表。如果有GROUPBY子句,则将结果按<列名1>的值进行分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。如果GROUPBY子句带HAVING短语,则只有满足指定条件的组才予以输出。如果有ORDERBY子句,则结果还要按<列名2>的值的升序或降序排序。SELECT语句既可以完成简单的单表查询,也可以完成复杂的连接查询和嵌套查询。查询条件谓词比较=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符确定范围BETWEENAND,NOTBETWEENAND确定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重条件(逻辑运算)AND,OR,NOT1.%(百分号)代表任意长度(长度可以为0)的字符串。例如:a%b表示以a开头,以b结尾的任意长度的字符串。如acb、addgb、ab等。_(下划线)代表任意单个字符。例如:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb、agb等。2.COUNT(*)统计元组个数COUNT([DISTINCT|ALL]<列名>)统计一列中值的个数SUM([DISTINCT|ALL]<列名>)计算一列值的总和(此列必须是数值型)AVG([DISTINCT|ALL]<列名>)计算一列值的平均值(此列必须是数值型)MAX([DISTINCT|ALL]<列名>求一列值中的最大值MIN([DISTINCT|ALL]<列名>)求一列值中的最小值多表连接查询一、外连接外连接可分为:左连接、右连接、完全外连接。1、左连接leftjoin或leftouterjoinSQL语句:select*fromstudentleftjoincourseonstudent.ID=course.ID2、右连接rightjoin或rightouterjoinSQL语句:select*fromstudentrightjoincourseonstudent.ID=course.ID3、完全外连接fulljoin或fullouterjoinSQL语句:select*fromstudentfulljoincourseonstudent.ID=course.ID二、内连接join或innerjoinSQL语句:select*fromstudentinnerjoincourseonstudent.ID=course.IDinnerjoin是比较运算符,只返回符合条件的行。此时相当于:select*fromstudent,coursewherestudent.ID=course.ID三、交叉连接crossjoin1.概念:没有WHERE子句的交叉联接将产生连接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。SQL语句:select*fromstudentcrossjoincourse四、两表关系为一对多,多对一或多对多时的连接语句当然上面两表为一对一关系,那么如果表A和表B为一对多、多对一或多对多的时候,我们又该如何写连接SQL语句呢?其实两表一对多的SQL语句和一对一的SQL语句的写法都差不多,只是查询的结果不一样,当然两表也要略有改动。比如表1的列可以改为:SnoNameCno表2的列可以改为:CnoCName这样两表就可以写一对多和多对一的SQL语句了,写法和上面的一对一SQL语句一样case表达式:CASEWHEN<求值表达式>THEN<表达式>WHEN<求值表达式>THEN<表达式>WHEN<求值表达式>THEN<表达式>...ELSE<表达式>ENDWHEN子句中的“<求值表达式>”就是类似“列=值”这样,返回值为真值(TRUE/FALSE/UNKNOWN)的表达式。我们也可以将其看作使用=、!=或者LIKE、BETWEEN等谓词编写出来的表达式。CASE表达式会从对最初的WHEN子句中的“<求值表达式>”进行求值开始执行。所谓求值,就是要调查该表达式的真值是什么。如果结果为真(TRUE),那么就返回THEN子句中的表达式,CASE表达式的执行到此为止。如果结果不为真,那么就跳转到下一条WHEN子句的求值之中。如果直到最后的WHEN子句为止返回结果都不为真,那么就会返回ELSE中的表达式,执行终止。从CASE表达式名称中的“表达式”我们也能看出来,上述这些整体构成了一个表达式。并且由于表达式最终会返回一个值,因此CASE表达式在SQL语句执行时,也会转化为一个值。虽然使用分支众多的CASE表达式编写几十行代码的情况也并不少见,但是无论多么庞大的CASE表达式,最后也只会返回一个简单的值。将查询结果保存到列表中:SELECT查询列表序列INTO<新表名>From数据源.....子查询:在SELECT中嵌套:学生信息和班级名称位于不同的表中,要在同一张表中查出学生的学号、姓名、班级名称:SELECTs.student_id,s.student_name,(SELECTclass_nameFROMt_classcWHEREc.class_id=s.class_id)FROMt_studentsGROUPBYs.student_id;在WHERE中嵌套:现要查出C语言成绩最高的学生的信息:SELECT*FROMt_studentWHEREstudent_subject='C语言'ANDstudent_score>=ALL(SELECTstudent_scoreFROMt_studentWHEREstudent_subject='C语言');4.5视图视图的概述:1.什么是视图视图是一个虚拟的表,是一个表中的数据经过某种筛选后的显示方式,视图由一个预定义的查询select语句组成。2.视图的特点视图中的数据并不属于视图本身,而是属于基本的表,对视图可以像表一样进行insert,update,delete操作。视图不能被修改,表修改或者删除后应该删除视图再重建。视图的数量没有限制,但是命名不能和视图以及表重复,具有唯一性。视图可以被嵌套,一个视图中可以嵌套另一个视图。视图不能索引,不能有相关联的触发器和默认值,sqlserver不能在视图后使用orderby排序。视图的定义和使用:Createviewvw1asSelectst.学号,st.姓名,st.所属院系fromstudentasst,courseasco,scoreasscWhereco.课名=’心理学’andsc.考试成绩>80andst.学号=sc.学号andco.课号=sc.课号视图的修改和删除:Createview视图名称[(字段1)(字段2)(字段3)…]ASSelect查询语句[withcheckoption]Dropview视图名称物化视图4.6数据更改功能数据插入:INSERTINTO<表名>(<列名列表>)VALUES(<值列表>)数据更新:UPDATE表名SET列1=新值1,列2=新值2WHERE过滤条件数据删除:DELETEFROM表名WHERE过滤条件4.7数据控制功能授权回收授权拒权。
第四章总结
本文详细介绍了SQL语言的发展历程、特点和主要功能,包括数据定义、数据操纵、数据控制和嵌入式SQL的使用。此外,还深入讨论了SQL支持的数值型、日期时间型、字符串型和其他类型的数据类型。在数据定义部分,讲解了创建、修改和删除数据库、架构及表的方法。在数据查询部分,通过实例展示了如何进行单表查询、多表连接查询以及使用CASE表达式进行复杂查询。最后,简单介绍了视图的概念、特点和操作。
摘要由CSDN通过智能技术生成