29 第3章 用Photoshop设计网页图像 素,“高度”设置为400像素,如图3-1所示。 图3-1 “新建”对话框 02 单击“确定”按钮,新建空白文档,如图3-2 所示。 图3-2 新建空白文档 03 选择工具箱中的“自定形状工具”,在选项栏 中单击形状右边的按钮,在弹出的列表中选择环 形,如图3-3所示。 图3-3 选择环形 04 按住鼠标左键在舞台中绘制环形,如图3-4 所示。 05 选择工具箱中的“自定形状工具”,在选项 栏中选择合适的形状,在环形中间绘制形状,如 图3-5所示。 图3-4 绘制环形 图3-5 绘制形状 06 选择工具箱中的“矩形工具”,在舞台中绘制 红色的矩形,如图3-6所示。 图3-6 绘制矩形 07 选择工具箱中的“横排文字工具”,在矩形上 面输入文字“奥普照明”,如图3-7所示。 08 执行“文件”|“存储”命令,保存文档后的效 果如图3-8所示。 30 Dreamweaver+ASP动态网页设计从新手到高手 图3-7 输入文字 图3-8 保存文档的效果 3.2 设计网站Banner Banner是网站页面的横幅广告,Banner主要体现中心意旨,形象鲜明地表达最主要的情感思想或宣 传中心。 3.2.1 Banner设计指南 Banner的设计原则如下。 1. 真实性原则 Banner所传播的信息要真实。Banner文案要真实准确,客观实在;要言之有物,不能虚夸,更不能 伪造虚构。 2. 主题明确原则 在进行产品宣传时,要突出产品的特性,要简单明了,不能出现一些与主题无关的词语和画面。在 对产品进行市场定位之后,要旗帜鲜明地贯彻广告策略,有针对性地对广告对象进行诉求,要尽量将创 意文字化和视觉化。 3. 形式美原则 为了加强Banner的感染力,激发人们的审美情趣,在设计中进行必要的艺术夸张和创意,以增强消 费者的印象。Banner设计制作要运用美学原理,给人以美的享受,提高Banner的视觉效果和感染力。 4. 思想性原则 Banner的内容与形式要健康,绝不能以色情和颓废的内容来吸引消费者的注意,诱发他们的购买兴 趣和购买欲望。 5. 图形的位置合适 在Banner设计中,一般主体图形会按照视觉习惯放置在Banner的左侧,这样符合访问者的浏览习 惯。因为在看物体的时候,人们都是按照视觉习惯,从左到右地浏览,符合这样的规律,更能吸引访问 者的注意。 3.2.2 设计有动画效果的Banner 设计网页Banner的具体操作步骤如下。 31 第3章 用Photoshop设计网页图像 01 执行“文件”|“打开”命令,打开图像文件,如图3-9所示。 图3-9 打开的图像文件 02 执行“窗口”|“时间轴”命令,打开“时间轴”面板,单击底部的“复制所选帧”按钮,复制帧, 如图3-10所示。 03 执行“文件”|“置入”命令,弹出“置入”对话框,在对话框中选择要置入的文件2.jpg,如图3-11 所示。 图3-10 复制帧 图3-11 选择要置入的文件 04 单击“置入”按钮,将图像文件置入,并调整置入文件的大小与原来的图像同样大,如图3-12所示。 图3-12 置入的图像 32 Dreamweaver+ASP动态网页设计从新手到高手 05 选择工具箱中的“横排文字工具”,在舞台中输入文本,将文本分两个图层,如图3-13所示。 图3-13 输入文本 06 选中第1帧,在“图层”面板中将2图层和“山寺桃花始盛开”图层隐藏,如图3-14所示。 图3-14 隐藏图层 07 在“时间轴”面板中单击“帧延迟时间”按钮,设置帧延迟时间为2秒,如图3-15所示。 08 将第2个帧延迟时间设置为2秒,如图3-16所示。 图3-15 设置帧延迟时间 图3-16 设置帧延迟时间 09 选中第2帧,在“图层”面板中将“背景”图层和“人间四月芳菲尽”图层隐藏,如图3-17所示。 33 第3章 用Photoshop设计网页图像 图3-17 隐藏图层 10 执行“文件”|“存储为Web所用格式”命令,弹出“存储为Web所用格式”对话框,选择GIF方式输 出图像,如图3-18所示。 11 单击“存储”按钮,弹出“将优化结果存储为”对话框,在对话框中设置名称为banner.gif,格式选 择“仅限图像”,如图3-19所示。 图3-18 “存储为Web所用格式”对话框 图3-19 “将优化结果存储为”对话框 12 单击“保存”按钮即可保存图像,如图3-20所示。 图3-20 保存图像效果 3.3 设计网页特效文字 文字特效对网页设计来说至关重要,利用Photoshop的滤镜、样式、图层、色彩调整等功能可以设计 出丰富多彩的文字特效。下面介绍如何利用Photoshop制作光影绚丽的文字特效。 34 Dreamweaver+ASP动态网页设计从新手到高手 3.3.1 制作牛奶字 在牛奶的包装上或相关网店会见到牛奶字。下面介绍如何制作牛奶字。学会制作牛奶字,就可以制 作其他类型的字体。 01 执行“文件”|“打开”命令,打开一张图片作为背景,如图3-21所示。 02 执行“窗口”|“通道”命令,打开“通道”面板,单击底部的“创建新通道”按钮,创建一个新通 道,如图3-22所示。 图3-21 打开一张背景图片 图3-22 创建新通道 03 选择工具箱中的“横排文字”工具,在选项栏中设置字体和字体大小,在画布上输入milk,如图3-23 所示。 图3-23 输入文字 04 选择工具箱中的“移动工具”,这时画布中出现像素形式的“字”,如图3-24所示。 05 打开“通道”面板,复制得到“Alpha1拷贝”通道,如图3-25所示。 06 执行“滤镜”|“滤镜库”命令,在弹出的对话框中选择“艺术效果”滤镜组的“塑料包装”滤镜, 在对话框中进行相应的设置,如图3-26所示。 07 单击“确定”按钮,效果如图3-27所示。 35 第3章 用Photoshop设计网页图像 图3-24 选择工具箱中的“移动工具”后 图3-25 复制通道 图3-26 设置“塑料包装” 图3-27 “塑料包装”效果 08 在“通道”面板中选择图层通道,效果如图3-28所示。 09 在“图层”面板中单击底部的“创建新图层”按钮,新建一个图层,如图3-29所示。 图3-28 选择图层通道 图3-29 新建图层1 10 按Alt+Delete键填充白色,如图3-30所示。 11 切换至“通道”面板,按住Ctrl键单击Alphal通道,如图3-31所示。 12 执行“选择”|“修改”|“扩展”命令,打开“扩展选区”对话框,根据情况选择扩展量,如图3-32 所示。 13 回到“图层”面板中,为“图层1”添加矢量蒙版,如图3-33所示。 14 单击“图层”面板底部的“添加图层样式”按钮,在弹出的列表中选择“混合选项”,如图3-34 所示。 36 Dreamweaver+ASP动态网页设计从新手到高手 图3-30 填充白色 图3-31 单击Alpha1通道 图3-32 “扩展选区”对话框 图3-33 添加矢量蒙版 图3-34 选择“混合选项” 15 在弹出的“图层样式”对话框中选择“投影”,并根据情况设置参数,如图3-35所示。 16 选择“斜面和浮雕”,在右侧设置参数,如图3-36所示。 图3-35 设置“投影” 图3-36 设置“斜面和浮雕” 17 新建“图层2”,如图3-37所示。 18 在工具箱中选择“椭圆工具”,在选项栏中选择“像素”,模式为“正常”,如图3-38所示。 19 按住Shift键,在牛奶字上绘制圆,如图3-39所示。 20 执行“滤镜”|“扭曲”|“波浪”命令,打开“波浪”对话框,在对话框中进行相应的设置,如图3-40 所示。 21 单击“确定”按钮,效果如图3-41所示。 22 在“图层”面板中选择“图层2”,执行“图层”|“创建剪贴蒙版”命令,如图3-42所示。 37 第3章 用Photoshop设计网页图像 图3-37 新建图层2 图3-38 选择“椭圆工具” 图3-39 绘制圆 图3-40 “波浪”对话框 图3-41 波浪效果 图3-42 执行“创建剪贴蒙版”命令 38 Dreamweaver+ASP动态网页设计从新手到高手 23 效果如图3-43所示。 图3-43 牛奶文字 3.3.2 制作打孔字 制作打孔字的具体操作步骤如下。 01 执行“文件”|“新建”命令,弹出“新建”对 话框,如图3-44所示。 图3-44 “新建”对话框 02 新建空白文档,选择工具箱中的“横排文字工 具”,在文档中输入文字,如图3-45所示。 图3-45 输入文字 03 执行“窗口”|“字符”命令,打开“字符”面 板,单击“颜色”后面的“设置文本颜色”,弹 出“拾色器(文本颜色)”对话框,将颜色设置 为#ffaoao,如图3-46所示。 04 执行“编辑”|“自由变换”命令,调整文字大 小,如图3-47所示。 图3-46 设置文本颜色 图3-47 调整文字大小 05 执行“图层”|“向下合并”命令,合并图层, 然后执行“滤镜”|“模糊”|“高斯模糊”命令, 弹出“高斯模糊”对话框,在对话框中进行相应 的设置,如图3-48所示。 图3-48 “高斯模糊”对话框 06 执行“图像”|“调整”|“色阶”命令,弹出 “色阶”对话框,将“输出色阶”右侧滑块左移 少许,使文字外框显白色,如图3-49所示。 图3-49 “色阶”对话框 07 执行“滤镜”|“像素化”|“彩色半调”命 令,弹出“彩色半调”对话框,如图3-50所示。 39 第3章 用Photoshop设计网页图像 08 单击“确定”按钮,效果如图3-51所示。 图3-50 “彩色半调”对话框 图3-51 彩色半调效果 09 使用工具箱中的“魔棒”工具,单击白色背景部分,然后单击“图层”面板中的“新建图层”按 钮,新建一个图层,将背景填充为黑色,在工具箱中将前景色设置为黑色,按Alt+Delete键可将选区填 充为黑色,如图3-52所示。 10 使用工具箱中的“矩形选框工具”,选取文字部分,执行“选择”|“反向”命令,再按Delete键删 除,如图3-53所示。 图3-52 填充背景色 图3-53 选取部分背景执行 “反向”命令 11 将前景色设置为红色,选择“图层”面板上的“背景”层,按Alt+Delete键将背景层填充为红色,如 图3-54所示。 图3-54 设置背景色 40 Dreamweaver+ASP动态网页设计从新手到高手 12 执行“图像”|“调整”|“色相/饱和度”命令,弹出“色相/饱和度”对话框,调整明度,如图3-55 所示。 13 双击文字所在的图层,弹出“图层样式”对话框,设置“内阴影”,如图3-56所示。 图3-55 “色相/饱和度”对话框 图3-56 设置“内阴影” 14 设置“斜面和浮雕”,如图3-57所示。 15 单击“确定”按钮,打孔字效果如图3-58所示。 图3-57 设置“斜面和浮雕” 图3-58 打孔字效果 3.3.3 制作金属字 制作金属字的具体操作步骤如下。 01 执行“文件”|“新建”命令,弹出“新建”对话框,如图3-59 所示。 02 新建空白文档,将前景色设置为#e1e0e0,背景色设置为#bdbbbb, 选择工具箱中的“渐变工具”,做中心向外渐变,如图3-60 所示。 03 选择工具箱中的“横排文字工具”,在文档中输入文字,如图3-61 所示。 图3-59 “新建”对话框 41 第3章 用Photoshop设计网页图像 图3-60 设置渐变 图3-61 输入文字 04 执行“图层”|“图层样式”|“斜面和浮雕”命令,弹出“图层样式”对话框,如图3-62所示。 05 单击“等高线”,设置相关参数,如图3-63所示。 图3-62 “图层样式”对话框 图3-63 设置“等高线”的参数 42 Dreamweaver+ASP动态网页设计从新手到高手 06 设置“描边”的参数,如图3-64所示。 图3-64 设置“描边”的参数 07 单击“渐变”后面的“点按可编辑渐变”按 钮,弹出如图3-65所示的“渐变编辑器”对话 框,描边颜色从左至右设置为#b57003、#fdfec9、 #b77507、#fdfec9、#b87709、#fcfbbb、#b87709。 图3-65 “渐变编辑器”对话框 08 设置“颜色叠加”的参数,如图3-66所示。 图3-66 设置“颜色叠加”的参数 09 执行“文件”|“打开”命令,打开一幅图片, 如图3-67所示。 图3-67 打开图片 10 执行“编辑”|“定义图案”命令,弹出“图 案名称”对话框,如图3-68所示。 图3-68 “图案名称”对话框 11 单击“确定”按钮,返回到刚才的文档中,执 行“图层”|“图层样式”|“图案叠加”命令,弹 出“图层样式”对话框,设置“图案叠加”的参 数,如图3-69所示。 图3-69 设置“图案叠加”的参数 12 设置“外发光”的参数,如图3-70所示。 图3-70 设置“外发光”的参数 43 第3章 用Photoshop设计网页图像 13 设置“投影”的参数,如图3-71所示。 14 最后的效果如图3-72所示。 图3-71 设置“投影”的参数 图3-72 金属字效果 3.3.4 复制样式 以后做金属字,直接复制样式即可,具体方法为:右键单击文字层,在弹出的快捷菜单中执行“拷 贝图层样式”命令,如图3-73所示。 图3-73 执行“拷贝图层样式”命令 01 单击文字图层前面的“指示图层可见性”眼睛图标,隐藏文字图层,输入新的文字,如图3-74 所示。 02 在刚输入的文字上右击在弹出的快捷菜单中执行“粘贴图层样式”命令,如图3-75所示。 03 效果如图3-76所示。 44 Dreamweaver+ASP动态网页设计从新手到高手 图3-74 输入文字 图3-75 粘贴图层样式 图3-76 金属字效果 55 第5章 使用SQL语言查询数据库中的数据 导出视图的基本表中,因此视图是一个虚表。 用户可以用SQL语言对视图和基本表进行查 询。从用户的角度看,视图和基本表都是关系, 而存储文件对用户是透明的。 5.1.2 SQL的功能 SQL语言是一种高度非过程性的关系数据库 语言,采用集合的操作方式。操作的对象和结果 都是元组的集合,用户只需知道“做什么”, 无须知道“怎么做”。同时,SQL语言集数据查 询、数据定义、数据操纵、数据控制为一体,功 能强大,得到了越来越广泛的应用,几乎所有著 名的关系数据库系统(如DB2、Oracle、MySql、 Sybase、SQL Server、FoxPro、Access等)都支持 SQL语言。SQL已经成为关系数据库的国际性标准 语言。 SQL语言主要有四大功能。 (1)数据定义语言(Data Definition Language, DDL):DDL用于定义数据库的逻辑结构,是对 关系模式一级的定义,包括基本表、视图及索引 的定义。 (2)数据查询语言(Data Query Language, DQL):DQL用于查询数据。 (3)数据操纵语言(Data Manipulation Language,DML):DML用于关系模式中具体数 据的添加、删除、修改等操作。 (4)数据控制语言(Data Control Language, DCL):DCL用于数据访问权限的控制。 SQL语言的功能及用于实现功能的9个动词如 表5-1所示。 表5-1 SQL的四大功能及9个动词 SQL功能动词 数据定义(DDL) CREATE、DROP、ALTER 数据查询(DQL) SELECT 数据操纵(DML) INSERT、UPDATE、DELETE 数据控制(DCL) GRANT、REVOKE 5.1.3 SQL的优点 SQL语言简单易学,风格统一,利用几个简 单的英语单词的组合就可以完成所有功能。在 SQL Plus Worksheet环境下可以单独使用SQL语 句,并且几乎可以不加修改地嵌入Visual Basic、 Power Builder这样的前端开发平台,利用前端工 具的计算能力和SQL的数据库操纵能力,可以快 速建立数据库应用程序。SQL语言主要有以下 优点。 1)非结构化语言 SQL是一个非过程化的语言,一次处理一个 记录,为数据提供自动导航。SQL允许用户在高 层的数据结构中工作,可操作记录集而不对单 个记录进行操作。所有SQL语句接受集合作为输 入,返回集合作为输出。SQL的集合特性允许一 条SQL语句的结果作为另一条SQL语句的输入。 SQL不要求用户指定数据的存放方法,这种特性 使用户更易集中精力于要得到的结果。所有SQL 语句使用查询优化器,它是关系型数据库管理系 统(RDBMS)的一部分,由它决定对指定数据存 取的最快手段。查询优化器知道存什么索引,哪 儿使用合适,而用户不需要知道表是否有索引, 表有什么类型的索引。 2)统一的语言 SQL可用于所有用户的DB活动模型,包括系 统管理员、数据库管理员、应用程序员、决策支 持系统人员及许多其他类型的终端用户。SQL命 令只需很少时间就能学会。SQL为许多任务提供 了命令,包括查询数据,在表中插入、修改和删 除记录,建立、修改和删除数据对象,控制对数 据和数据对象的存取,保证数据库的一致性和完 整性等。 3)所有关系型数据库的公共语言 由于所有主要的RDBMS都支持SQL语言,用 户可将使用SQL的技能从一个RDBMS转移到另一 个RDBMS,用SQL编写的程序都是可以移植的。 5.2 T-SQL基本语法 T-SQL是微软公司在关系型数据库管理系 统SQL Server中的SQL-3标准的实现,是微软对 SQL的扩展,具有SQL的主要特点,同时增加了 变量、运算符、函数、流程控制和注释等语言元 57 第5章 使用SQL语言查询数据库中的数据 一般情况下,由于binary型的数据长度固定, 因此它比varbinary型的数据处理速度快。 3)image型 image型的数据也是可变长度的二进制数据, 通常用于存放图像。其最大长度为231-1字节。 2. 字符数据类型 字符数据类型是使用最多的数据类型,它可 以用来存储各种字母、数字符号、特殊符号等。 一般情况下,使用字符类型数据时,须在数据的 前后加上单引号或双引号。字符数据类型包括char 型、nchar型、varchar型和nvarchar型。 1)char型 char型是固定长度的非Unicode字符数据类 型,在存储时每个字符和符号占用1字节的存储空 间。其定义形式为char[(n)],其中n表示所有字 符所占的存储空间,取值为1~8000,即可容纳 8000个ANSI字符,默认值为1。若输入的数据字 符数小于n定义的范围,则系统自动在其后添加空 格来填满设定好的空间;若输入的数据字符数超 过n定义的范围,则系统自动截掉超出部分。 2)nchar型 nchar型是固定长度的Unicode字符数据类 型,由于Unicode标准规定在存储时每个字符和符 号占用2字节的存储空间,因此nchar型的数据比 char型数据多占用一倍的存储空间。其定义形式为 nchar[(n)],其中n表示所有字符所占的存储空 间,取值为1~4000,即可容纳4000个Unicode字 符,默认值为1。 使用Unicode标准字符集的好处是由于它使用 两个字节作存储单位,使得一个存储单位的容量 大大增加,这样就可以将全世界的语言文字都囊 括在内。当用户在一个数据列中同时输入不同语 言的文字符号时,系统不会出现编码冲突。 3)varchar型 varchar型是可变长度的非Unicode字符数据类 型。其定义形式为varchar[(n)]。它与char型类 似,n的取值范围是1~8000。由于varchar型具有 可变长度的特性,所以varchar型数据的存储长度 为实际数值的长度。如果输入数据的字符数小于n 定义的长度,系统也不会像char型那样在数据后面 用空格填充;但是如果输入的数据长度大于n定义 的长度,系统会自动截掉超出部分。 一般情况下,由于char型的数据长度固定, 因此它比varchar型数据的处理速度快。 4)nvarchar型 nvarchar型是可变长度的Unicode字符数据类 型,其定义形式为nvarchar[(n)]。由于它采用 了Unicode标准字符集,因此n的取值范围是1~ 4000。nvarchar型的其他特性与varchar类型相似。 3. 日期和时间数据类型 日期和时间数据类型代表日期和一天内的时 间,包括datetime型和smalldatetime型。 1)datetime型 datetime型是用于存储日期和时间的结合体的 数据类型。datetime型数据所占用的存储空间为8 字节,其中前4字节用于存储1900年1月1日以前或 以后的天数,数值分正负,正数表示在此日期之 后的日期,负数表示在此日期之前的日期;后4字 节用于存储从此日零时起所指定的时间经过的毫 秒数。如果在输入时省略了时间部分,则系统将 默认为12:00:00:000AM;如果省略了日期部分, 系统将默认为1900年1月1日。 datetime型用于定义一个与采用 24 小时制并 带有秒小数部分的一日内时间相组合的日期。日 期范围为1753年1月1日到9999年12月31日,时间 范围为00:00:00 到 23:59:59.997。通常,日期常量 可用单引号定界。 例如: declare @d datetime set @d='1980/11/1 5:20:29.121' select * from student where sBirthdate<@d 2)smalldatetime型 smalldatetime型与datetime型相似,但其存储 的日期时间范围较小,从1900年1月1日到2079年6 月6日。它的精度也较低,只能精确到分钟级,其 分钟个位上的值是根据秒数并以30s为界四舍五入 得到的。 Smalldatetime型数据所占用的存储空间为4字 节,其中前2字节存储从基础日期1900年1月1日以 来的天数,后2字节存储此日零时起所指定的时间 经过的分钟数。 4. 整数数据类型 整数型数据包括bigint型、int型、smallint型和 58 Dreamweaver+ASP动态网页设计从新手到高手 tinyint型。 1)bigint型 b i g i n t型数据的存储大小为8字节,共64 位。其中63位用于表示数值的大小,1位用于 表示符号。bigint型数据可以存储的数值范围 是-263~263-1。 2)int型 int型数据的存储大小为4字节,共32位。 其中31位用于表示数值的大小,1位用于表示符 号。int型数据存储的数值范围是-231~231-1,即 -2 147 483 648~2 147 483 647。 3)smallint型 smallint型数据的存储大小为2字节,共16位。 其中15位用于表示数值的大小,1位用于表示符 号。smallint型数据存储的数值范围是-215~215-1, 即-32 768~32 767。 4)tinyint型 tinyint型数据的存储大小只有1字节,共8位, 全部用于表示数值的大小,由于没有符号位, tinyint型的数据只能表示正整数。tinyint型数据存 储的数值范围是-27~27-1,即-256~255。 5. 浮点数据类型 浮点数据类型用于存储十进制小数。在SQL Server 2000中,浮点数值的数据采用上舍入的方 式进行存储,也就是说,要舍入的小数部分不论 其大小,只要是一个非零的数,就要在该数字的 最低有效位上加1,并进行必要的进位。由于浮点 数据为近似值,因此并非数据类型范围内的所有 数据都能精确地表示。 浮点数据类型包括real型、float型、decimal型 和numeric型。 1)real型 real型数据的存储大小为4字节,可精确到 小数点后第7位。这种数据类型的数据存储范 围为从-3.40E+38~-1.18E-38,0和1.18E-38~ 3.40E+38。 2)float型 float型的数据存储大小为8字节,可精确到 小数点后第15位。这种数据类型的数据存储范围 为从-1.79E+308~-2.23E-308,0和2.23E+308~ 1.79E+308。 float型的数据可写成float[(n)]的形式。其 中n是1~15的整数值,指定float型数据的精度。 当n为1~7时,实际上用户定义了一个real型的数 据,系统用4字节存储;当n为8~15时,系统认为 它是个float型的数据,用8字节存储它。这样既增 强了数据定义的灵活性,又节省了空间。 3)decimal型 decimal数据类型和numeric数据类型的功能完 全一样,它们都可以提供小数所需要的实际存储 空间,但也有一定的限制,用户可以用2~17字节 来存储数据,取值范围是-1038+1~1038-1。 decimal型数据和numeric型数据的定义格式为 decimal[(p,[s])]和numeric[(p,[s])]。其中,p 表示可供存储的值的总位数(不包括小数点), 默认值为18;s表示小数点后的位数,默认值为 0;参数之间的关系是0≤s≤p。例如,decimal (15,5)表示共有15位数,其中整数10位,小数 5位。 6. 逻辑数据类型 逻辑数据类型只有一种bit型。bit数据类型只 占用1字节的存储空间,可以取值为1、0或NULL 的整数数据类型。字符串值true和false可以转换为 不同的bit值。true转换为1,false转换为0。非0数 值转化为1。 例如下面的实例。 declare @a bit set @a='true' select @a 7. 文本数据类型 文本数据类型是用于存储大量非Unicode和 Unicode字符以及二进制数据的固定长度和可变长 度数据类型,包括text型、ntext型。 1)text型 text型是用于存储大量非Unicode文本数据 的可变长度数据类型,其容量理论上为2 31- 1 (2 147 483 647)字节。在实际应用时需要视硬盘 的存储空间而定。 在SQL Server 2000以前的版本中,数据库中 一个text对象存储的实际上是一个指针,它指向一 个以8KB为单位的数据页。这些数据页是动态增 加并被逻辑连接起来的。在SQL Server 2000中, 59 第5章 使用SQL语言查询数据库中的数据 则将text和image型的数据直接存放到表的数据行 中,而不是存放到不同的数据页中。这样就减少 了用于存储text和image类型的空间,并相应减少 了磁盘处理这类数据的I/O数量。 2)ntext型 ntext型是用于存储大量Unicode文本数据的可变 长度数据类型,其理论容量为230-1(1 073 741 823) 字节。ntext型的其他用法与text型基本一样。 8. 货币数据类型 货币数据类型用于存储货币或现金值,包括 money型和smallmoney型。在使用货币数据类型 时,应在数据前加上货币符号,以便系统辨识其 为哪国的货币,如果不加货币符号,则系统默认 为¥。 1)money型 money型是一个有4位小数的decimal值,其取 值为-263~263-1,精确到货币单位的千分之十。存 储大小为8字节。 2)smallmoney型 smallmoney型货币数据值为-2 147 483 648~ +2 147 483 647,精确到货币单位的千分之十。存 储大小为4字节。 例如,从表中读取数据赋予变量并显示,代 码如下。 declare @a smallmoney select @a=jbgz from gz where id='1001' select @a 5.2.3 SQL变量 变量是指在程序运行过程中,其值可以发生 变化的量,通常用来保存程序运行过程中的输入 数据,计算获得的中间结果和最终结果。变量对 于一种语言来说是必不可少的组成部分。Transact- SQL语言允许使用两种变量:一种是用户自己定 义的局部变量(Local Variable),另一种是系统 提供的全局变量(Global Variable)。 1. 局部变量 局部变量是一个能够拥有特定数据类型的对 象,它的作用范围仅限制在程序内部。局部变量 可作为计数器来计算循环执行的次数,或控制循 环执行的次数。另外,利用局部变量还可以保存 数据值,以供控制流语句测试以及保存由存储过 程返回的数据值等。 和其他高级语言一样,要使用局部变量,必 须在使用前用DECLARE语句定义,并且指定变量 的数据类型,然后可以使用SET或SELECT语句为 变量初始化;局部变量必须以@开头,而且必须 先声明后使用。其声明格式如下。 DECLARE @变量名 变量类型[,@变量名 变 量类型…] 其中,变量类型可以是SQL Server 2000支 持的所有数据类型,也可以是用户自定义的数据 类型。 局部变量不能使用“变量=变量值”的格式进 行初始化,必须使用SELECT或SET语句来设置其 初始值。初始化格式如下。 SELECT @局部变量=变量值 SET @局部变量=变量值 例如,在student数据库中使用名为@find的局 部变量查找所有以li开头的学生信息,代码如下。 USE student DECLARE @find varchar(30) SET @find = 'li%' SELECT Student_lname, Student_fname from authors WHERE Student_lname LIKE @li 执行结果如下。 Student_lname Student_fname ------------------------------------ -------------- lier Albert liger Anne 2. 全局变量 全局变量是SQL Server系统内部使用的变量, 其作用范围并不仅仅局限于某一程序,而是任何 程序均可以随时调用。全局变量通常存储一些 SQL Server的配置设定值和统计数据。用户可以在 程序中用全局变量来测试系统的设定值或Transact- SQL命令执行后的状态值。引用全局变量时,全 局变量的名字前面要有两个标记符@@。不能定 义与全局变量同名的局部变量。从SQL Server 7.0 开始,全局变量就以系统函数的形式使用。 61 第5章 使用SQL语言查询数据库中的数据 运算符含义 IN 如果操作数等于表达式列表中的一 个,那么就为TRUE LIKE 如果操作数与一种模式相匹配,那么 就为TRUE NOT 对任何其他布尔运算符的值取反 OR 如果两个布尔表达式中的一个为 TRUE,那么就为TRUE SOME 如果在一系列比较中,有些为TRUE, 那么就为TRUE 6. 字符串运算符 字符串运算符允许通过加号(+)进行字符串串 联。例如,对于语句SELECT'abc'+'xyz',其结果为 abcxyz。 7. 一元运算符 一元运算符只对一个表达式执行操作,该表 达式可以是numeric数据类型类别中的任何一种 数据类型。一元运算符的符号及其含义如表5-6 所示。 表5-6 一元运算符 运算符含义 +(正) 数值为正 -(负) 数值为负 ~(按位NOT) 返回数字的补数 8. 运算符的优先级 运算符的优先等级从高到低如下所示。 (1)括号:() (2)乘、除、求模运算符:*、/、% (3)加减运算符:+、- (4)比较运算符:=、>、<、>=、<=、 <>、!=、!>、!< (5)位运算符:^、&、| (6)逻辑运算符:NOT (7)逻辑运算符:AND (8)逻辑运算符:OR 5.2.5 SQL流程控制 SQL语言提供了一些可用于改变语句执行顺 序的命令,这些命令称为流程控制语句。流程控 制语句允许用户更好地组织存储过程中的语句, 方便地实现程序的功能。流程控制语句与常见的 程序设计语言类似,主要包含以下几种。 1. IF…ELSE语句 IF <条件表达式> <命令行或程序块> [ELSE [条件表达式] <命令行或程序块>] 其中,<条件表达式>可以是各种表达式的组 合,但表达式的值必须是“真”或“假”。ELSE 子句是可选的。IF…ELSE语句用来判断当某一条 件成立时执行某段程序,条件不成立时执行另一 段程序。如果不使用程序块,IF或ELSE只能执行 一条命令。IF…ELSE可以嵌套使用,最多可嵌套 32级。 2. BEGIN…END语句 BEGIN <命令行或程序块> END BEGIN…END用来设置一个程序块,该程 序块可被视为一个单元执行。BEGIN…END经常 在条件语句中使用,如IF…ELSE语句。如果IF或 ELSE子句为真,想让程序执行其后的多条语句, 这时就要把多条语句用BEGIN…END括起来,使 之成为一个语句块。在BEGIN…END语句中可 以嵌套另外的BEGIN…END语句来定义另一程 序块。 3. CASE语句 CASE语句根据满足的条件直接选择多项顺序 语句中的一项执行。 CASE<运算式> WHEN<运算式>THEN<运算式> … WHEN<运算式>THEN<运算式> [ELSE<运算式>] END 例如,在student数据库中查询每个学生居住 地的名称,可以使用如下代码实现。 SELECT fname, lname, CASE stateName WHEN 'SH' THEN '上海' WHEN 'BJ' THEN '北京' 续表 63 第5章 使用SQL语言查询数据库中的数据 库,以便生成这些文件。创建数据库后,还要知道如何访问数据库。 5.4.1 利用create database语句创建数据库 可以使用Transact-SQL语言提供的create database语句来创建数 据库。下面首先介绍create database语句的语法。 (1)基本语法 create database database_name [ON [PRIMARY ] [ <filespec> [ ,...n ] [, <filegroup> [ ,...n ] ] [LOG ON { <filespec> [ ,...n ] } ] ] ] (2)说明 PRIMARY 指定关联的<filespec>列表定义主文件。在主文件组的<filespec> 项中指定的第一个档将成为主档。一个数据库只能有一个主文件。 <filespec> 设置数据文件的逻辑名、存储路径、大小等特性。 <filegroup> 设置档组及组内档,其格式如下。 FILEGROUP filegroup_name <filespec> [,...n ] LOG ON {<filespec> [,...n ]} 指定数据库日志文件。 【例】下面创建数据库。 create database DBTest -- 创建数据库 on primary ( name=DBTest, filename='e:\mydata\DBTest.mdf', -- 指定关联的 列表定义主文件 size=3mb, maxsize=50mb, filegrowth=1mb ) log on ( name=DBTest_log, filename='e:\mydata\DBTest.ldf', -- 指定数据库 日志文件 size=3mb, maxsize=50mb, filegrowth=1mb ) 5.4.2 用use语句打开数 据库 【例】使用use语句打开数 据库。 Use Database1 Go Select * from t1 Use database2 Go Select * from t2 说明:通常在use语句后跟 上go语句,表示前后为两个批 处理。 5.5 定义、删除和 修改表 一个典型的关系型数据 库通常由一个或多个被称作表 的对象组成。数据库中的所有 数据或信息都被保存在这些表 中。数据库中的每一个表都具 有自己唯一的表名称,都是由 行和列组成,其中每一列包括 该列名称、数据类型、列的其 他属性等信息,而行则具体包 含某一列的记录或数据。下面 介绍表的定义、删除和修改等 基本操作。 5.5.1 利用create table 定义表 建立数据库最重要的一步 就是定义一些基本表。下面要 介绍如何利用SQL命令来建立一 个数据库中的表,其一般格式 如下。 CREATE TABLE<表名>( 65 第5章 使用SQL语言查询数据库中的数据 5 . 6 插入、删除和修改数据 记录 创建数据库和设计完表后,就需要对该表添 加内容,在添加过程中会涉及表记录的修改和删 除操作。下面介绍SQL中三条最基本的数据操作 语句,分别是Insert、Update和Delete。 5.6.1 插入记录Insert SQL的数据插入语句Insert通常有两种形式, 一种是插入一个元组,另一种是插入子查询结 果。后者可以一次插入多个元组。可以使用Insert 语句来添加一个或多个记录至一个表中。 1. 插入单个元组 插入单个元组的Insert语句的格式如下。 INSERT INTO<表名>[(<属性列1>[,<属性列 2>…]) VALUES(<常量l>[,<常量2>]…) 其功能是将新元组插入指定表中。其中,新 记录属性列1的值为常量1,属性列2的值为常量 2。如果某些属性列在INTO子句中没有出现,则 新记录在这些列上将取空值。 在表定义时说明了NOT NULL的属性列不能 取空值,如果INTO子句中没有指明任何列名,则 新插入的记录必须在每个属性列上均有值。 【例】将一个学生记录(学号:2009020;姓 名:马燕;性别:女;所在系:计算机;年龄: 21岁)插入Student表中。 Insert Into Student Values('2009020',' 马燕','女','计算 机',21); 2. 插入子查询结果 子查询不仅可以嵌套在SELECT语句中,也 可以嵌套在INSERT语句中,用以生成要插入的数 据。插入子查询结果的INSERT语句的格式如下。 Insert Into <表名>[(<属性列1>[,<属性列2>]…] 子查询; 其功能是批量插入,一次将子查询的结果全 部插入指定表中。 【例】对每一个系,求学生的平均年龄,并 把结果存入数据库。 首先要在数据库中建立一个有两个属性列的 新表,表中一列存放系名,另一列存放相应系的 学生平均年龄。 Create table Deptage ( S d e p t CHAR(15),Avgage smallint); Insert into Deptage(Sdept, Average) (SELECT Sdept,AVG(Sage) FROM Student GROUP BY Sdept); 5.6.2 修改记录Update Update语句用于更新或者改变匹配指定条件 的记录,它是通过构造一个where语句来实现的。 修改操作又称为更新操作,其语句的一般格式 如下。 Update<表名> Set<列名>=<表达式>[,<列名> =<表达式 >]... [where<条件>]; 其功能是修改指定表中满足where子句条件的 元组。其中,set子句用于指定修改方法,即用<表 达式>的值取代相应的属性列值。如果省略where 子句,则表示要修改表中的所有元组。 1. 修改某一个元组的值 【例】将学生2008001的年龄改为24岁。 Update Student Set Sage =24 where Sno ='2008001'; 2. 修改多个元组的值 【例】将所有学生的年龄增加1岁。 Update Student Set Sage = Sage +1 5.6.3 删除记录Delete Delete语句用来从表中删除记录或者行,其语 66 Dreamweaver+ASP动态网页设计从新手到高手 句格式如下。 Delete From<表名> [where<条件>]; Delete语句的功能是从指定表中删除满足 where子句条件的所有元组。如果省略where子 句,表示删除表中全部元组,但表的定义仍在字 典中,也就是说,Delete语句删除的是表中的数 据,而不是关于表的定义。 1. 删除某一个元组的值 【例】删除学号为2008001的学生记录。 Delete From Student Where Sno='2008001'; Delete操作也是一次只能操作一个表,因此同 样会遇到Update操作中提到的数据不一致问题。 例如,2008001学生删除后,有关他的其他信息也 应同时删除,而这必须用一条独立的Delete语句 完成。 2. 删除多个元组的值 【例】删除所有的学生选课记录。 Delete From SC 这条Delete语句使SC成为空表,它删除了SC 的所有元组。 5.7 数据的查询—SELECT 语句 在众多SQL命令中,SELECT语句是使用最频 繁的。SELECT语句主要用来对数据库进行查询并 返回符合用户查询标准的结果数据。 5.7.1 SELECT语句基本语法 建立数据库的目的是为了查询数据,因此数 据库查询是数据库的核心操作。SQL语言提供了 SELECT语句进行数据库的查询,该语句具有灵活 的使用方式和丰富的功能。SELECT语句有一些子 句可以选择,而FROM是唯一必须的子句。每一 个子句有大量的选择项、参数等。 SELECT [ALL | DISTINCT][TOP n ]< 目标列表达式>[,<目标列表达式>]… FROM<表名或视图名>[,<表名或视图名>]… [WHERE<条件表达式>] [GROUP BY<列名1>[HAVING<条件表达式>]] [ORDER BY<列名2> [ASC | DESC]]; 整个SELECT语句的含义是,根据WHERE子 句的条件表达式,从FROM子句指定的基本表或 视图中找出满足条件的元组,再按SELECT子句中 的目标列表达式,选出元组中的属性值形成结果 表。如果有GROUP子句,则将结果按<列名1>的 值进行分组,该属性列值相等的元组为一个组, 每个组产生结果表中的一条记录。通常会在每组 中作用集函数。如果GROUP子句带HAVING短 语,则只有满足指定条件的组才予输出。如果有 ORDER子句,则结果表还要按<列名2>的值的升 序或降序排序。 下面以“ 学生- 课程” 数据库为例说明 SELECT语句的各种用法,“学生-课程”数据库 中包括三个表。 “学生”表Student由学号(Sno)、姓名 (Sname)、性别(Ssex)、年龄(Sage)、所在 系(Sdept)5个属性组成,可记为 Student(Sno,Sname,Ssex,Sage,Sdept) 其中Sno为主码。 “课程”表Course由课程号(Cno)、课 程名(Cname)、选修课号(Cpno)、学分 (Ccredit)4个属性组成,可记为 Course(Cno,Cname,Cpno,Ccredit) 其中Cno为主码。 “学生选课”表SC由学号(Sno)、课程号 (Cno)、成绩(Grade)3个属性组成,可记为 SC(Sno,Cno,,Grade) 其中(Sno,Cno)为主码。 5.7.2 单表查询 SELECT语句既可以完成简单的单表查询,也 可以完成复杂的连接查询和嵌套查询。 67 第5章 使用SQL语言查询数据库中的数据 1. 选择表中的若干列 选择表中的全部列或部分列,其变化方式主 要表现在SELECT子句的<目标列表达式>上。 【例】查询全体学生的学号与姓名。 SELECT Sno,Sname FROM Student; 【例】查询全体学生的详细记录。 SELECT * FROM Student; 2. 选择表中的若干元组 通过<目标列表达式>的各种变化,可以根 据实际需要,从一个指定的表中选择所有元组的 全部或部分列。如果只想选择部分元组的全部 或部分列,则还需要指定DISTINCT短语或指定 WHERE子句。 【例】查询所有选修过课的学生的学号。 SELECT Sno FROM SC; 假设SC表中有下列数据 Sno Cno Grade 09001 1 92 09001 2 85 09001 3 88 09002 2 90 09002 3 80 执行上面的SELECT语句后,结果为 Sno 09001 09001 09001 09002 09002 可用DISTINCT短语消除重复 SELECT DISTINCT Sno FROM SC; 执行结果为 Sno 09001 09002 【例】查询所有年龄在18岁以下的学生的姓 名及其年龄。 SELECT Sname,Sage FROM Student WHERE Sage<18; 或 SELECT Sname,Sage FROM Student WHERE NOT Sage>=18; 【例】查询年龄为15~23岁的学生的姓名、 系别和年龄。 SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 15 AND 23; 5.7.3 对查询结果排序语句ORDER BY 如果没有指定查询结果的显示顺序,DBMS 将按其最方便的顺序输出查询结果。ORDER BY 条件子句,通常与SELECT语句合并使用,目的是 将查询的结果,依照指定字段进行排序,其中升 序ASC为默认值。 【例】查询选修了4号课程的学生的学号及其 成绩,查询结果按分数的降序排列。 SELECT Sno,Grade FROM SC WHERE Cno = '4' GROUP BY Grade DESC; 查询结果为 Sno Grade 09007 99 09003 83 09010 82 09009 71 09015 65 09002 45 5.7.4 对查询结果分组语句GROUP BY GROUP BY子句可以将查询结果表的各行按 一列或多列取值相等的原则进行分组。 【例】查询各个课程号与相应的选课人数。 SELECT Cno,COUNT(Sno) FROM SC 68 Dreamweaver+ASP动态网页设计从新手到高手 GROUP BY Cno; 查询结果为 Cno COUNT(Sno) 1 52 2 44 3 44 4 23 5 45 5.7.5 连接查询 一个数据库中的多个表之间一般存在某种内 在联系,它们共同提供有用的信息。前面的查询 都是针对一个表进行的。若一个查询同时涉及两 个以上的表,则称为连接查询。连接查询实际上 是关系数据库中最主要的查询,主要包括等值连 接查询、非等值连接查询、自身连接查询、外连 接查询和复合条件连接查询。 【例】查询每个学生及其选修课程的情况。 学生情况存放在Student表中,学生选课情 况存放在SC表中,所以本查询实际上同时涉及 Student与SC两个表中的数据。这两个表之间的联 系是通过两个表都具有的属性Sno实现的。要查询 学生及其选修课程的情况,就必须将这两个表中 学号相同的元组连接起来。 这是一个等值连接,完成本查询的SQL语 句为 SELECT Student.*, SC.* FROM Student,SC WHERE Student.Sno = SC.Sno; 进行多表连接查询时,SELECT子句与 WHERE子句中的属性名前都加上了表名前缀,这 是为了避免混淆。如果属性名在参加连接的各表 中是唯一的,则可省略表名前缀。 5.8 本章小结 SQL语言的主要功能是与各种数据库建立联 系,进行沟通。按照ANSI(美国国家标准协会) 的规定,SQL被作为关系型数据库管理系统的标 准语言。SQL语句可以用来执行各种各样的操 作,如更新数据库中的数据,从数据库中提取数 据等。SQL数据查询是SQL语言中最重要、最丰 富,也是最灵活的内容。建立数据库的目的就是 为了查询数据。