在ACCESS中创建数据库和查询(ACCESS 2000)
备份还原数据库
备份、还原 —— 复制\粘贴
压缩修复数据库命令 —— 复制该文件并重新组织,并重新组织文件在磁盘上的储存方式。压缩同时优化了Access数据库的性能。(工具——实用数据库工具或者工具——选项——选项——常规下选“关闭时压缩”复选框)
数据库安全性管理:
——“工具”——“安全”
表与关系
l 创建表的N种方法
l 在设计器中设置字段属性中格式设置方法
对文本和备注型字段,可以在 Format 属性的设置中使用特殊的符号来创建自定义格式。
可以使用以下的符号来创建自定义的文本和备注格式:
符号 | 说明 |
@ | 要求文本字符(字符或空格)。 |
& | 不要求文本字符。 |
< | 使所有字符变为小写。 |
> | 使所有字符变为大写。 |
文本和备注字段的自定义格式最多有两个节,每节都包含了字段中不同数据的格式指定。
输入掩码设置(用以向用户说明如何精确的输入数据)
使用 InputMask(输入掩码)属性,可以使数据输入更容易,并且可以控制用户在文本框类型的控件中的输入值。例如,可以为 Phone Number 字段创建一个输入掩码,以便向用户显示如何准确地输入新号码: (___) ___-____。通常使用“输入掩码向导” 帮助完成设置该属性的工作。
设置
InputMask 属性最多可包含三个用分号 (;) 分隔的节:
节 | 说明 |
第一节 | 指定了输入掩码的本身,例如,!(999) 999-9999。如果要查找可以用来定义输入掩码的字符列表,请参阅以下的表。 |
第二节 | 在输入数据时,指定 Microsoft Access 是否在表中保存字面值。如果在这个节使用了 0,所有的原义显示字符(例如,在一个电话号码输入掩码中的括号)都与数值一同保存;如果输入了 1 或未在此节中输入任何数据,则只有键入到控件中的字符才能保存。 |
第三节 | 指定 Microsoft Access 为一个空格所显示的字符,而这个空格应该在输入掩码中键入字符的地方。对于该节,可以使用任何字符,如果要显示空字符串,则需要将空格用双引号 (" ") 括起。 |
在 Visual Basic 中,需要使用字符串表达式来设置该属性。例如,以下为键入电话号码的文本框控件指定了所需的输入掩码:
Forms!Customers!Telephone.InputMask = "(###) ###-####"
在创建输入掩码时,可以使用特殊字符来要求某些必须输入的数据(例如,电话号码的区号),而其他数据则是可选的(例如电话分机号码)。这些字符指定了在输入掩码中必须输入的数据类型,例如数字或字符。
可以使用以下的字符来定义输入掩码:
字符 | 说明 |
0 | 数字(0 到 9,必需,不允许加号 [+] 与减号 [–])。 |
9 | 数字或空格(可选,不允许加号和减号)。 |
# | 数字或空格(可选;在“编辑”模式下空格以空白显示,但是在保存数据时空白将删除;允许加号和减号) |
L | 字母(A 到 Z,必需)。 |
? | 字母(A 到 Z,可选)。 |
A | 字母或数字(必选)。 |
A | 字母或数字(可选)。 |
& | 任何的字符或一个空格(必选)。 |
C | 任何的字符或一个空格(可选)。 |
.、:、;、-、/ | 小数点占位符及千位、日期与时间的分隔符。(实际的字符将根据 Windows“控制面板”中“区域设置属性”中的设置而定)。 |
< | 将所有字符转换为小写。 |
> | 将所有字符转换为大写。 |
! | 使输入掩码从右到左显示,而不是从左到右显示。键入掩码中的字符始终都是从左到右填入。可以在输入掩码中的任何地方包括感叹号。 |
\ | 使接下来的字符以原义字符显示(例如,\A 只显示为 A)。 |
注意 将 InputMask 属性设置为“密码”,可创建需要输入密码的控件。任何键入这个控件中的字符将以原字符保存,但以星号(*)显示。使用“密码”输入掩码可以避免在屏幕上显示键入的字符。
对于控件,可在属性表中设置该属性。对于表中的字段,可以在表“设计”视图中(位于“字段属性”节中)或“查询”窗口的“设计”视图中(位于“字段属性”的属性表中)设置该属性。
也可以使用宏或 Visual Basic 来设置 InputMask 属性。
设置标题,字段名处显示标题
设置默认值,不能对“OLE”和“自动编号”设置默认置
设置字符有效性规则与有效性文本
不符合有效性规则(可使用表达式生成器写有效性规则)弹出有效性文本。
ValidationRule 属性 | ValidationText 属性 |
<> 0 | 输入项必须是非零的数值。 |
> 1000 Or Is Null | 输入项必须为空值或大于 1000。 |
Like "A????" | 输入项必须是 5 个字符并以字母 A 为开头。 |
>= #1/1/96# And <#1/1/97# | 输入项必须是 1996 年中的日期。 |
DLookup("客户ID", "客户", "客户ID = Forms!客户!客户ID") Is Null | 输入项必须是唯一的“客户ID”(域合计函数只允许在窗体级的有效性中使用)。 |
对于包含字段内容的有效性检测:
[到货日期] <= [订购日期] + 30
“男” or “女”
设计视图标题栏右键——“检测有效性规则”
设置必填字段与允许空字符串
null与空字符串,null(直接按回车,[不知道有没有]),空字符串(“”),必填字段(不能为null), 允许空字符串(允许“”)
创建查阅字段数据类型
一个下拉列表,它的创建有两种方法。数据来源,一是:可以使用“值列表”或“表与查询”中的值。
创建方法一:使用查阅向导创建(在“数据类型”列表框中直接选择)
创建方法二:在属性,查阅中设置直接输入一组查阅值(行来源:“1”;“2”;)
主键和索引:
主键类型:自动编号主键、单字段主键、多字段主键
在多字段索引中字段的顺序非常重要,其次遵从它们在设计视图中的顺序,如果需要不同的顺序可以单击工具栏的索引按钮调整顺序。
一个表只能有一个主键,当设置另一个字段为主键时,原来的主键自动撤消。
索引的概念:
表中的主键已自动设置索引,其它的属性用户也可自行设置索引。
索引是使记录有序化的另一种技术,这种技术并不真正从物理上移动记录,而是在逻辑上维持要示的记录排列顺序。
ACCESS提供两种索引:单字段索引和多字段索引
两种创建方法:一是常规属性中、二是通过工具栏中的索引按钮,激活的索引窗口
名词:
主索引:(该索引设为主键,原来的主键不复存在)
唯一索引:索引出现重复值进,只取第一个
忽略NULL:索引排出带有空值的记录
创键表间关系:(数据库视图的工具栏中点“关系”按钮)
创建一对一关系、一对多关系、多对多关系
“实施参照完整性”
这里的“实施参照完整性”有两个选项,一个是“级联更新相关字段”(当更新主表字段时,相关表的相关字段自动进行更新),二个是“级联删除相关记录”(删除主表记录时,自动删除相关表的相关记录。)
当建立一对多关系时,两个表有主次之分,鼠标施动起始的表称为主表(“父表”),终止的表称为次表(“子表”或“相关表”)。
设置联接类型
关系联线点上右键,编辑关系选择连接类型:
内部连接、左外部连接、右外部连接
OLE对象的输入
菜单栏“插入”——对象——插入对象(图象支持.BMP)
记录的筛选和排序
菜单栏“记录”——筛选(如:按选定内容筛选)
菜单栏“记录”——排序
查询类型与查询视图
选择查询、参数查询、交叉表查询、操作查询(删除查询、更新查询、追加查询、生成表查询)、SQL查询
选择查询:使用向导创建查询(检索数据、统计汇总)、设计视图中的查询(确定查询输出源、指定查询输出字段、设置查询准则[在准则一行中多个准则之间是逻辑“与”的关系;如果存在逻辑或关系,需将设置准则输入到“或”行中]) !为运行
在设计视图中建立查询准则:
[表达式]
在属性表、设计网格或操作参数中输入表达式
在属性表、设计网格或操作参数中输入表达式时,如果键入的表达式比标准的输入区域大,则可以在“显示比例”框中键入完整的表达式。如果要打开“显示比例”框,在焦点位于将输入的表达式时,按 SHIFT+F2 即可。
在属性表、设计网格或操作参数中输入表达式时,MicrosoftAccess 将:
- 对国际版本,识别其特定区域的函数名称、属性名称和列表项分隔符。
- 在焦点改变时,插入特定字符。根据输入表达式的位置,Microsoft Access 将自动进行以下操作:
- 将窗体、报表、字段或控件的名称用方括号 ([ ]) 包围。
- 将日期用数字符号 (#) 包围。
- 将文本用双引号 (") 包围。
注意 计算控件的表达式前必须有一等号 (=)。
在 Microsoft Access 的国际版本中使用函数和属性
在绝大多数的 Microsoft Access 国际版本中,在表达式中输入函数或属性时:
- 可以在属性表、设计网格或操作参数中输入它的本地化名称(用各自的语言)。
- 为函数指定多个参数时,可以使用这个国家的列表项分隔符。在 Windows“控制面板”的“区域设置属性”对话框中“数字”选项卡上,可指定列表项分隔符。对于绝大多数的国际版本,默认的列表项分隔符是分号(;)。
但是,在 Visual Basic 代码中,必须键入函数或属性的英文名称,并使用逗号 (,) 作为列表项分隔符。
输入对象的名称
在标识符中用方括号 ([ ]) 包围字段、控件或属性,表明此元素是表、查询、窗体、报表、字段或控件的名称。
在标识符中键入对象名称时,如果它包含空格或特殊的字符(如下划线),则必须使用方括号将名称括起。如果名称不含空格或特殊字符,可以不用方括号。Microsoft Access 会自动插入方括号(除以下两示例)。
例如,可以键入下列表达式作为“控件来源”属性的设置,以便计算“运费”和“订单数量”字段值的总和:
= 运费 + 订单数量
Microsoft Access 将如下显示表达式:
= [运费] + [订单数量]
注意 在“有效性规则”的属性设置中或查询设计网格的“准则”单元格中,Microsoft Access 不会为所有输入项自动在名称两边插入括号。如果输入的是对象的名称,请确保在它的两边插入了括号,否则,Microsoft Access 可能会判定输入内容是文本,并为它插入双引号。
输入日期/时间值
括起表达式元素的数字符号 (#) 表示该组件为日期/时间值。Microsoft Access 自动将数字符号所包围的值作为日期/时间值计算,并允许用其他常用的日期或时间格式来键入此值。
如果字段的数据类型是日期/时间,在此字段的有效性表达式或准则表达式中不必为日期/时间值两边插入数字符号。可以用任一常用的日期或时间格式键入值,Microsoft Access 会自动在该值的两边插入数字符号。
Microsoft Access 根据位于 Windows“控制面板”中“区域设置属性”对话框的设置来显示日期/时间值。可以使用“格式”属性来改变日期的输出格式。
输入文本
括起表达式元素的双引号表示此元素为文本。
在有效性表达式或准则表达式中键入文本时,可以不必键入双引号,Microsoft Access 会自动插入双引号。
例如,如果键入表达式“北京”,则 Microsoft Access 将如下显示表达式:
"北京"
使用文本值作为准则的表达式的示例
字段 | 表达式 | 说明 |
货主城市 | "伦敦" | 显示已送货到伦敦的订单。 |
货主城市 | "伦敦" Or "休斯敦" | 使用 Or 运算符以显示已送货到伦敦或休斯敦的订单。 |
发货日期 | Between #1/5/95# And #1/10/95# | 使用 Between...And 运算符以显示不早于 95 年 1 月 5 日并且不晚于 95 年 1 月 10 日的送货订单。 |
发货日期 | #2/2/95# | 显示在 95 年 2 月 2 日送货的订单。 |
货主国家 | In("加拿大", "英国") | 使用 In 运算符以显示已送货到加拿大或英国的订单。 |
货主国家 | Not "美国" | 使用 Not 运算符以显示除美国之外已送货的目标国家的订单。 |
货主名称 | Like "S*" | 已送货到客户的订单,客户的名称以字母 S 开头。 |
公司名称 | >="N" | 显示已送货到公司的订单,公司的名称以字母 N 到 Z 开头。 |
订单 ID | Right([订单 ID], 2)="99" | 使用 Right 函数以显示 OrderID 值结尾为 99 的订单。 |
公司名称 | Len([公司名称]) |
以计算或处理日期结果作为准则表达式的示例
字段 | 表达式 | 说明 |
到货日期 | Between Date( ) And DateAdd("m", 3, Date( )) | 使用 Between...And 运算符和 DateAdd 和 Date 函数,以显示在某个日期之后的三个月内所要求的订单。 |
订购日期 | < Date( )- 30 | 使用 Date 函数以显示 30 天之前的旧订单。 |
订购日期 | Year([订购日期])=1996 | 使用 Year 函数以显示 1996 年的订单。 |
订购日期 | DatePart("q", [订购日期])=4 | 使用 DatePart 函数以显示第四季度的订单。 |
订购日期 | DateSerial(Year | 使用 DateSerial、Year 和 Month 函数以显示每个月最后一天的订单。 |
订购日期 | Year([订购日期])= | 使用 Year 和 Month 函数和 And 运算符以显示当前年、月的订单。 |
使用空字段值(Null 或空字符串)作为准则表达式的示例
如果要了解有关使用 Null 值和空字符串的详细内容,请单击 。
字段 | 表达式 | 说明 |
货主地区 | Is Null | 显示“货主地区”字段为“Null”(空白)的客户订单。 |
货主地区 | Is Not Null | 显示“货主地区”字段包含有值的客户订单。 |
传真 | "" | 显示没有传真机的客户订单,用“传真”字段中的零长度字符串值而不是“Null”(空白)值来指出。 |
使用字段的部分值作为准则表达式的示例
字段 | 表达式 | 显示 |
货主名称 | Like "S*" | 已送货到客户的订单,订单中的客户名称以字母 S 开头。 |
货主名称 | Like "*Imports" | 已送货到客户的订单,订单中的客户名称以 “Imports” 结尾。 |
货主名称 | Like "[A-D]*" | 已送货到客户的订单,订单中的客户名称以字母 A 到 D 开头。 |
货主名称 | Like "*ar*" | 已送货到客户的订单,订单中的客户名称包含字母串 “ar” 。 |
货主名称 | Like "Maison Dewe?" | 已送货到客户的订单,订单中的客户名称“Maison”作为名称的第一部分,并具有五个字母长的第二名称,且其中前四个字母是“Dewe”而最后的字母为未知的。 |
使用域合计函数的结果作为准则表达式的示例
字段 | 表达式 | 说明 |
运货费 | >(DStDev("[运货费]", "订单") + DAvg("[运货费]", "订单")) | |
单位数量 | >DAvg("[单位数量]", "订单明细") | 使用 DAvg 函数以显示订购数量高于平均订购数量的产品。 |
使用子查询的结果作为准则表达式的示例
字段 | 表达式 | 显示 |
单价 | (SELECT [单价] FROM [产品] WHERE [产品名称] = "Aniseed Syrup") | 价格和 Aniseed Syrup 相同的产品。 |
单价 | >(SELECT AVG([单价]) FROM [产品]) | 单价在平均值之上的产品。 |
工资 | > ALL (SELECT [工资] FROM [雇员] WHERE ([头衔] LIKE "*经理*") OR ([头衔] LIKE "*副总裁*")) | 比头衔为“经理” 或“副总裁”的雇员的工资高的销售代表的工资。 |
订单总计: | > ALL (SELECT AVG([单价] * [单位数量]) FROM [订单明细]) | 总和高于平均订单值的订单。 |
检索其中值介于 >、<、>=、<= 或 <> 之间指定值的记录
- 在查询“设计”视图中创建查询,添加要使用记录的表,然后添加要包含在结果中的字段至查询设计网格。
- 在适当字段的“准则”单元格的一个表达式,通过使用 Between...And 运算符或比较运算符(<、>、<>、<= 和 >=)来识别范围。例如,可以查找 1-Jan-93 之前定购的订单或有 10 到 35 个单位库存的产品。下表显示在表达式中使用的运算符的某些示例。
表达式 | 意义 |
>234 | 大于 234 的数 |
Between #2/2/93# And #12/1/93# | 日期由 2-Feb-93 到 1-Dec-93 |
<1200.45 | 小于 1200.45 的数 |
>="Callahan" | 由 Callahan 到字母表结束全部的名字 |
关于使用通配符搜索部分或完全匹配的内容
在指定要查找的内容时,如果出现以下情况,则可以使用通配符作为其他字符的占位符:
- 仅知道要查找的部分内容。
- 要查找以指定的字母为开头的或符合某种样式的指定内容。
对于 Microsoft Access 数据库,在“查找”和“替换”对话框中或在查询、命令和表达式中,可以使用下列的字符,查找如字段内容、记录或文件名等内容。
字符 | 用法 | 示例 |
* | 与任何个数的字符匹配,它可以在字符串中,当做第一个或最后一个字符使用。 | wh* 可以找到 what、white 和 why |
? | 与任何单个字母的字符匹配。 | B?ll 可以找到 ball、bell 和 bill |
[ [ | 与方括号内任何单个字符匹配。 | B[ae]ll 可以找到 ball 和 bell 但找不到 bill |
! | 匹配任何不在括号之内的字符。 | b[!ae]ll 可以找到 bill 和 bull 但找不到 bell |
- | 与范围内的任何一个字符匹配。必须以递增排序次序来指定区域(A 到 Z,而不是 Z 到 A)。 | b[a-c]d 可以找到 bad、bbd 和 bcd |
# | 与任何单个数字字符匹配。 | 1#3 可以找到 103、113、123 |
注意
- 通配符是专门用在文本数据类型中的,虽然有时候也可以成功地使用在其他数据类型中。例如日期,如果没更改这些数据类型的“区域设置”属性。
- 在使用通配符搜索星号 (*)、问号 (?)、数字号码 (#)、左方括号 ([)或减号 (-) 时,必须将搜索的项目放在方括号内。例如:搜索问号,请在“查找”对话框中输入 [?] 符号。如果同时搜索减号和其他单词时,请在方括号内将减号放置在所有字符之前或之后(但是,如果有惊叹号 (!),请在方括号内将减号放置在惊叹号之后)。如果在搜索惊叹号 (!) 或右方括号 (]),不需要将其放在方括号内。
- 必须将左、右方括号放在下一层方括号中 ([[ ]]),才能同时搜索一对左、右方括号 ([ ]),否则 Microsoft Access 会将这种组合作为一个空字符串处理。
- Microsoft Access 项目与 Access 数据库使用的通配符不同。有关的详细内容,请查阅 Microsoft SQL Server Books Online 中的索引“通配符”。如果正在其他数据源中进行搜索,也可能会需要通配符,有关详细内容,请参阅该数据源相应的文档。
用查询检索包括值列表中一个值的记录
- 在查询“设计”视图中创建查询,添加要使用记录的表,然后添加要包含在结果中的字段至查询设计网格。
- 在适当字段的“准则”单元格,输入使用 In 运算符的表达式。例如,查找在法国、德国或日本的供应商,在供应商表的国家字段的“准则”单元格中输入下列表达式:
In(法国,德国,日本)
也可以输入:
法国 Or 德国 Or 日本
l 算术运算符:+\-\*\/
l &(连接两个字符串)、[空格]界定字符串常量、#(界定日期型常量)
逻辑运算符not and or
表达式中的字符串:
表达式是一组产生结果的标识符、运算符和值。您可以使用表达式来设置许多属性和参数;在窗体、报表和数据访问页(在 Access 2002 和更高版本中)中定义计算控件;在查询中设置条件或定义计算字段;以及在宏中设置条件。
您可以使用“表达式生成器”来创建表达式,而“表达式生成器”可以在编写表达式的大多数位置中使用,例如在属性工作表中、查询设计网格的“条件”单元格中或“宏”窗口中。
在计算控件中使用表达式
表达式 | 说明 |
=[FirstName] & " " & [LastName] | 显示由空格分隔的 FirstName 和 LastName 字段的值。 |
=Left([ProductName], 1) | 使用 Left 函数显示 ProductName 字段值的第一个字符。 |
=Right([AssetCode], 2) | 使用 Right 函数显示 AssetCode 字段值的最后两个字符。 |
=Trim([Address]) | 使用 Trim 函数显示删除前导空格或尾随空格后的 Address 字段值。 |
=IIf(IsNull([Region]), [City] & " " & [PostalCode], [City] & " " & [Region] & " " & [PostalCode]) | 使用 IIf 函数显示 Region 为 Null 时 City 和 PostalCode 字段中的值;如果 Region 不为 Null,那么显示由空格分隔的 City、Region 和 PostalCode 字段的值。 |
使用带页码的表达式
下表中的示例假定您正在处理一份 3 页报表中的第 1 页。
表达式 | 结果 |
=[Page] | 1 |
="Page " & [Page] | Page 1 |
="Page " & [Page] & " of " & [Pages] | Page 1 of 3 |
=[Page] & " of " & [Pages] & " Pages" | 1 of 3 Pages |
=[Page] & "/"& [Pages] & " Pages" | 1/3 Pages |
=[Country] & " - " & [Page] | UK – 1 |
=Format([Page], "000") | 001 |
使用表达式执行算术运算
如果使用此表达式 | 那么 Access 显示 |
=[Subtotal]+[Freight] | Subtotal 和 Freight 字段值的和。 |
=[RequiredDate]-[ShippedDate] | RequiredDate 和 ShippedDate 字段值的差。 |
=[Price]*1.06 | Price 字段值乘以 1.06 的乘积(使 Price 值增加 6%)。 |
=[Quantity]*[Price] | Quantity 和 Price 字段值的乘积。 |
=[EmployeeTotal]/[CountryTotal] | EmployeeTotal 字段值除以 CountryTotal 字段值的商。 |
在聚合函数中使用表达式
Expression | 说明 |
=Avg([Freight]) | 使用 Avg 函数显示 Freight 控件值的平均值。 |
=Count([OrderID]) | 使用 Count 函数显示 OrderID 控件中记录的数量。 |
=Sum([Sales]) | 使用 Sum 函数显示 Sales 控件值的和。 |
=Sum([Quantity]*[Price]) | 使用 Sum 函数显示 Quantity 和 Price 控件值的和。 |
=[Sales]/Sum([Sales])*100 | 显示销售的百分比,即 Sales 控件值除以 Sales 控件中所有值的总和。 |
使用表达式返回两个值之一
表达式 | 说明 |
=IIf([Confirmed] = "Yes", "Order Confirmed", "Order Not Confirmed") | 使用 IIf 函数在 Confirmed 字段值为 Yes 时显示消息“Order Confirmed”;如果 Confirmed 字段值不为 Yes,那么显示消息“Order Not Confirmed”。 |
=IIf(IsNull([Country]), " ", [Country]) | 使用 IIf 函数在 Country 字段值为 Null 时显示空字符串;如果 Country 字段值不为 Null,那么显示 Country 控件值。 |
=IIf(IsNull([Region]), [City] & " " & [PostalCode], [City] & " " & [Region] & " " & [PostalCode]) | 使用 IIf 函数在 Region 为 Null 时显示 City 和 PostalCode 字段的值;如果 Region 不为 Null,那么显示 City、Region 和 PostalCode 字段的值。 |
是否类型中:-1是真、0是假
参数查询:
同样的用在准则中用[]来询问其内容
在查询中建立计算字段:
只需在字段下输入:字段名:<计算表达式>
交叉表查询:
数据库视图-新建-交叉表查询向导
(行标题、列表题,适用于如成绩表之类的数据表统计[适合于统计操作等])
操作查询:
选择查询——生成表查询——执行
(或者先进行生成表查询——选择——执行)
类似操作的还有:
更新查询
追加查询
删除查询
SQL(结构化查询语言)查询
ACCESS将“联合查询”、“传递查询”、和“数据定义查询”归结为SQL查询。
联合查询、传递查询、数据定义查询
命令格式:
SELECT [*][<表名.>]<字段名1>,…
FROM [<数据库名>!]<表名>,…
[INNER|LEFT|RIGHT|FULL] JOIN <数据库名>! <表名> [ON <联接条件>…]
[WHERE <联结条件>[AND <联接条件>]…]
[GROUP BY <分组表达式>…][HAVING <筛选条件>]
[UNION <SELECT 命令>]
[ORDER BY <字段> [ASC|DESC]…]
依次是:定位(select* from *)、联接(join)、选择(where)、分组(group by)、联合 (union)、排序(order by)
SQL函数:
AVG(<字段名>)
COUNT(<字段名>)
MIN(<字段名>)
MAX(<字段名>)
SUM(<字段名>)
1、左链接:就是以join的左边那个表为"主",以titles.ph=publishers.ph为判断标准,不管右边的表有没有对应的记录,都要把左边表的记录放在结果中去,但右边表没有相应的记录那应该放个什么数值进去?答案是就放个Null,表示没有。在左链接中,某记录在右边表,却不在左边表,那是不放进去结果去的,原因是左边表才是"主",要不要放由它决定:它有的,就一定放进去,它没有的,就不要了。
2、右链接:和左链接一样,只不过为"主"的一方调过来了,换成是由右边做"主"。
3、内链接:和左、右链接不同,它一定要左、右两边都有的记录才会放进结果,如果有某个记录不存在于任何一边,那这个记录是不会出现在结果中去的。
4、外链接:跟内联接相,反,相当于左、右链接的合并:不管什么情况,只要某个记录出现在这两个表,就一定会出现在结果中去,然后象左、右链接的处理方法一样,用Null来填充没有对应值的字段。
举例:
select SUM(学时数) AS 总学时 From course where 学分>8;
select 姓名,性别,出生日期,专业 FROM student WHERE 出生日期 IN (select MIN(出生日期) FROM student WHERE 性别=“女”);
select 专业,COUNT(专业) AS 人数 FROM student GROUP BY 专业
列出至少一名女生的专业和该专业的女生的人数
select 专业,COUNT(性别) AS 女生人数 FROM student where 性别=”女” GROUP BY 专业 HAVING COUNT(性别)>=1
好像自已在书写 SQL 语句时由于不清楚各个关键字的执行顺序, 往往组织的 SQL 语句缺少很好的逻辑, 凭感觉 "拼凑" ( 不好意思, 如果您的 SQL 语句也经常 "拼凑", 那您是不是得好好反省一下呢?, 呵呵). 确实是爽了自己, 可苦了机器, 服务器还需要在我们的杂乱无章的 SQL 语句中寻找它下一句需要执行的关键字在哪里. 效率嘛, 由于我们的感觉神经对秒以下的变化实在不敏感, 暂且就认为自已写的 SQL 顺序无关紧要, "反正没什么变化!", 呵呵.其实服务器对每句 SQL 解析时间都会有详细记录的, 大家可以看一下自已按习惯写的 SQL 和按标准顺序写的SQL解析时间差别有多大.
因此, 建议大家在平时工作中 SQL 语句按标准顺序写, 一是专业, 二是实用, 呵呵, 不过我觉得最主要的是心里感觉舒服.
标准的 SQL 的解析顺序为:
(1).FROM 子句, 组装来自不同数据源的数据
(2).WHERE 子句, 基于指定的条件对记录进行筛选
(3).GROUP BY 子句, 将数据划分为多个分组
(4).使用聚合函数进行计算
(5).使用 HAVING 子句筛选分组
(6).计算所有的表达式
(7).使用 ORDER BY 对结果集进行排序
举例说明: 在学生成绩表中 (暂记为 tb_Grade), 把 "考生姓名"内容不为空的记录按照 "考生姓名" 分组, 并且筛选分组结果, 选出 "总成绩" 大于 600 分的.
标准顺序的 SQL 语句为:
select 考生姓名, max(总成绩) as max总成绩
from tb_Grade
where 考生姓名 is not null
group by 考生姓名
having max(总成绩) > 600
order by max总成绩
在上面的示例中 SQL 语句的执行顺序如下:
(1). 首先执行 FROM 子句, 从 tb_Grade 表组装数据源的数据
(2). 执行 WHERE 子句, 筛选 tb_Grade 表中所有数据不为 NULL 的数据
(3). 执行 GROUP BY 子句, 把 tb_Grade 表按 "学生姓名" 列进行分组
(4). 计算 max() 聚集函数, 按 "总成绩" 求出总成绩中最大的一些数值
(5). 执行 HAVING 子句, 筛选课程的总成绩大于 600 分的.
(7). 执行 ORDER BY 子句, 把最后的结果按 "Max 成绩" 进行排序.
例:查询0201号学生选修的课程,列出他的姓名、选修的课程号和成绩。
解法一:select student.姓名,grade.课程号,grade.成绩 from student,grade
where student.学号 = grade.学号 AND grade.学号 = “0201”;
解法二:在FROM 子句中指定student表和grade表的INNER JOIN联接类型,然后通过ON子句给出联结条件、下列语句的查询结果与上面的解法1相同。
SELECT student.姓名,grade.课程号,grade成绩FROM student INNER JOIN grade ON student.学号=grade.学号 where grade.学号=”0201”;
作业:列出计算机专业学生英语课程的成绩,显示姓名、课程名和成绩,要求成绩由高到低排列显示。
联合查询:
SQL查询中的联合查询,可以将多个表合并为一个表,但要求用来合并的表具有相同的字段名,相应的字段具有相同的属性。
Select 城市,公司,联系人,“客户” AS [关系] from 客户
UNION Select城市,公司,联系人,“供应商” from 供应商
ORDER BY 城市、公司名称;
再如:
select 员工、姓名、退体金 AS 月收入 FROM 退体员工
UNION SELECT 员工、姓名、工资 AS 月收入 From 在职员工
ORDER BY 月收入 DESC;
传递查询:
可以直接向ODBC数据库发送SQL命令,不必链到服务器上的表,就可以直接使用相应的表。
属性设置:“ODBC链接字符串”ODBC;DSN=niu;UID=sa;Database=Northwind
数据定义语句(DDL):
CREATE TABLE…
ALTER TABLE…
DROP…
CREATE INDEX…
posted on 2009-11-03 16:28 ONLY LOVE PROGRAME 阅读(9819) 评论(0) 编辑 收藏 举报