CREATE DATABASE 为SQl语句,用于创建数据库。
语法
CREATE DATABASE database_name
[ ON
[ < filespec > [ ,n ] ]
[ ,< filegroup > [ ,n ] ]
]
[ LOG ON { < filespec > [ ,n ] } ]
[ COLLATE collation_name ]
[ FOR LOAD | FOR ATTACH ]
< filespec > ::=
[ PRIMARY ]
([ NAME =logical_file_name ,]
FILENAME ='os_file_name'
[ ,SIZE =size ]
[ ,MAXSIZE ={ max_size| UNLIMITED } ]
[ ,FILEGROWTH =growth_increment ] )[ ,n]
< filegroup > ::=
FILEGROUP filegroup_name< filespec > [ ,n]
参数
database_name
新数据库的名称。数据库名称在服务器中必须唯一,并且符合标识符的规则。database_name最多可以包含 128 个字符,除非没有为日志指定逻辑名。如果没有指定日志文件的逻辑名,则 Microsoft® SQL Server™ 会通过向 database_name追加后缀来生成逻辑名。该 *** 作要求 database_name在 123 个字符之内,以便生成的日志文件逻辑名少于 128 个字符。
ON
指定显式定义用来存储数据库数据部分的磁盘文件(数据文件)。该关键字后跟以逗号分隔的 <filespec> 项列表,<filespec> 项用以定义主文件组的数据文件。主文件组的文件列表后可跟以逗号分隔的 <filegroup> 项列表(可选),<filegroup> 项用以定义用户文件组及其文件。
n
占位符,表示可以为新数据库指定多个文件。
LOG ON
指定显式定义用来存储数据库日志的磁盘文件(日志文件)。该关键字后跟以逗号分隔的 <filespec> 项列表,<filespec> 项用以定义日志文件。如果没有指定 LOG ON,将自动创建一个日志文件,该文件使用系统生成的名称,大小为数据库中所有数据文件总大小的 25%。
FOR LOAD
支持该子句是为了与早期版本的 Microsoft SQL Server 兼容。数据库在打开 dbo use only数据库选项的情况下创建,并且将其状态设置为正在装载。SQL Server 70 版中不需要该子句,因为 RESTORE 语句可以作为还原 *** 作的一部分重新创建数据库。
FOR ATTACH
指定从现有的一组 *** 作系统文件中附加数据库。必须有指定第一个主文件的 <filespec> 条目。至于其它 <filespec> 条目,只需要与第一次创建数据库或上一次附加数据库时路径不同的文件的那些条目。必须为这些文件指定 <filespec> 条目。
附加的数据库必须使用与 SQL Server 相同的代码页和排序次序创建。应使用 sp_attach_db系统存储过程,而不要直接使用 CREATE DATABASE FOR ATTACH。只有必须指定 16 个以上的 <filespec> 项目时,才需要使用 CREATE DATABASE FOR ATTACH。
如果将数据库附加到的服务器不是该数据库从中分离的服务器,并且启用了分离的数据库以进行复制,则应该运行 sp_removedbreplication从数据库删除复制。
collation_name
指定数据库的默认排序规则。排序规则名称既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。如果没有指定排序规则,则将 SQL Server 实例的默认排序规则指派为数据库的排序规则。
有关 Windows 和 SQL 排序规则名称的更多信息,请参见 COLLATE。
PRIMARY
指定关联的 <filespec> 列表定义主文件。主文件组包含所有数据库系统表。还包含所有未指派给用户文件组的对象。主文件组的第一个 <filespec> 条目成为主文件,该文件包含数据库的逻辑起点及其系统表。一个数据库只能有一个主文件。如果没有指定 PRIMARY,那么 CREATE DATABASE 语句中列出的第一个文件将成为主文件。
NAME
为由 <filespec> 定义的文件指定逻辑名称。如果指定了 FOR ATTACH,则不需要指定 NAME 参数。
logical_file_name
用来在创建数据库后执行的 Transact-SQL 语句中引用文件的名称。logical_file_name在数据库中必须唯一,并且符合标识符的规则。该名称可以是字符或 Unicode 常量,也可以是常规标识符或定界标识符。
FILENAME
为 <filespec> 定义的文件指定 *** 作系统文件名。
'os_file_name'
*** 作系统创建 <filespec> 定义的物理文件时使用的路径名和文件名。os_file_name中的路径必须指定 SQL Server 实例上的目录。os_file_name不能指定压缩文件系统中的目录。
如果文件在原始分区上创建,则 os_file_name必须只指定现有原始分区的驱动器字母。每个原始分区上只能创建一个文件。原始分区上的文件不会自动增长;因此,os_file_name指定原始分区时,不需要指定 MAXSIZE 和 FILEGROWTH 参数。
SIZE
指定 <filespec> 中定义的文件的大小。如果主文件的 <filespec> 中没有提供 SIZE 参数,那么 SQL Server 将使用 model数据库中的主文件大小。如果次要文件或日志文件的 <filespec> 中没有指定 SIZE 参数,则 SQL Server 将使文件大小为 1 MB。
size
<filespec> 中定义的文件的初始大小。可以使用千字节 (KB)、兆字节 (MB)、千兆字节 (GB) 或兆兆字节 (TB) 后缀。默认值为 MB。指定一个整数,不要包含小数位。size的最小值为 512 KB。如果没有指定 size,则默认值为 1 MB。为主文件指定的大小至少应与 model数据库的主文件大小相同。
MAXSIZE
指定 <filespec> 中定义的文件可以增长到的最大大小。
max_size
<filespec> 中定义的文件可以增长到的最大大小。可以使用千字节 (KB)、兆字节 (MB)、千兆字节 (GB) 或兆兆字节 (TB) 后缀。默认值为 MB。指定一个整数,不要包含小数位。如果没有指定 max_size,那么文件将增长到磁盘变满为止
说明在磁盘即将变满时,Microsoft Windows NT® S/B 系统日志会警告 SQL Server系统管理员。
UNLIMITED
指定 <filespec> 中定义的文件将增长到磁盘变满为止。
FILEGROWTH
指定 <filespec> 中定义的文件的增长增量。文件的 FILEGROWTH 设置不能超过 MAXSIZE 设置。
growth_increment
每次需要新的空间时为文件添加的空间大小。指定一个整数,不要包含小数位。0 值表示不增长。该值可以 MB、KB、GB、TB 或百分比 (%) 为单位指定。如果未在数量后面指定 MB、KB 或 %,则默认值为 MB。如果指定 %,则增量大小为发生增长时文件大小的指定百分比。
如果没有指定 FILEGROWTH,则默认值为 10%,最小值为 64 KB。指定的大小舍入为最接近的 64 KB 的倍数。
扩展资料
组成
在正式学习SQL语言之前,首先让我们对SQL语言有一个基本认识,介绍一下SQL语言的组成:
1、一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。
2、一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项。
3、一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。
4、一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。
5、用户可以用SQL语句对视图和基本表进行查询等 *** 作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)。
6、SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada语言等。SQL用户也能作为独立的用户接口,供交互环境下的终端用户使用。
参考资料来源:百度百科-SQL数据库
参考资料来源:百度百科-Create Database
(1) 整数型
整数包括bigint、int、smallint和tinyint,从标识符的含义就可以看出,它们的表示数范围逐渐缩小。
l bigint:大整数,数范围为 -263 (-9223372036854775808)~263-1 (9223372036854775807) ,其精度为19,小数位数为0,长度为8字节。
l int:整数,数范围为 -231 (-2,147,483,648) ~231 - 1 (2,147,483,647) ,其精度为10,小数位数为0,长度为4字节。
l smallint:短整数,数范围为 -215 (-32768) ~215 - 1 (32767) ,其精度为5,小数位数为0,长度为2字节。
l tinyint:微短整数,数范围为 0~255,长度为1字节,其精度为3,小数位数为0,长度为1字节。
(2) 精确整数型
精确整数型数据由整数部分和小数部分构成,其所有的数字都是有效位,能够以完整的精度存储十进制数。精确整数型包括decimal 和 numeric两类。从功能上说两者完全等价,两者的唯一区别在于decimal不能用于带有identity关键字的列。
声明精确整数型数据的格式是numeric | decimal(p[,s]),其中p为精度,s为小数位数,s的缺省值为0。例如指定某列为精确整数型,精度为6,小数位数为3,即decimal(6,3),那么若向某记录的该列赋值56342689时,该列实际存储的是563427。
decimal和numeric可存储从 -1038 +1 到 1038 –1 的固定精度和小数位的数字数据,它们的存储长度随精度变化而变化,最少为5字节,最多为17字节。
l 精度为1~9时,存储字节长度为5;
l 精度为10~19时,存储字节长度为9;
l 精度为20~28时,存储字节长度为13;
l 精度为29~38时,存储字节长度为17。
例如若有声明numeric(8,3),则存储该类型数据需5字节,而若有声明numeric(22,5),则存储该类型数据需13字节。
注意:声明精确整数型数据时,其小数位数必须小于精度;在给精确整数型数据赋值时,必须使所赋数据的整数部分位数不大于列的整数部分的长度。
(3) 浮点型
浮点型也称近似数值型。顾名思义,这种类型不能提供精确表示数据的精度,使用这种类型来存储某些数值时,有可能会损失一些精度,所以它可用于处理取值范围非常大且对精确度要求不是十分高的数值量,如一些统计量。
有两种近似数值数据类型:float[(n)]和real,两者通常都使用科学计数法表示数据,即形为:尾数E阶数,如56432E20,-298E10,1287659E-9等。
l real:使用4字节存储数据,表数范围为-340E + 38 到 340E + 38,数据精度为7位有效数字。
l float:定义中的n取值范围是1~53,用于指示其精度和存储大小。当n在1~24之间时,实际上是定义了一个real型数据,存储长度为4字节,精度为7位有效数字;当n在25~53之间时,存储长度为8字节,精度为15位有效数字。当缺省n时,代表n在25~53之间。float型数据的数范围为- 179E+308 到 179E+308。
(4) 货币型
SQL Server提供了两个专门用于处理货币的数据类型:money和smallmoney,它们用十进制数表示货币值。
l money:数据的数范围为-263 (-9223372036854775808)~263-1 (9223372036854775807) ,其精度为19,小数位数为4,长度为8字节。money的数的范围与bigint相同,不同的只是money型有4位小数,实际上,money就是按照整数进行运算的,只是将小数点固定在末4位。
l smallmoney:数范围为 –231 (-2,147,483648) ~231 - 1 (2,147,483647) ,其精度为10,小数位数为4,长度为4字节。可见smallmoney与int的关系就如同money与bigint的关系。
当向表中插入money或smallmoney类型的值时,必须在数据前面加上货币表示符号($),并且数据中间不能有逗号(,);若货币值为负数,需要在符号$的后面加上负号(-)。例如:$1500032,$680,$-200009088都是正确的货币数据表示形式。
(5) 位型
SQL Server中的位(bit)型数据相当于其他语言中的逻辑型数据,它只存储0和1,长度为一个字节。但要注意,SQL Server对表中bit类型列的存储作了优化:如果一个表中有不多于 8 个的bit列,这些列将作为一个字节存储,如果表中有 9 到 16 个 bit 列,这些列将作为两个字节存储,更多列的情况依此类推。
当为bit类型数据赋0时,其值为0,而赋非0(如100)时,其值为1。
若表中某列为bit类型数据,那么该列不允许为空值(有关空值概念本节稍后即做介绍),并且不允许对其建立索引。
(6) 字符型
字符型数据用于存储字符串,字符串中可包括字母、数字和其它特殊符号(如#、@、&等等)。在输入字符串时,需将串中的符号用单引号或双引号括起来,如’abc’、”Abc<Cde”。
SQL Server字符型包括两类:固定长度 (char) 或可变长度 (varchar) 字符数据类型。
l char[(n)]
定长字符数据类型,其中n定义字符型数据的长度,n在1到8000之间,缺省为1。当表中的列定义为char(n)类型时,若实际要存储的串长度不足n时,则在串的尾部添加空格以达到长度n,所以char(n)的长度为n。例如某列的数据类型为char(20),而输入的字符串为”ahjm1922”,则存储的是字符ahjm1922和12个空格。若输入的字符个数超出了n,则超出的部分被截断。
l varchar[(n)]
变长字符数据类型,其中n的规定与定长字符型char中n完全相同,但这里n表示的是字符串可达到的最大长度。varchar(n)的长度为输入的字符串的实际字符个数,而不一定是n。例如,表中某列的数据类型为varchar(100),而输入的字符串为”ahjm1922”,则存储的就是字符ahjm1922,其长度为8字节。
当列中的字符数据值长度接近一致时,例如姓名,此时可使用 char;而当列中的数据值长度显著不同时,使用varchar较为恰当,可以节省存储空间。
(7) Unicode字符型
Unicode是“统一字符编码标准”,用于支持国际上非英语语种的字符数据的存储和处理。SQL Server的Unicode字符型可以存储Unicode标准字符集定义的各种字符。
Unicode字符型包括nchar[(n)]和nvarchar[(n)]两类。nchar是固定长度 Unicode 数据的数据类型,nvarchar 是可变长度 Unicode 数据的数据类型,二者均使用 UNICODE UCS-2 字符集。
l nchar[(n)]:nchar[(n)]为包含n个字符的固定长度 Unicode 字符型数据,n 的值在 1 与 4,000 之间,缺省为1。长度为2n字节。若输入的字符串长度不足n,将以空白字符补足。
l nvarchar[(n)]:nvarchar[(n)]为最多包含n个字符的可变长度 Unicode 字符型数据,n 的值在 1 与 4,000之间,缺省为1。长度是所输入字符个数的两倍。
实际上,nchar、nvarchar与char、varchar的使用非常相似,只是字符集不同(前者使用Unicode字符集,后者使用ASCII字符集)。
(8) 文本型
当需要存储大量的字符数据,如较长的备注、日志信息等等,字符型数据的最长8000个字符的限制可能使它们不能满足这种应用需求,此时可使用文本型数据。
文本型包括text和ntext两类,分别对应ASCII字符和Unicode字符。text类型可以表示最大长度为 231-1 (2,147,483,647) 个字符,其数据的存储长度为实际字符数个字节。ntext可表示最大长度为 230 - 1 (1,073,741,823) 个Unicode字符,其数据的存储长度是实际字符个数的两倍(以字节为单位)。
(9) 二进制型
二进制数据类型表示的是位数据流,包括binary(固定长度)和varbinary(可变长度)两种。
l binary [(n) ]:固定长度的n个字节二进制数据。n取值范围为 1 到 8,000,缺省为1。binary(n)数据的存储长度为 n+4 字节。若输入的数据长度小于n,则不足部分用0填充;若输入的数据长度大于n,则多余部分被截断。
输入二进制值时,在数据前面要加上0x,可以用的数字符号为0—9、A—F(字母大小写均可)。因此,二进制数据有时也被称为十六进制数据。例如0xFF、0x12A0分别表示值FF和12A0。因为每字节的数最大为FF,故在“0x”格式的数据每两位占1个字节。
l varbinary [(n) ]:n个字节变长二进制数据。n取值范围为 1 到 8,000,缺省为1。varbinary(n)数据的存储长度为实际输入数据长度+4个字节。
(10) 日期时间类型
日期时间类型数据用于存储日期和时间信息,包括datetime和smalldatetime两类。
l datetime:datetime类型可表示的日期范围从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据,精确度为百分之三秒(333 毫秒或 000333 秒),例如1到3毫秒的值都表示为0毫秒,4到6毫秒的值都表示为4毫秒。
datetime类型数据长度为8字节,日期和时间分别使用4个字节存储。前4 字节用于存储datetime类型数据中距1900 年 1 月 1 日的天数,为正数表示日期在1900年1月1日之后,为负数则表示日期在1900年1月1日之前。后4个字节用于存储datetime类型数据中距12:00(24小时制)的毫秒数。
用户以字符串形式输入datetime类型数据,系统也以字符串形式输出datetime类型数据,将用户输入到系统以及系统输出的datetime类型数据的字符串形式称为datetime类型数据的“外部形式”,而将datetime在系统内的存储形式称为“内部形式”,SQL Server负责datetime类型数据的两种表现形式之间的转换,包括合法性检查。
用户给出datetime类型数据值时,日期部分和时间部分分别给出。
日期部分的表示形式常用的格式如下:
年 月 日 2001 Jan 20、2001 Janary 20
年 日 月 2001 20 Jan
月 日[,]年 Jan 20 2001、Jan 20,2001、Jan 20,01
月 年 日 Jan 2001 20
日 月[,]年 20 Jan 2001、20 Jan,2001
日 年 月 20 2001 Jan
年(4位数) 2001表示2001年1月1日
年月日 20010120、010120
月/日/年 01/20/01、1/20/01、01/20/2001、1/20/2001
月-日-年 01-20-01、1-20-01、01-20-2001、1-20-2001
月日年 012001、12001、01202001、1202001
说明:年可用4位或2位表示,月和日可用1位或2位表示。
时间部分常用的表示格式如下:
时:分 10:20、08:05
时:分:秒 20:15:18、20:15:182
时:分:秒:毫秒 20:15:18:200
时:分AM|PM 10:10AM、10:10PM
l smalldatetime:smalldatetime类型数据可表示从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间,数据精确到分钟,即29998 秒或更低的值向下舍入为最接近的分钟,29999 秒或更高的值向上舍入为最接近的分钟。Smalldatetime类型数据的存储长度为4字节,前2个字节用来存储smalldatetime类型数据中日期部分距1900年1月1日之后的天数;后2个字节用来存储smalldatetime类型数据中时间部分距中午12点的分钟数。
用户输入smalldatetime类型数据的格式与datetime类型数据完全相同,只是它们的内部存储可能不相同。
(11) 时间戳型
标识符是timestamp。若创建表时定义一个列的数据类型为时间戳类型,那么每当对该表加入新行或修改已有行时,都由系统自动将一个计数器值加到该列,即将原来的时间戳值加上一个增量。记录timestamp列的值实际上反映了系统对该记录修改的相对(相对于其他记录)顺序。一个表只能有一个timestamp 列。Timestamp类型数据的值实际上是二进制格式数据,其长度为8字节。
(12) 图象数据类型
标识符是image,它用于存储、照片等。实际存储的是可变长度二进制数据,介于 0 与 231-1 (2,147,483,647) 字节之间。
(13) 其它数据类型
除了上面所介绍的常用数据类型外,SQL Server 2000还提供了其它几种数据类型:cursor、sql_variant、table和uniqueidentifier。
Cursor:是游标数据类型,用于创建游标变量或定义存储过程的输出参数。
Sql_variant:是一种存储 SQL Server 支持的各种数据类型(除text、ntext、image、timestamp 和 sql_variant 外)值的数据类型。Sql_variant的最大长度可达 8016 字节。
Table:是用于存储结果集的数据类型,结果集可以供后续处理。
Uniqueidentifier:是唯一标识符类型。系统将为这种类型的数据产生唯一标识值,它是一个16字节长的二进制数据。
本篇文章继续围绕SQL的语法重点为大家介绍 连接 和 高级连接 的使用,以及 使用连接的注意事项 。
SQL最强大的功能之一就是能在数据查询的执行中 连接(join)表 。连接是利用SQL的SELECT语句能执行的最重要的 *** 作,很好地理解连接及其语法是学习SQL的极为重要的一点。在能够有效地使用连接前,我们必须了解 关系表 以及 关系数据库 设计的一些基础知识。下面的介绍并不能涵盖这一主题的所有内容,但作为入门已经够了。
连接
理解关系表,最好是来看个例子。
有一个包含产品目录的数据库表,其中每类物品占一行。
对于每一种物品,要存储的信息包括产品描述、价格,以及生产该产品的供应商。
现在有同一供应商生产的多种物品,那么在何处存储供应商名、地址、联系方法等供应商信息呢?将这些数据与产品信息分开存储的理由是:
① 同一供应商生产的每个产品,其供应商信息都是相同的,对每个产品重复此信息既浪费时间又浪费存储空间;
② 如果供应商信息发生变化,例如供应商迁址或电话号码变动,只需修改一次即可;
③ 如果有重复数据(即每种产品都存储供应商信息),则很难保证每次输入该数据的方式都相同。不一致的数据在报表中就很难利用。
关键是, 相同的数据出现多次不是一件好事 ,这是关系数据库设计的基础。
关系表的设计就是要 把信息分解成多个表 , 一类数据一个表 。各表通过某些共同的值互相关联(所以才叫关系数据库)。在这个例子中可建立两个表:一个存储供应商信息,另一个存储产品信息。Vendors表包含所有供应商信息,每个供应商占一行,具有唯一的标识。此标识称为 主键 (primary key),可以是供应商ID或任何其他唯一值。Products表只存储产品信息,除了存储供应商ID(Vendors表的主键)外,它不存储其他有关供应商的信息。Vendors表的主键将Vendors表与Products表关联,利用供应商ID能从Vendors表中找出相应供应商的详细信息。
这样做的 好处 是:
① 供应商信息不重复,不会浪费时间和空间;
② 如果供应商信息变动,可以只更新Vendors表中的单个记录,相关表中的数据不用改动;
③ 由于数据不重复,使得处理数据和生成报表更简单。
总之,关系数据可以有效地存储,方便地处理。因此,关系数据库的可伸缩性远比非关系数据库要好。
为什么使用连接
连接将数据分解为多个表实现 更有效 地存储、 更方便 地处理,且 可伸缩性更好 。
可伸缩性:能够适应不断增加的工作量而不失败。
连接作为一种机制,能在一条SELECT语句中用来关联表。使用特定的语法,可连接多个表返回一组输出。
创建连接
分析 :上述SELECT语句中与之前的语句相同,都是指定检索的列, 区别 在于该语句指定的两列(prod_name,prod_price)在一个表中,而第一列(vend_name)在另一个表中。
FROM子句也有所区别。该FROM子句列出了两个表:Vendors,Products。这两个表由SELECT语句的WHERE子句连接。WHERE子句指示DBMS将Vendors表中的vend_id与Products表中的vend_id匹配起来。
这里使用了 完全限定列名 将Vendorsvend_id和Productsvend_id两列匹配。最终输出了两个不同表中的数据。
高级连接部分将介绍 如何使用表别名,另外的一些连接 ,以及 如何对被连接的表使用聚集函数 。
使用表别名
之前的文章已经给大家介绍了如何使用别名引用被检索的表列。
SQL还可以 给表名起别名 ,目的是:
① 缩短SQL语句。
② 允许在一条SELECT语句中多次使用相同的表。
分析 :上述语句中的FROM子句的三个表都有别名。如此 省略了许多字符 。表别名还可以用于SELECT的列表、ORDER BY子句以及其他语句部分。
需要注意的是: 表别名只在查询执行中使用 。与列别名不同,表别名不返回到客户端。
使用不同类型的连接
接下来将给大家介绍四种其他类型的连接: 自连接 、 自然连接 、 内连接 和 外连接 。
①自连接
分析: 这是使用了 子查询 的方案。对内部的SELECT语句做了一个简单的检索,返回Jim Jones工作公司的cust_name。该数据用于外部查询的WHERE子句中,以检索出为该公司工作的所有雇员。
下面看看使用了 连接 的方案。
分析:上述语句需要的两个表实际上是相同的表,所以Customers表在FROM子句中出现了两次。但这对于Customers的引用具有歧义,因为没有指示DBMS引用的是哪个Customers表。
于是需要使用表别名解决该问题。Customers表 第一次出现为别名c1 , 第二次为c2 ,然后再将这些别名用作表名。如SELECT语句使用c1前缀明确给出所需列的全名。如果不这么做,DBMS将返回错误,因为名为cust_id、cust_name、cust_contact的列各有两个。DBMS不知需要哪一列,即使它们都是同一列。
WHERE首先连接两个表,再按第二个表中的cust_contact过滤数据,返回所需的数据。
②自然连接
内连接 返回所有的数据,其中 相同的列可多次出现 。而 自然连接排除多次出现 ,使每一列只返回一次。
一般通过对一个表使用通配符(SELECT ),而对其他的列使用明确的子集来实现自然连接。
分析: 上述语句中,通配符只对第一个表使用,而所有其他列都明确列出来,所以没有出现重复的列被检索出来。
③内连接
目前为止使用的连接称为等值连接,是基于两个表之间的相等测试。该连接也称为内连接。
对该种连接还可以使用不同的语法,明确指定连接的类型。
分析 :该语句中的SELECT与之前的区别在于FROM 子句。此处两个表之间的关系是以 INNER JOIN 指定的部分FROM子句,因此需要使用特定的 ON子句 而不是WHERE子句。但传递给ON的实际条件与WHERE相同。
④外连接
许多连接将一个表中的行与另一个表中的行相关联,但有时候 需要包含没有关联的行 。例如,可能需要使用连接完成以下工作:
对每个顾客下的订单进行计数,包括那些至今尚未下订单的顾客;
列出所有产品以及订购数量,包括没有人订购的产品;
计算平均销售规模,包括那些至今尚未下订单的顾客。
在上述例子中,连接包含了那些在相关表中没有关联行的行。这种连接称为外连接,外连接分为 左外连接 和 右外连接 。
左外连接:取左边的表的全部,而右边的表按照条件显示,不符合条件的显示NULL。
右外连接:取右边的表的全部,而左边的表按照条件显示,不符合条件的显示NULL。
下面先给出一个简单的 内连接 ,再给出 左外连接 ,大家对比着理解。
分析 :两个语句都使用了 JOIN 关键字来指定连接类型,与内连接不同的是,左外连接包括没有关联行的行。因此在使用JOIN语法时,还需使用RIGHT或LEFT关键字来指定包括其所有行的表(RIGHT指出的是OUTER JOIN右边的表,而LEFT指出的是OUTER JOIN左边的表)。
上述左外连接语句使用了LEFT OUTER JOIN 从FROM子句左边的表(Customers)中选择所有行。
若要从右边的表选择所有行,即使用 右外连接 ,则语句如下:
注意 :两种基本的外连接形式,左外连接和右外连接。两者的唯一差别是所关联的表的顺序。
此外,还有一种外连接,即 全外连接 。该连接检索两个表中的所有行并关联可关联的行。与左外连接或右外连接包含一个表的不关联的行不同,全外连接包含两个表的不关联的行。
自连接、自然连接、内连接和外连接的区别
①自连接: 通常用于 两张结构和数据内容完全一样的表 ,在做数据处理时,对它们分别 重命名 来加以区分,然后再进行关联。
②自然连接 :特点是要求两个关系表中进行连接的必须是 相同属性列 (名字相同),无需添加连接条件,且 在结果中消除了重复的属性列 。
③内连接 :与自然连接相似,区别在于内连接 不要求两属性列同名 ,可以用 using或on 来指定某两列字段相同的连接条件。
④外连接 :可以解决自然连接时某些属性不同导致这些元组被舍弃的问题,起到了 保留要舍弃的结果 的作用。
使用带聚集函数的连接
之前给大家介绍过使用 聚集函数 来汇总数据,殊不知这些函数也可以与连接一起使用。
分析: 上述语句使用了 COUNT函数 。该语句使用INNER JOIN将Customers和Orders表相互关联。GROUP BY子句按顾客分组,因此,函数调用COUNT(Ordersorder_num)对每个顾客的订单计数,将其作为num_ord返回。
分析: 上述语句使用 左外连接 包含所有顾客,包括了那些没有任何订单的顾客。
WHERE子句的重要性
需记住的是,在一条SELECT语句中连接几个表时,相应的关系是在运行中构造的,因为在数据库表中的定义没有指示DBMS如何对表进行连接的内容。
要连接多个表,需要将它们并列于from之后, 关键 是要设置WHERE子句,确保它们之间的 关联关系 必须给出,否则,查询结果会成为笛卡尔积。
笛卡尔积:由没有连接条件的表关系返回的结果为笛卡儿积。
分析 :上述语句输出的结果便是 笛卡尔积 。返回的数据用每个供应商匹配了每个产品,包括了供应商不正确的产品(即使该供应商没有产品)。
连接及其使用的要点
① 注意所使用的连接类型。一般我们使用内连接,但使用外连接也有效。
② 关于确切的连接语法,应该查看具体的文档,看相应的DBMS支持何种语法(大多数DBMS使用这两课中描述的某种语法)。
③ 保证使用正确的连接条件(不管采用哪种语法),否则会返回不正确的数据。
④ 应该总是提供连接条件,否则会得出笛卡儿积。
⑤ 在一个连接中可以包含多个表,甚至可以对每个连接采用不同的连接类型。虽然这样做是合法的,一般也很有用,但应该在测试它们前分别测试每个连接。这会使故障排除更为简单。
以上就是本次介绍的连接和高级连接啦~
下一期将给大家介绍 组合查询 、 插入数据 及 更新和删除数据。
我们下期见!
SQL是Structured Quevy Language(结构化查询语言)的缩写。SQL是专为数据库而建立的 *** 作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库 *** 作的基础,并且现在几乎所有的数据库均支持SQL。 <br>
##1 二、SQL数据库数据体系结构 <br>
SQL数据库的数据体系结构基本上是三级结构,但使用术语与传统关系模型术语不同。在SQL中,关系模式(模式)称为“基本表”(base table);存储模式(内模式)称为“存储文件”(stored file);子模式(外模式)称为“视图”(view);元组称为“行”(row);属性称为“列”(column)。名称对称如^00100009a^: <br>
##1 三、SQL语言的组成 <br>
在正式学习SQL语言之前,首先让我们对SQL语言有一个基本认识,介绍一下SQL语言的组成: <br>
1一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。 <br>
2一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项。 <br>
3一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。 <br>
4一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。 <br>
5用户可以用SQL语句对视图和基本表进行查询等 *** 作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)。 <br>
6SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada语言等。SQL用户也能作为独立的用户接口,供交互环境下的终端用户使用。 <br>
##1 四、对数据库进行 *** 作 <br>
SQL包括了所有对数据库的 *** 作,主要是由4个部分组成: <br>
1数据定义:这一部分又称为“SQL DDL”,定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引4部分。 <br>
2数据 *** 纵:这一部分又称为“SQL DML”,其中包括数据查询和数据更新两大类 *** 作,其中数据更新又包括插入、删除和更新三种 *** 作。 <br>
3数据控制:对用户访问数据的控制有基本表和视图的授权、完整性规则的描述,事务控制语句等。 <br>
4嵌入式SQL语言的使用规定:规定SQL语句在宿主语言的程序中使用的规则。 <br>
下面我们将分别介绍: <br>
##2 (一)数据定义 <br>
SQL数据定义功能包括定义数据库、基本表、索引和视图。 <br>
首先,让我们了解一下SQL所提供的基本数据类型:(如^00100009b^) <br>
1数据库的建立与删除 <br>
(1)建立数据库:数据库是一个包括了多个基本表的数据集,其语句格式为: <br>
CREATE DATABASE <数据库名> 〔其它参数〕 <br>
其中,<数据库名>在系统中必须是唯一的,不能重复,不然将导致数据存取失误。〔其它参数〕因具体数据库实现系统不同而异。 <br>
例:要建立项目管理数据库(xmmanage),其语句应为: <br>
CREATE DATABASE xmmanage <br>
(2) 数据库的删除:将数据库及其全部内容从系统中删除。 <br>
其语句格式为:DROP DATABASE <数据库名> <br>
例:删除项目管理数据库(xmmanage),其语句应为: <br>
DROP DATABASE xmmanage <br>
2基本表的定义及变更 <br>
本身独立存在的表称为基本表,在SQL语言中一个关系唯一对应一个基本表。基本表的定义指建立基本关系模式,而变更则是指对数据库中已存在的基本表进行删除与修改。
SQL是Structured
Quevy
Language(结构化查询语言)的缩写。SQL是专为数据库而建立的 *** 作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库 *** 作的基础,并且现在几乎所有的数据库均支持SQL。
<br>
##1
二、SQL数据库数据体系结构
<br>
SQL数据库的数据体系结构基本上是三级结构,但使用术语与传统关系模型术语不同。在SQL中,关系模式(模式)称为“基本表”(base
table);存储模式(内模式)称为“存储文件”(stored
file);子模式(外模式)称为“视图”(view);元组称为“行”(row);属性称为“列”(column)。名称对称如^00100009a^:
<br>
##1
三、SQL语言的组成
<br>
在正式学习SQL语言之前,首先让我们对SQL语言有一个基本认识,介绍一下SQL语言的组成:
<br>
1一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。
<br>
2一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项。
<br>
3一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。
<br>
4一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。
<br>
5用户可以用SQL语句对视图和基本表进行查询等 *** 作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)。
<br>
6SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada语言等。SQL用户也能作为独立的用户接口,供交互环境下的终端用户使用。
<br>
##1
四、对数据库进行 *** 作
<br>
SQL包括了所有对数据库的 *** 作,主要是由4个部分组成:
<br>
1数据定义:这一部分又称为“SQL
DDL”,定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引4部分。
<br>
2数据 *** 纵:这一部分又称为“SQL
DML”,其中包括数据查询和数据更新两大类 *** 作,其中数据更新又包括插入、删除和更新三种 *** 作。
<br>
3数据控制:对用户访问数据的控制有基本表和视图的授权、完整性规则的描述,事务控制语句等。
<br>
4嵌入式SQL语言的使用规定:规定SQL语句在宿主语言的程序中使用的规则。
<br>
下面我们将分别介绍:
<br>
##2
(一)数据定义
<br>
SQL数据定义功能包括定义数据库、基本表、索引和视图。
<br>
首先,让我们了解一下SQL所提供的基本数据类型:(如^00100009b^)
<br>
1数据库的建立与删除
<br>
(1)建立数据库:数据库是一个包括了多个基本表的数据集,其语句格式为:
<br>
CREATE
DATABASE
<数据库名>
〔其它参数〕
<br>
其中,<数据库名>在系统中必须是唯一的,不能重复,不然将导致数据存取失误。〔其它参数〕因具体数据库实现系统不同而异。
<br>
例:要建立项目管理数据库(xmmanage),其语句应为:
<br>
CREATE
DATABASE
xmmanage
<br>
(2)
数据库的删除:将数据库及其全部内容从系统中删除。
<br>
其语句格式为:DROP
DATABASE
<数据库名>
<br>
例:删除项目管理数据库(xmmanage),其语句应为:
<br>
DROP
DATABASE
xmmanage
<br>
2基本表的定义及变更
<br>
本身独立存在的表称为基本表,在SQL语言中一个关系唯一对应一个基本表。基本表的定义指建立基本关系模式,而变更则是指对数据库中已存在的基本表进行删除与修改。
<br>
……<br>
以上就是关于查看sqlserver数据库有哪些表全部的内容,包括:查看sqlserver数据库有哪些表、到底什么是数据库,还有各种数据库的区别是什么解释的简单点!、通过SQL语句使用什么命令创建数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)