1、中国科学院西安网络中心1SQL 语言语言中国科学院西安网络中心2前言SQL是上世纪是上世纪70年代末期,由年代末期,由IBM实验室开发的。实验室开发的。SQL是是Structured Query Language的缩写,即的缩写,即“结构化查结构化查询语言询语言”,它当初是为,它当初是为IBM公司的公司的DB2开发的,是一个功开发的,是一个功能强大的数据库语言。能强大的数据库语言。SQL不同于其他的计算机语言,是一个非过程语言。不同于其他的计算机语言,是一个非过程语言。非过程非过程(Nonprocedural)意味着意味着“作什么作什么”而不是而不是“怎么作怎么作”,比如:,比如:SQL描述出
2、要检索、删除、插入的数据特征,描述出要检索、删除、插入的数据特征,而不是怎样进行这些操作。而不是怎样进行这些操作。两个标准化组织:两个标准化组织:ANSI(美国国家标准学会美国国家标准学会)和和ISO(国国际标准化组织际标准化组织),提出了,提出了SQL的工业标准,目前最新的标的工业标准,目前最新的标准是准是ANSI-92。中国科学院西安网络中心3SQL概述SQL是操纵和检索关系数据库中数据的标准语言,使用是操纵和检索关系数据库中数据的标准语言,使用SQL,程,程序员和数据库管理员可以:序员和数据库管理员可以:修改数据库结构;修改数据库结构;改变系统的安全性设置;改变系统的安全性设置;增加用户
3、操作库和表的权利;增加用户操作库和表的权利;从库中查询信息;从库中查询信息;更新库的内容。更新库的内容。中国科学院西安网络中心4增强 SQL为了增强功能,所有的数据库产品都在一定程度上和为了增强功能,所有的数据库产品都在一定程度上和ANSI标准有所不同,绝大多数系统提供了标准有所不同,绝大多数系统提供了SQL的专有扩展功能,将的专有扩展功能,将SQL扩展成过程型语言。微软的数据库产品扩展成过程型语言。微软的数据库产品SQL Server所提供所提供的的Transact-SQL(T-SQL)语言就是扩展的语言就是扩展的SQL语言。语言。中国科学院西安网络中心5 SQL产品 Oracle公司开发了
4、第一个使用公司开发了第一个使用SQLSQL的商品化的商品化RDBMSRDBMS。常见关系。常见关系数据库管理系统有:数据库管理系统有:Oracle、Sybase、Microsoft SQL Server、Access、Ingres等。等。中国科学院西安网络中心6资源n SQL Server 连机丛书,可从微软网站单独下载。n 搜索引擎:中国科学院西安网络中心7DBMS和RDBMSn DBMS(Database Managerment System)数据库管理系统数据库管理系统 层次型数据库层次型数据库 网络形数据库网络形数据库 关系型数据库关系型数据库n RDBMS(Relation Data
5、base Managerment System)关系数据库管理系统关系数据库管理系统 中国科学院西安网络中心8关系型DBMSRDBMS 1970年年E.F.Codd博士写了一篇题为博士写了一篇题为大型共享数大型共享数据银行的数据的一个关系模型据银行的数据的一个关系模型(A Relational Model of Data for Large Shared Data Banks)的学术论文,的学术论文,这篇论文奠定了关系数据库的基础。这篇论文奠定了关系数据库的基础。Codd博士提出了定义关系数据库模型的十三条准则:博士提出了定义关系数据库模型的十三条准则:0.一个关系型的一个关系型的DBMS必须
6、能够通过它的关系能力来全面必须能够通过它的关系能力来全面地管理数据库。地管理数据库。1.信息准确。信息准确。RDBMS的所有信息(包括表和列名)都应的所有信息(包括表和列名)都应该用表中的值显式地表示。该用表中的值显式地表示。2.保证访问准则。在关系数据库中的每个值都能保证以表保证访问准则。在关系数据库中的每个值都能保证以表名、主码值和列名的组合访问。名、主码值和列名的组合访问。中国科学院西安网络中心9关系数据库模型的十三条准则3.系统的空值支持策略。系统的空值支持策略。RDBMS在系统级上提供对空值在系统级上提供对空值(未知的或尚不能显式地定义具体的数值未知的或尚不能显式地定义具体的数值)处
7、理的支持。处理的支持。空值和默认值不同,并且是独立于任何域的。空值和默认值不同,并且是独立于任何域的。4.动态的、联机的关系型数据字典。数据库的描述和它的动态的、联机的关系型数据字典。数据库的描述和它的内容在逻辑级上表示成表,并且可以用数据库语言查询。内容在逻辑级上表示成表,并且可以用数据库语言查询。5.功能范围广泛的数据子语言。一个关系系统至少应提供功能范围广泛的数据子语言。一个关系系统至少应提供一种具有严格语法定义的语言,它的功能应很全面、很一种具有严格语法定义的语言,它的功能应很全面、很广泛,支持数据定义、数据操纵、完整性规则、授权和广泛,支持数据定义、数据操纵、完整性规则、授权和事物处
8、理。事物处理。6.视图更新准则。所有理论上可更新的可更新的视图也应视图更新准则。所有理论上可更新的可更新的视图也应该允许由系统更新。该允许由系统更新。中国科学院西安网络中心10关系数据库模型的十三条准则7.集合级别上的插入、修改和删除。集合级别上的插入、修改和删除。DBMS。8.数据物理独立性。当数据的物理存取方法或存取结构变数据物理独立性。当数据的物理存取方法或存取结构变化时,应用程序和其他特殊程序应保持逻辑上不收影响。化时,应用程序和其他特殊程序应保持逻辑上不收影响。9.功能范围广泛的数据子语言。一个关系系统至少应提供功能范围广泛的数据子语言。一个关系系统至少应提供一种具有严格语法定义的语
9、言,它的功能应很全面、很一种具有严格语法定义的语言,它的功能应很全面、很广泛,支持数据定义、数据操纵、完整性规则、授权和广泛,支持数据定义、数据操纵、完整性规则、授权和事物处理。事物处理。10.视图更新准则。所有理论上可更新的可更新的视图也视图更新准则。所有理论上可更新的可更新的视图也应该允许由系统更新。应该允许由系统更新。中国科学院西安网络中心11关于 ODBC中国科学院西安网络中心12客户机/服务器开发工具w Microsoft 公司的公司的 Visual Basic、Visual C+w Borland 公司的公司的 Delphiw PowerSoft 公司的公司的 PowerBuild
10、er中国科学院西安网络中心13数据类型在在 SQL 语言语言 中,每个列、局部变量、表达式和中,每个列、局部变量、表达式和参数都有一个相关的数据类型,这是指定对象可持有参数都有一个相关的数据类型,这是指定对象可持有的数据类型(整型、字符、的数据类型(整型、字符、money 等等)的特性。等等)的特性。SQL Server 提供系统数据类型集,定义了可与提供系统数据类型集,定义了可与 SQL Server 一起使用的所有数据类型。下面列出系一起使用的所有数据类型。下面列出系统提供的数据类型集。统提供的数据类型集。精确数字,近似数字,字符串,精确数字,近似数字,字符串,Unicode 字符字符串,
11、二进制字符串,其它数据类型。串,二进制字符串,其它数据类型。有关数据类型的细节请看有关数据类型的细节请看SQL Server 联机丛联机丛书。书。中国科学院西安网络中心14使用 Unicode 数据统一的字符编码标准统一的字符编码标准,采用双字节对字符进行编采用双字节对字符进行编码。码。Unicode 规格为全球商业领域中广泛使用的大部规格为全球商业领域中广泛使用的大部分字符定义了一个单一编码方案。所有的计算机都用分字符定义了一个单一编码方案。所有的计算机都用单一的单一的 Unicode 规格将规格将 Unicode 数据中的位模式数据中的位模式一致地翻译成字符。这保证了同一个位模式在所有的一
12、致地翻译成字符。这保证了同一个位模式在所有的计算机上总是转换成同一个字符。数据可以随意地从计算机上总是转换成同一个字符。数据可以随意地从一个数据库或计算机传送到另一个数据库或计算机,一个数据库或计算机传送到另一个数据库或计算机,而不用担心接收系统是否会错误地翻译位模式。而不用担心接收系统是否会错误地翻译位模式。有关有关Unicode的细节请看的细节请看SQL Server 联机丛联机丛书。书。中国科学院西安网络中心15一般的语法规则SQL 语法建议:语法建议:Microsoft SQL Server 2000 Transact-SQL 版遵从版遵从 Entry 级级 SQL-92标准,并支持标
13、准,并支持 Intermediate 级和级和 Full 级标准中的很多附加级标准中的很多附加功能。功能。有关有关Unicode的细节请看的细节请看SQL Server 联机丛联机丛书。书。中国科学院西安网络中心16样本数据库w pubs中国科学院西安网络中心17表、行、列w 行:行:SQL 表中构成表中的水平行的元素集合。表中的表中构成表中的水平行的元素集合。表中的每一行代表由该表建模的对象的一个出现,并存储该对象每一行代表由该表建模的对象的一个出现,并存储该对象所有特性的值。例如,在所有特性的值。例如,在 Northwind 示例数据库中,示例数据库中,Employees 表建立表建立 N
14、orthwind Traders 公司职员公司职员的模型。表中的第一行记录职员的模型。表中的第一行记录职员 ID 为为 1 的职员的全部的职员的全部信息(例如姓名和头衔)。信息(例如姓名和头衔)。w 列:列:SQL 表中每一行中的区域,存储用该表制作模型表中每一行中的区域,存储用该表制作模型的某个对象特性的数据值。例如,的某个对象特性的数据值。例如,Northwind 示例数据示例数据库中的库中的 Employees 表建立表建立 Northwind Traders 公公司职员的模型。司职员的模型。Employees 表的每个行中的表的每个行中的 LastName 列存储该行所代表的职员的姓氏
15、,就象窗口列存储该行所代表的职员的姓氏,就象窗口或表单中的或表单中的 Last Name 字段包含姓氏一样。字段包含姓氏一样。中国科学院西安网络中心18SQL Server服务管理器中国科学院西安网络中心19使用查询分析器中国科学院西安网络中心20查询分析器连接 SQL Serverw 本地连接本地连接(local).主机名主机名(用用ipconfig/all查询主机名查询主机名)IP地址地址w 远程连接远程连接 主机名主机名 IP地址地址中国科学院西安网络中心21第一单元查 询中国科学院西安网络中心22错误信息w select服务器服务器:消息消息 170,级别,级别 15,状态,状态 1,
16、行,行 1第第 1 行行:select 附近有语法错误。附近有语法错误。中国科学院西安网络中心23第一个查询第一个查询w select*from authors星号星号*告诉数据库返回由告诉数据库返回由from指定的表的所有列,返指定的表的所有列,返回顺序由数据库决定。大小写不影响查询结果。回顺序由数据库决定。大小写不影响查询结果。w select au_id,au_lname,au_fname,phone,address,city,state,zip,contract from authors与前一条与前一条SQL语句有相同的结果。语句有相同的结果。中国科学院西安网络中心24改变列的顺序w
17、select au_id,phone,au_lname,au_fname,address,city,state,zip,contract from authors现在你有了控制各列输出顺序的能力。现在你有了控制各列输出顺序的能力。中国科学院西安网络中心25选择个别列如果你只对某些列感兴趣,比如只想检索如果你只对某些列感兴趣,比如只想检索au_lname,au_fname,phone,address,就应,就应该这样写该这样写SQL语句:语句:w select au_lname,au_fname,phone,address from authors现在你已经得到你感兴趣的列了。现在你已经得到你感
18、兴趣的列了。中国科学院西安网络中心26选择另一张表如果你需要另一张表中的信息,该怎么办呢?如果你需要另一张表中的信息,该怎么办呢?w select*from discounts中国科学院西安网络中心27结果不重复的查询观察下面查询的输出:观察下面查询的输出:w select city from authors你会发现有相同的城市,两个人住在同一个城市这很你会发现有相同的城市,两个人住在同一个城市这很正常,但如果你想看看到底有那几个城市在表中怎么办呢正常,但如果你想看看到底有那几个城市在表中怎么办呢?试试这个:?试试这个:w select distinct city from authorsSQ
19、L语法中还有一个和语法中还有一个和distinct对应的关键字对应的关键字allw select all city from authors你会发现查询结果和上面的第一个你会发现查询结果和上面的第一个SQL语句相同,既然语句相同,既然如此,谁还想自找麻烦呢?如此,谁还想自找麻烦呢?中国科学院西安网络中心28第二单元表达式、条件和操作符中国科学院西安网络中心29表达式表达式用于返回一个值。它包括:字符串、数字、布表达式用于返回一个值。它包括:字符串、数字、布尔表达式。其实你已经用过表达式了,跟在尔表达式。其实你已经用过表达式了,跟在select和和from中间的东西都是表达式。中间的东西都是表达
20、式。表达式是符号与运算符的组合。简单的表达式可以是表达式是符号与运算符的组合。简单的表达式可以是一个常量、变量、列或标量函数。可以用运算符将两个或一个常量、变量、列或标量函数。可以用运算符将两个或更多的简单表达式联接起来组成复杂的表达式。更多的简单表达式联接起来组成复杂的表达式。中国科学院西安网络中心30条件中国科学院西安网络中心31Where子句Where子句的语法:子句的语法:where 先来回顾一下我们前面所学的先来回顾一下我们前面所学的“第一个查询第一个查询”w select*from authors你会看到,结果返回了数据库你会看到,结果返回了数据库pubs中表中表authors的所
21、的所有内容,如果你想查某一作者的情况,可以键入有内容,如果你想查某一作者的情况,可以键入:w select*from authors where au_lname=Smith我们得到了想要的结果。我们得到了想要的结果。中国科学院西安网络中心32操作符操作符是条件表达式中用于精确表示你想从数据库中操作符是条件表达式中用于精确表示你想从数据库中查询出什么数据的运算符号。操作符大致分为六类:算术查询出什么数据的运算符号。操作符大致分为六类:算术操作符、比较操作符、字符操作符、逻辑操作符、集合操操作符、比较操作符、字符操作符、逻辑操作符、集合操作符和其他操作符。作符和其他操作符。中国科学院西安网络中心
22、33算术操作符(+)加号有两种不同的用法,可以作算术操作符,也可以加号有两种不同的用法,可以作算术操作符,也可以作字符操作符,我们先用它作算术操作符。键入:作字符操作符,我们先用它作算术操作符。键入:w select discounttype,stor_id,lowqty,highqty,discount from discounts现在我们把所有的折扣增加现在我们把所有的折扣增加0.5元,可以键入元,可以键入:w select discounttype,stor_id,lowqty,highqty,discount+0.5 from discounts我们得到了想要的结果。我们得到了想要的结
23、果。SQL允许你将已有的列进行组允许你将已有的列进行组合或计算,以建立虚拟列和导出字段,原始表并不发生变合或计算,以建立虚拟列和导出字段,原始表并不发生变化。化。中国科学院西安网络中心34算术操作符(+)续观察一下观察一下discount+0.5字段的标题是字段的标题是(无列名无列名),太,太不好听了,我们把它改一改。键入:不好听了,我们把它改一改。键入:w select discounttype,stor_id,lowqty,highqty,discount+0.5 新折扣新折扣 from discounts很好,我们可以重新命名列标题。重新命名任意字段列很好,我们可以重新命名列标题。重新命
24、名任意字段列标题的语法格式:列名标题的语法格式:列名 别名别名(注意它们之间有空格)(注意它们之间有空格)加号还可以作为字符操作符,后面你将看到这种用法。加号还可以作为字符操作符,后面你将看到这种用法。中国科学院西安网络中心35建立虚拟列我们想把原来的折扣和新折扣加以对照,键入:我们想把原来的折扣和新折扣加以对照,键入:w select discounttype,stor_id,lowqty,highqty,discount 旧折扣旧折扣,discount+0.5 新折扣新折扣 from discounts太好了!我们不仅建立了一个新的列,还可以重新命太好了!我们不仅建立了一个新的列,还可以重
25、新命名任意列标题。名任意列标题。中国科学院西安网络中心36算术操作符(-)减号也有两种用法:可以用某列减去一个常数,或者减号也有两种用法:可以用某列减去一个常数,或者用一列减去另一列。另一种用法是改变某数的符号。用一列减去另一列。另一种用法是改变某数的符号。我们先来改变一列数的符号,键入:我们先来改变一列数的符号,键入:w select discounttype,stor_id,lowqty,highqty,discount-3 from discounts用一列减去另一列,键入:用一列减去另一列,键入:w select discounttype,stor_id,lowqty,highqty,
26、discount 旧折扣旧折扣,discount+4 新折扣新折扣,discount+4-discount 折扣差折扣差 from discounts中国科学院西安网络中心37算术操作符(-)续如果不小心在数据类型是字符串的字段使用了减号:如果不小心在数据类型是字符串的字段使用了减号:w select-discounttype,stor_id,lowqty,highqty,discount from discounts你将看到类似下面的结果:你将看到类似下面的结果:服务器服务器:消息消息 403,级别,级别 16,状态,状态 1,行,行 1对数据类型而言运算符无效。运算符为对数据类型而言运算符
27、无效。运算符为 minus,类型为,类型为 varchar。中国科学院西安网络中心38算术操作符(/)除号只有一种用法:除号只有一种用法:w select discounttype,stor_id,lowqty,highqty,discount/3 from discounts或者:或者:w select discounttype,stor_id,lowqty,highqty,discount 旧折扣旧折扣,discount+4 新新折扣折扣,(discount+4)/discount 折扣比折扣比 from discounts中国科学院西安网络中心39算术操作符(*)乘号也只有一种用法:乘号
28、也只有一种用法:w select discounttype,stor_id,lowqty,highqty,discount*3 from discounts或者:或者:w select discounttype,stor_id,lowqty,highqty,discount 旧折扣旧折扣,discount+4 新新折扣折扣,(discount+4)*discount 折扣乘折扣乘 from discounts中国科学院西安网络中心40算术操作符(%)模运算返回除法操作的余数:模运算返回除法操作的余数:w select discounttype,stor_id,lowqty,lowqty%3 模
29、模,highqty,discount from discounts后面我们将会看到,模运算还可以作为函数。后面我们将会看到,模运算还可以作为函数。中国科学院西安网络中心41算术操作符优先级先乘除后加减,括号优先。先乘除后加减,括号优先。中国科学院西安网络中心42比较操作符比较操作符比较两个表达式并返回如下三个值之一,比较操作符比较两个表达式并返回如下三个值之一,TRUE,FALSE或或NULL。重要重要 不能将空值用于区分表中两行所需的信息(例不能将空值用于区分表中两行所需的信息(例如,外键或主键)。如,外键或主键)。如果数据出现空值,则逻辑运算符和比较运算符有可如果数据出现空值,则逻辑运算符
30、和比较运算符有可能返回能返回 TRUE 或或 FALSE 以外的第三种结果以外的第三种结果 UNKNOWN。需要三值逻辑是导致许多应用程序出错之源。需要三值逻辑是导致许多应用程序出错之源。中国科学院西安网络中心43NULL空值空值NULL的概念:在数据库术语中,如果某记录的某的概念:在数据库术语中,如果某记录的某字段里没有数据,则该字段的值就是字段里没有数据,则该字段的值就是NULL。NULL并不意并不意味着字段包含一个味着字段包含一个0值或长度为值或长度为0的字符串。的字符串。0值是一个整值是一个整数,而长度为数,而长度为0的字符串也是字符串的一个具体值。的字符串也是字符串的一个具体值。NU
31、LL意味着什么也没有!操作符意味着什么也没有!操作符is null用来检测变量是否为用来检测变量是否为空值。空值。重要重要 为了减少对已有查询或报表的维护和可能的影为了减少对已有查询或报表的维护和可能的影响,建议尽量少使用空值。对查询和数据修改语句进行规响,建议尽量少使用空值。对查询和数据修改语句进行规划,使空值的影响降到最小。划,使空值的影响降到最小。中国科学院西安网络中心44Is null 操作符我们来找出一列中值为我们来找出一列中值为NULL的记录:的记录:w select*from discounts where lowqty is null 执行的不错,现在如果用等号代替执行的不错,
32、现在如果用等号代替 is null:w select*from discounts where lowqty=null会怎样呢?试试看吧,什么也没有,因为会怎样呢?试试看吧,什么也没有,因为lowqty=null 的比较结果是的比较结果是FALSE。还有一个操作符是还有一个操作符是IS NOT NULL,你一看就明白是什,你一看就明白是什么意思。么意思。中国科学院西安网络中心45比较操作符(=)我们早就用过等号了:我们早就用过等号了:w select*from discounts where discount=5上面字段上面字段discount的数据类型是数字型,对字符串类的数据类型是数字型,
33、对字符串类型的字段记得加上单引号型的字段记得加上单引号:w select*from discounts where discounttype=Volume Discount中国科学院西安网络中心46比较操作符(和=)大于号像这样工作:大于号像这样工作:w select*from discounts where discount 5如果要包括如果要包括 5:w select*from discounts where discount=5字符也可以比较字符也可以比较:w select*from discounts where discounttype=Vo 中国科学院西安网络中心47比较操作符(和
34、=)小于号像这样工作:小于号像这样工作:w select*from discounts where discount 6.7如果要包括如果要包括 6.7:w select*from discounts where discount=6.7字符也可以比较字符也可以比较:w select*from discounts where discounttype=Vo 中国科学院西安网络中心48比较操作符(或!=)不等于可以这样写:不等于可以这样写:w select*from discounts where discount 6.7还可以这样写还可以这样写:w select*from discounts
35、where discount!=6.7字符也可以不等于字符也可以不等于:w select*from discounts where discounttype Volume Discount 中国科学院西安网络中心49字符操作符(like和%)如果你想查找不十分精确的数据,如果你想查找不十分精确的数据,like 很好用:很好用:w select*from authors where au_lname like St%上面的操作选出上面的操作选出au_lname的第一个字母是的第一个字母是S的记录,试的记录,试试小写试小写w select*from authors where au_lname l
36、ike st%大小写没关系。大小写没关系。%是通配符,代表多个字符。是通配符,代表多个字符。%也可以多个使用,见下面也可以多个使用,见下面例子。例子。中国科学院西安网络中心50字符操作符(_)下划线是单个字符通配符:下划线是单个字符通配符:w select*from authors where zip like 946_9多个下划线使用:多个下划线使用:w select*from authors where zip like 9_6_8_与与%混合使用:混合使用:w select*from authors where phone like%9_6_8%中国科学院西安网络中心51字符操作符(+)
37、连接符连接符(+)用于连接两个字符串:用于连接两个字符串:w select au_id,au_lname,au_fname,au_lname+au_fname from authors我们在前面已经学过算术操作符我们在前面已经学过算术操作符+的用法。的用法。中国科学院西安网络中心52逻辑操作符(and)与与(and)用于连接符两个表达式。只有当两个表达式都用于连接符两个表达式。只有当两个表达式都为为TRUE时,时,and才返回才返回TRUE,否则返回,否则返回FALSE。w select*from discounts where discount=5 and discount=5 and di
38、scount=5 and discount=5 and discount=5 and discount=5 and discount=5 and discount10可用于字符型字段。可用于字符型字段。max函数和函数和min函数可以一块儿使用,查出值所在的函数可以一块儿使用,查出值所在的范围。范围。w select min(discount),max(discount)from discounts中国科学院西安网络中心64聚集函数(var)var函数计算标准差的平方函数计算标准差的平方方差。方差。w select var(discount)from discounts只对数值类型字段有效。只
39、对数值类型字段有效。中国科学院西安网络中心65聚集函数(stdev)stdev函数计算标准差的平方函数计算标准差的平方方差。方差。w select stdev(discount)from discounts只对数值类型字段有效。只对数值类型字段有效。中国科学院西安网络中心66日期函数(年、月、日)给定日期取年、月、日。给定日期取年、月、日。w SELECT Year Number=YEAR(03/12/2003),Month Number=MONTH(03/12/2003),DAY(03/12/2003)AS Day Number 注意不同的列标题的定义方法,比较一下我们以前学注意不同的列标题
40、的定义方法,比较一下我们以前学过的别名。过的别名。中国科学院西安网络中心67日期函数(年、月、日)与上页等价的写法。与上页等价的写法。w SELECT Year Number=DATEPART(yy,03/12/2003),Month Number=DATEPART(mm,03/12/2003),Day Number=DATEPART(dd,03/12/2003)注意不同的列标题的定义方法,比较一下我们以前学注意不同的列标题的定义方法,比较一下我们以前学过的别名。过的别名。中国科学院西安网络中心68日期函数(系统日期)从系统日期中取年、月、日。从系统日期中取年、月、日。w SELECT Yea
41、r Number=YEAR(getdate(),Month Number=MONTH(getdate(),DAY(getdate()AS Day Number 中国科学院西安网络中心69日期函数(访问字段)从日期字段中取年、月、日。从日期字段中取年、月、日。w SELECT Year Number=YEAR(hire_date),Month Number=MONTH(hire_date),DAY(hire_date)AS Day Number from employee中国科学院西安网络中心70数学函数我们经常要用到数学函数,例如计算我们经常要用到数学函数,例如计算discount列的列的指数
42、:指数:w SELECT discount,exp(discount)from discounts还有很多数学函数,例如:还有很多数学函数,例如:ABS、CEILING、DEGREES、FLOOR、POWER、RADIANS、SIGN、EXP、LOG、LOG10、SQUARE、SQRT和三角函数,这里不再列和三角函数,这里不再列举,可查阅举,可查阅SQL Server 联机丛书。联机丛书。中国科学院西安网络中心71字符函数(chr)将将 int ASCII 代码转换为字符的字符串函数,例代码转换为字符的字符串函数,例如:如:w SELECT char(65)整数表达式是介于整数表达式是介于 0
43、 和和 255 之间的整数。如果整之间的整数。如果整数表达式不在此范围内,将返回数表达式不在此范围内,将返回 NULL 值。值。对于对于 Unicode 编码,整数表达式可以大于编码,整数表达式可以大于255,例,例如:如:w SELECT nchar(65)w SELECT nchar(26578)中国科学院西安网络中心72字符函数(len)len函数返回给定字符串表达式的字符(而不是字节函数返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。)个数,其中不包含尾随空格。w SELECT discount,len(discount)from discounts len函数可用于
44、数字和字符,例如:函数可用于数字和字符,例如:w SELECT*,len(discounttype)from discounts还有很多字符函数,可查阅还有很多字符函数,可查阅SQL Server 联机丛书联机丛书中国科学院西安网络中心73数据类型转换数据类型转换有两种:数据类型转换有两种:隐性转换对于用户是不可见的。隐性转换对于用户是不可见的。SQL Server 自动自动将数据从一种数据类型转换成另一种数据类型。例如,如将数据从一种数据类型转换成另一种数据类型。例如,如果一个果一个 smallint 变量和一个变量和一个 int 变量相比较,这个变量相比较,这个 smallint 变量在比
45、较前即被隐性转换成变量在比较前即被隐性转换成 int 变量。变量。显式转换使用显式转换使用 CAST 或或 CONVERT 函数。函数。详细用法可查阅详细用法可查阅SQL Server 联机丛书。联机丛书。中国科学院西安网络中心74其他函数还有一些函数,如:配置函数、系统函数等,可查阅还有一些函数,如:配置函数、系统函数等,可查阅SQL Server 联机丛书联机丛书中国科学院西安网络中心75第四单元子句中国科学院西安网络中心76子句w selectw wherew order byw group byw hvaing中国科学院西安网络中心77Select语句的一般语法 SELECT ALL|
46、DISTINCT TOP n PERCENT WITH TIES :=*|table_name|view_name|table_alias.*|column_name|expression|IDENTITYCOL|ROWGUIDCOL AS column_alias|column_alias=expression ,.n 中国科学院西安网络中心78Select语句的一般语法(续)从上页我们看到了从上页我们看到了select语法的复杂性,实际上其语法的复杂性,实际上其他他SQL语句的语法也很复杂,迄今为止,我们一直避免这语句的语法也很复杂,迄今为止,我们一直避免这种复杂的语法图,因为对于初学者来
47、说,复杂的语法难以种复杂的语法图,因为对于初学者来说,复杂的语法难以理解,所以我们一直在用例子解释特定的语法点。下面我理解,所以我们一直在用例子解释特定的语法点。下面我们还这样讲,详细的语法可查阅们还这样讲,详细的语法可查阅SQL Server联机丛书。联机丛书。中国科学院西安网络中心79Select语句的子句w 从数据库中检索行,并允许从一个或多个表中选择一个从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列。虽然或多个行或列。虽然 SELECT 语句的完整语法较复杂,语句的完整语法较复杂,但是其主要的子句可归纳如下:但是其主要的子句可归纳如下:w SELECT select_li
48、st INTO new_table FROM table_source WHERE search_condition GROUP BY group_by_expression HAVING search_condition ORDER BY order_expression ASC|DESC 中国科学院西安网络中心80Select和where子句指定查询返回的列。你已经上百次地使用过指定查询返回的列。你已经上百次地使用过Select子句和子句和where子句了,以后你还要更多地使用它们。子句了,以后你还要更多地使用它们。中国科学院西安网络中心81从混沌到有序 Order by子句如果你需要把查
49、询结果按顺序显示,可以使用如果你需要把查询结果按顺序显示,可以使用order by子句:子句:w SELECT*from titles记录是按录入顺序显示的。下面按价格从小到大排序:记录是按录入顺序显示的。下面按价格从小到大排序:w SELECT*from titles order by price按价格从大到小排序:按价格从大到小排序:w SELECT*from titles order by price desc从小到大是升序排列,关键字是从小到大是升序排列,关键字是asc,系统默认排序为,系统默认排序为升序,所以升序,所以asc可以省略。从大到小是降序排列,关键字是可以省略。从大到小是降
50、序排列,关键字是desc。中国科学院西安网络中心82Order by子句(续)order by子句也可以用来对字符型数据排序,排序规子句也可以用来对字符型数据排序,排序规则较为复杂,可查阅则较为复杂,可查阅SQL Server联机丛书。联机丛书。w SELECT*from titles order by title asc order by子句也可以按多列进行排序:子句也可以按多列进行排序:w SELECT*from titles order by title,type,price注意优先级:注意优先级:w SELECT*from titles order by price,type,titl
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。