项目五:SQL语言与T-SQL语言2SQLServer2008--天府浪子2015CRY任务一:SQL语言任务描述:SQL的全称为StructuredQueryLanguage(结构化查询语言),它利用一些简单的句子构成基本的语法,来存取数据库的内容。由于SQL简单易学,目前它已经成为关系数据库系统中使用最广泛的语言。SQL是在20世纪70年代末由IBM公司开发出来的一套程序语言,并被用在DB2关系数据库系统中。但是,直到1981年,IBM推出商用的SQL/DS关系型数据库系统,Oracle及其他大型关系型数据库系统相继出现,SQL才得以广泛应用。3SQLServer2008--天府浪子2015CRY一、概述由于在产业界有多种关系型数据库系统,因此各家公司都可能有自己的SQL语法或者可以定义不同的数据类型。例如,Sybase与Microsoft公司使用Transact-SQL,而Oracle公司使用PL/SQL(ProceduralLanguageextensiontoSQL),将原来非过程性的SQL语法改变为过程性语法。基于上面的原因,使得SQL有ANSI(AmericanNationalStandardsInstitute,美国国家标准局)SQL-92标准与产业界的标准之分。ANSISQL-92标准定义了SQL关键字与语法的标准,而各公司在其基础上又增加了各自的扩充。因此,虽然各公司的数据库系统使用的SQL不尽相同,但是基本语法以及关键字等还是相互兼容的。SQL不尽相同,但是基本语法以及关键字等还是相互兼容的。4SQLServer2008--天府浪子2015CRYSQL语言是应用于数据库的语言,本身是不能独立存在的。它是一种非过程性(non-procedural)语言,与一般的高级语言,例如C/C++、Pascal,是大不相同的。一般的高级语言在存取数据库时,需要依照每一行程序的顺序处理许多的动作。但是使用SQL时,只需告诉数据库需要什么数据,怎么显示就可以了。具体的内部操作则由数据库系统来完成。例如,要从“studentDB”数据库中的学生信息表中查找到苏俊丹的信息,使用简单的几行命令即可(实际上,该语句经常写为一行,这里只是为了说明,将其分成了3行),如图5-1所示。5SQLServer2008--天府浪子2015CRY二、SQL语言的分类SQL语言按照用途可以分为如下3类:DDL(DataDefinitionLanguage)数据定义语言DML(DataManipulationLanguage)数据处理语言DCL(DataControlLanguage)数据控制语言下面分别介绍这3类。6SQLServer2008--天府浪子2015CRY1.数据定义语言在数据库系统中,每一个数据库、数据库中的表、视图和索引等都是对象。要建立一个对象,都可以通过SQL语言来完成。类似于这一类定义数据库对象的SQL叙述即为DDL语言。例如,数据库和表的创建。2.数据处理语言SQL语法中处理数据的叙述称为DML。例如,使用SELECT查询表中的内容,或者使用INSERT(插入)、DELETE(删除)和UPDATE(更新)一笔记录等。这些属于DML7SQLServer2008--天府浪子2015CRY3.数据控制语言对单个的SQL语句来说,不管执行成功或者失败,都不会影响到其他的SQL语句。但是在某些情况下,可能需要一次处理好几个SQL语句,而且希望它们必须全部执行成功,如果其中一个执行失败,则这一批SQL语句都不要执行。已经执行的应该恢复到开始的状态。8SQLServer2008--天府浪子2015CRY举个简单的银行转账的例子。假设要从A账户中转10000元到B账户中,首先从A账户中扣除10000元,然后在B账户中加入10000元。但是,如果从A账户中扣除10000元后,出现错误,导致下一步在B账户中加入10000元的操作不能完成,则A账户白白被扣除了10000元。因此,应保证这些操作要么一起完成,要么都不要执行。这种方式在SQL中称做事务(Transaction)。在SQL中,可以使用DCL将数个SQL语句组合起来,然后交给数据库系统一并处理。9SQLServer2008--天府浪子2015CRY任务二:Transact-SQL基础任务描述:SQLServer提供了多种图形和命令行工具,用户可以使用不同的方法来访问数据库。但是这些工具的核心却是Transact-SQL语言。SQLServerManagementStudio是一个图形用户界面,用以交互地设计和测试Transact-SQL语句、批处理和脚本。本节通过SELECT查询语句以及数据库和表的操作语句来介绍Transact-SQL的基本使用。因此,本节首先介绍一下查询分析器的使用,然后再介绍如何使用查询分析器来执行SQL语句。10SQLServer2008--天府浪子2015CRY一、在SSMS中执行SQL语句在SQLServerManagementStudio中,用户可输入Transact-SQL语句,执行语句并在结果窗口中查看结果。用户也可以打开包含Transact-SQL语句的文本文件,执行语句并在结果窗口中查看结果。11SQLServer2008--天府浪子2015CRYSQLServerManagementStudio提供:①用于输入Transact-SQL语句的自由格式文本编辑器。②在Transact-SQL语句中使用不同的颜色,以提高复杂语句的易读性。③对象浏览器和对象搜索工具,可以轻松查找数据库中的对象和对象结构。④模板,可用于加快创建SQLServer对象的Transact-SQL语句的开发速度。模板是包含创建数据库对象所需的Transact-SQL语句基本结构的文件。⑤用于分析存储过程的交互式调试工具。⑥以网格或自由格式文本窗口的形式显示结果。12SQLServer2008--天府浪子2015CRY⑦显示计划信息的图形关系图,用以说明内置在Transact-SQL语句执行计划中的逻辑步骤。这使程序员得以确定在性能差的查询中,具体是哪一部分使用了大量资源。之后,程序员可以试着采用不同的方法更改查询,使查询使用的资源减到最小的同时仍返回正确的数据。⑧使用索引优化向导分析Transact-SQL语句以及它所引用的表,以了解通过添加其他索引是否可以提高查询的性能。13SQLServer2008--天府浪子2015CRY二、数据查询数据库存在的意义在于将数据组织在一起,以方便查询。“查询”的含义就是用来描述从数据库中获取数据和操纵数据的过程。SQL语言中最主要、最核心的部分是它的查询功能。查询语言用来对已经存在于数据库中的数据按照特定的组合、条件表达式或者一定次序进行检索。其基本格式是由SELECT子句、FROM子句和WHERE子句组成的SQL查询语句:SELECT列名表FROM表或视图名WHERE查询限定条件14SQLServer2008--天府浪子2015CRY也就是说,SELECT指定了要查看的列(字段),FROM指定这些数据来自哪里(表或者视图),WHERE则指定了要查询哪些行(记录)。在SQL语言中,SELECT子句除了进行查询外,其他的很多功能也都离不开SELECT子句,例如,创建视图是利用查询语句来完成的;插入数据时,在很多情况下是从另外一个表或者多个表中选择符合条件的数据。所以查询语句是掌握SQL语言的关键。15SQLServer2008--天府浪子2015CRY完整的SELECT语句的用法如下所示:SELECTselect_list[INTOnew_talbe]FROMtable_source[WHEREsearch_condition][GROUPBYgroup_by_expression][HAVINGsearch_condition][ORDERBYorder_expression[ASC|DESC]]其中,带有方括号的子句均是可选子句,大写的单词表示SQL的关键字,而小写的单词或者单词组合表示表(视图)名称或者给定条件。16SQLServer2008--天府浪子2015CRY下面以studentDB数据库为例,来介绍各个子句的使用。首先在“学生信息”表中加入几条记录。这里只是为了作为例子来介绍,因此可以自行加入几条记录。1.查询表中所有的列使用格式:SELECT*FROMtable_name例如,要查询“学生信息”表中的所有书籍的信息,可在SQL查询分析器中输入如下命令:SELECT*FROM学生信息然后在工具栏上单击“执行”按钮或者按F5键,即可看到所有书籍的信息,如图5-2所示。17SQLServer2008--天府浪子2015CRY18SQLServer2008--天府浪子2015CRY2.查询表中指定的列使用格式:SELECTcolumn_name[,…n]FROMtable_name说明:多个字段用逗号“,”隔开。例如,要查询所有书籍的名称和价格,可输入下面的SQL语句:SELECT学号,姓名FROM学生信息按F5键,结果如图5-3所示。19SQLServer2008--天府浪子2015CRY可以重新排列列的次序,在SELECT后的列名的顺序决定了显示结果中的列序。如果想把价格放在前面,则上面的SQL语句应该写成:SELECT姓名,学号FROMbook执行此语句,可看到结果中学号放在了前面。20SQLServer2008--天府浪子2015CRY3.使用单引号加入字符串例如,要查询所有书籍的名称和价格,并在价格前面显示字符串“的学号为:”,可输入下面的SQL语句:SELECT姓名,’的学号为:’,学号FROM学生信息按F5键,结果如图5-4所示。21SQLServer2008--天府浪子2015CRY4.使用别名在显示结果时,可以指定以别名来代替原来的字段名称,总共有3种方法:采用“字段名称AS别名”的格式。采用“字段名称别名”的格式。采用“别名=字段名称”的格式,其中别名用单引号括起来。例如,查询学生姓名和学号,并在标题栏中显示“Name”和“Number”字样,而不是显示姓名和学号,可输入下面的SQL语句:SELECT姓名ASName,学号ASNumberFROM学生信息或者SELECT姓名Name,学号NumberFROM学生信息或者SELECT‘Name’=姓名,’Number’=学号FROM学生信息22SQLServer2008--天府浪子2015CRY按F5键,结果如图5.5所示。23SQLServer2008--天府浪子2015CRY5.查询特定的记录使用WHERE关键词来限定查询的条件。例如,要查询姓名叫王静的信息,则可以输入以下SQL语句:SELECT*FROM学生信息WHERE姓名=’王静’按F5键,结果如图5-6所示。24SQLServer2008--天府浪子2015CRY6.对查询结果进行排序在SELECT语句中,可以使用ORDERBY子句对查询结果进行排序。其语法格式为:[ORDERBYorder_expression[ASC|DESC]]其中各项含义如下:order_expression为排序的表达式,可以是一个列、列的别名、表达式或者非零的整数值,而非零的整数值则表示列、别名或者表达式在选择列表中的位置。后续关键字ASC表示升序排列,DESC表示降序排列,默认值为ASC,排序时,空值(NULL)被认为是最小值。25SQLServer2008--天府浪子2015CRY注意:ntext、text和image数据类型的字段不能用作ORDERBY排序的字段。例如,依照学号高低来显示所有书籍的信息,输入以下SQL语句:SELECT*FROM学生信息ORDERBY学号按F5键,结果如图5-7所示。26SQLServer2008--天府浪子2015CRY7.消除重复的行使用DISTINCT关键字来消除重复行。例如,查询所有学生的民族。输入SQL语句如下:SELECTDISTINCT民族FR