SQL数据操作基础(初级) 4

用SQL创建新表

注意:

如果你还没有建立自己的数据库,现在就跳回到第三章创建这个库。你绝不能向

master,tempdb或任何其他任何系统数据库中添加数据。

从SQL Sever程序组(在任务栏中)中启动ISQL/w程序。出现查询窗口后,从窗口顶部的

下拉列表中选择你在第三章所创建的数据库。下一步,在查询窗口中键入下面的SQL语句

,单击执行查询按钮,执行这个语句:

CREATE TABLE guestbook (visitor VARCHAR(40),comments TEXT,entrydate DATETIME)

如果一切正常,你会在结果窗口中看到如下的文字(如果出现异常,请参阅第三章):

This command dit not return data ,and it did not return any rows

祝贺你,你已经建立了你的第一个表!

你所创建的表名为guestbook,你可以使用这个表来存储来字你站点访问者的信息。你是
                                          

用CREEATE TABLE语句创建的这个表,这个语句有两部分:第一部份指定表的名子;第二

部份是括在括号中的各字段的名称和属性,相互之间用逗号隔开。

表guestbook有三个字段:visitor,comments 和entrydate。visitor字段存储访问者的

名字,comments字段存储访问者对你站点的意见,entrydate字段存储访问者访问你站点

的日期和时间。

注意每个字段名后面都跟有一个专门的表达式。例如,字段名comments后面跟有表达式

TEXT。这个表达式指定了字段的数据类型。数据类型决定了一个字段可以存储什么样的

数据。因为字段comments包含文本信息,其数据类型定义为文本型。

字段有许多不同的数据类型。下一小节讲述SQL所支持的一些重要的数据类型。

字段类型

不同的字段类型用来存放不同类型的数据。创建和使用表时,更你应该理解五种常用的

字段类型:字符型,文本型,数值型,逻辑性和日期型。

字符型数据

字符型数据非常有用。当你需要存储短的字符串信息时,你总是要用到字符型数据。例

如,你可以把从HTML form的文本框中搜集到的信息放在字符型字段中。

要建立一个字段用来存放可变长度的字符串信息,你可以使用表达式 VARCHAR。考虑你

前面创建的表guestbook:

CREATE TABLE guestbook (visitor VARCHAR(40),comments TEXT,entrydate DATETIME)

在这个例子中,字段visitor的数据类型为VARCHAR。注意跟在数据类型后面的括号中的

数字。这个数字指定了这个字段所允许存放的字符串的最大长度。在这个例子中,字段

visitor能存放的字符串最长为四十个字符。如果名字太长,字符串会被截断,只保留

四十个字符。VARCHAR类型可以存储的字符串最长为255个字符。要存储更长的字符串数

据,可以使用文本型数据(下一节中讲述)。名字,comments字段存储访问者对你站点

的意见,entrydate字段存储访问者访问你站点的日期和时间。

注意每个字段名后面都跟有一个专门的表达式。例如,字段名comments后面跟有表达式

TEXT。这个表达式指定了字段的数据类型。数据类型决定了一个字段可以存储什么样的

数据。因为字段comments包含文本信息,其数据类型定义为文本型。

字段有许多不同的数据类型。下一小节讲述SQL所支持的一些重要的数据类型。



字段类型

不同的字段类型用来存放不同类型的数据。创建和使用表时,更你应该理解五种常用的

字段类型:字符型,文本型,数值型,逻辑性和日期型。

字符型数据

字符型数据非常有用。当你需要存储短的字符串信息时,你总是要用到字符型数据。例

如,你可以把从HTML form的文本框中搜集到的信息放在字符型字段中。

要建立一个字段用来存放可变长度的字符串信息,你可以使用表达式 VARCHAR。考虑你


面创建的表guestbook:

CREATE TABLE guestbook (visitor VARCHAR(40),comments TEXT,entrydate DATETIME)

在这个例子中,字段visitor的数据类型为VARCHAR。注意跟在数据类型后面的括号中的

数字。这个数字指定了这个字段所允许存放的字符串的最大长度。在这个例子中,字段

visitor能存放的字符串最长为四十个字符。如果名字太长,字符串会被截断,只保留四
                                          

十个字符。VARCHAR类型可以存储的字符串最长为255个字符。要存储更长的字符串数据


可以使用文本型数据(下一节中讲述)。

另一种字符型数据用来存储固定长度的字符数据。下面是一个使用这种数据类型的例子


CREATE TABLE guestbook (visitor CHAR(40),comments TEXT,entrydate DATETIME)

在这个例子中,字段visitor被用来存储四十个字符的固定长度字符串。表达式CHAR指定

了这个字段应该是固定长度的字符串。VARCHAR型和CHAR型数据的这个差别是细微的,但

是非常重要。假如你向一个长度为四十个字符的VARCHAR型字段中输入数据Bill Gates。

当你以后从这个字段中取出此数据时,你取出的数据其长度为十个字符——字符串Bill

Gates的长度。现在假如你把字符串输入一个长度为四十个字符的CHAR型字段中,那么当

你取出数据时,所取出的数据长度将是四十个字符。字符串的后面会被附加多余的空格


当你建立自己的站点时,你会发现使用VARCHAR型字段要比CHAR型字段方便的多。使用

VARCHAR型字段时,你不需要为剪掉你数据中多余的空格而操心。VARCHAR型字段的另一


突出的好处是它可以比CHAR型字段占用更少的内存和硬盘空间。当你的数据库很大时,


种内存和磁盘空间的节省会变得非常重要。文本型数据

字符型数据限制了字符串的长度不能超过255个字符。而使用文本型数据,你可以存放

超过二十亿个字符的字符串。当你需要存储大串的字符时,应该使用文本型数据。

这里有一个使用文本型数据的例子:

CREATE TABLE guestbook (visitor VARCHAR(40),comments TEXT,entrydate DATETIME)

在这个例子中,字段comments被用来存放访问者对你站点的意见。注意文本型数据没有

通常,为了节省空间,应该尽可能的使用最小的整型数据。一个TINYINT型数据只占用一

个字节;一个INT型数据占用四个字节。这看起来似乎差别不大,但是在比较大的表中,

字节数的增长是很快的。另一方面,一旦你已经创建了一个字段,要修改它是很困难的


因此,为安全起见,你应该预测以下,一个字段所需要存储的数值最大有可能是多大,

然后选择适当的数据类型。为了能对字段所存放的数据有更多的控制,你可以使用NUMER
IC

型数据来同时表示一个数的整数部分和小数部分。NUMERIC型数据使你能表示非常大的数

——比INT型数据要大得多。一个NUMERIC型字段可以存储从-1038到1038范围内的数。

NUMERIC型数据还使你能表示有小数部分的数。例如,你可以在NUMERIC型字段中存储小


3.14。当定义一个NUMERIC型字段时,你需要同时指定整数部分的大小和小数部分的大小


这里有一个使用这种数据类型的例子:

CREATE TABLE numeric_data (bignumber NUMERIC(28,0),fraction NUMERIC (5,4) )

当这个语句执行时,将创建一个名为numeric_data的包含两个字段的表。字段bignumber

可以存储直到28位的整数。字段fraction可以存储有五位整数部分和四位小数部分的小
数。



一个NUMERIC型数据的整数部分最大只能有28位,小数部分的位数必须小于或等于整数部

分的位数,小数部分可以是零。你可以使用INT型或NUMERIC型数据来存储钱数。但是,

专门有另外两种数据类型用于此目的。如果你希望你的网点能挣很多钱,你可以使用MON
EY

型数据。如果你的野心不大,你可以使用SMALLMONEY型数据。MONEY型数据可以存储从

-922,337,203,685,477.5808到922,337,203,685,477.5807的钱数。如果你需要
存储

比这还大的金额,你可以使用NUMERIC型数据。SMALLMONEY型数据只能存储从-214,748.
3648

到214,748.3647 的钱数。同样,如果可以的话,你应该用SMALLMONEY型来代替MONEY型
数据,

以节省空间。下面的例子显示了如何使用这两种表示钱的数据类型:

CREATE TABLE products (product VARCHAR(40),price MONEY,Discount_price
SMALLMONEY)

这个表可以用来存储商品的折扣和普通售价。字段price 的数据类型是MONEY,字段dis

count_price的数据类型是SMALLMONEY。

存储逻辑值

如果你使用复选框(CHECKBOX)从网页中搜集信息,你可以把此信息存储在BIT型字段中


BIT型字段只能取两个值:0或1。这里有一个如何使用这种字段的例子:

CREATE TABLE opinion (visitor VARCHAR(40),good BIT)

这个表可以用来存放对你的网点进行民意调查所得的信息。访问者可以投票表示他们是

否喜欢你的网点。如果他们投YES,就在BIT型字段中存入1。反之,如果他们投NO,就在


字段中存入0(在下一章里,你将学会如何计算投票)。

当心,在你创建好一个表之后,你不能向表中添加BIT型字段。如果你打算在一个表中包


含BIT型字段,你必须在创建表时完成。

存储日期和时间

当你建立一个网点时,你也许需要记录在一段时间内的访问者数量。为了能够存储日期

和时间,你需要使用DATETIME型数据,如下例所示:

CREATE TABL visitorlog( visitor VARCHAR (40), arrivaltime DATETIME
,departuretime DATETIME)

这个表可以用来记录访问者进入和离开你网点的时间和日期。一个DATETIME型的字段可

以存储的日期范围是从1753年1月1日第一毫秒到9999年12月31日最后一毫秒。

如果你不需要覆盖这么大范围的日期和时间,你可以使用SMALLDATETIME型数据。它与D

ATETIME型数据同样使用,只不过它能表示的日期和时间范围比DATETIME型数据小,而且


不如DATETIME型数据精确。一个SMALLDATETIME型的字段能够存储从1900年1月1日到


2079年6月6日的日期,它只能精确到秒。

DATETIME型字段在你输入日期和时间之前并不包含实际的数据,认识这一点是重要的。

在下一章,你将学习怎样使用大量的SQL函数来读取和操作日期和时间(参见下面的“缺


省值”一节)。你也可以在VBScript和JScript 中使用日期和时间函数来向一个DATETI

ME型字段中输入日期和时间。

字段属性

上一节介绍了如何建立包含不同类型字段的表。在这一节中,你将学会如何使用字段的

三个属性。这些属性允许你控制空值,缺省值和标识值。

允许和禁止空值

大多数字段可以接受空值(NULL)。当一个字段接受了空值后,如果你不改变它,它将

一直保持空值。空值(NULL)和零是不同的,严格的说,空值表示没有任何值。

为了允许一个字段接受空值,你要在字段定义的后面使用表达式NULL。例如,下面的表

中两个字段都允许接受空值:

CREATE TABLE empty (empty1 CHAR (40) NULL,empty2 INT NULL(

注意:



BIT型数据不能是空值。一个这种类型的字段必须取0或者1。

有时你需要禁止一个字段使用空值。例如,假设有一个表存储着信用卡号码和信用卡有

效日期,你不会希望有人输入一个信用卡号码但不输入有效日期。为了强制两个字段都

输入数据,你可以用下面的方法建立这个表:

CREATE TABLE creditcards (creditcard_number CHAR(20) NOT
NULL,Creditcard_expire DATETIME NOT NULL)

注意字段定义的后面跟有表达式NOT NULL。通过包含表达式NOT NULL,你可以禁止任何

人只在一个字段中插入数据,而不输入另一个字段的数据。

你将会发现,在你建设自己的网点过程中,这种禁止空值的能力是非常有用的。如果你

指定一个字段不能接受空值,那么当你试图输入一个空值时,会有错误警告。这些错误

警告可以为程序调试提供有价值的线索。

缺省值

假设有一个存储地址信息的表,这个表的字段包括街道、城市、州、邮政编码和国家。

如果你预计地址的大部分是在美国,你可以把这个值作为country字段的缺省值。

为了在创建一个表时指定缺省值,你可以使用表达式DEFAULT。请看下面这个在创建表时


使用缺省值的例子:

CREATE TABLE addresses (street VARCHAR(60) NULL,city VARCHAR(40) NULL,state
VARCHAR(20) NULL zip VARCHAR(20) NULL,country VARCHAR(30) DEFAULT ‘USA’)

在这个例子中,字段country的缺省值被指定为美国。注意单引号的使用,引号指明这是


字符型数据。为了给非字符型的字段指定缺省值,不要把该值扩在引号中:

CREATE TABLE orders(price MONEY DEFAULT $38.00,quantity INT DEFAULT
50,entrydate DATETIME DEFAULT GETDATE())

在这个CREATE TABLE语句中,每个字段都指定了一个缺省值。注意DATETIME型字段entry
date

所指定的缺省值,该缺省值是函数Getdate()的返回值,该函数返回当前的日期和时间。

标识字段每个表可以有一个也只能有一个标识字段。一个标识字段是唯一标识表中每条
记录的特

殊字段。例如,数据库pubs中的表jobs包含了一个唯一标识每个工作标识字段:

job_id job_desc
…………………………………………………………….
New Hire Job not specified
Chief Executive officer
Bushness Operations Manager
Chief Financial Officier
Publisher

字段job_id为每个工作提供了唯一的一个数字。如果你决定增加一个新工作,新增记录

的job_id字段会被自动赋给一个新的唯一值。

为了建立一个标识字段,你只需在字段定义后面加上表达式IDENTITY即可。你只能把NUM
ERIC型

或INT型字段设为标识字段,这里有一个例子:

CREATE TABLE visitorID (theID NUBERIC(18) IDENTITY,name VARCHAR(40))

这个语句所创建的表包含一个名为theid的标识字段。每当一个新的访问者名字添加到这


个表中时,这个字段就被自动赋给一个新值。你可以用这个表为你的站点的每一个用户

提供唯一标识。

技巧:

建立一个标示字段时,注意使用足够大的数据类型。例如你使用TINYINT型数据,那么你


只能向表中添加255个记录。如果你预计一个表可能会变得很大,你应该使用NUMERIC型

数据。

标识字段的存在会使你想尝试许多不可能的事情。例如,你也许想利用标识字段来对记

录进行基于它们在表中位置的运算。你应该抛弃这种意图。每个记录的标识字段的值是

互不相同的,但是,这并不禁止一个标识字段的标识数字之间存在间隔。例如,你永远

不要试图利用一个表的标识字段来取出表中的前十个记录。这种操作会导致失败,比如

说6号记录和7号记录根本不存在。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用Spark SQL进行编程时,有几个基本的实践方法可以帮助您入门。以下是一些初级实践建议: 1. 创建SparkSession:SparkSession是与Spark SQL交互的入口点。您需要在应用程序中创建一个SparkSession对象,并使用它来执行SQL查询和操作数据集。例如: ``` from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("Spark SQL Example") \ .getOrCreate() ``` 2. 加载数据:使用Spark SQL,您可以从各种数据源加载数据,例如CSV文件、Parquet文件、JSON文件等。您可以使用`spark.read`方法来加载数据。例如: ``` df = spark.read.csv("path/to/file.csv", header=True, inferSchema=True) ``` 3. 执行SQL查询:Spark SQL允许您使用SQL语句对数据进行查询和操作。您可以使用`spark.sql`方法来执行SQL查询。例如: ``` df.createOrReplaceTempView("my_table") result = spark.sql("SELECT * FROM my_table WHERE age > 30") ``` 4. DataFrame操作:除了SQL查询,您还可以使用DataFrame API来操作数据。DataFrame提供了一组丰富的操作方法,如过滤、排序、聚合等。例如: ``` result = df.filter(df.age > 30).select("name", "age").orderBy("age") ``` 5. 缓存数据:如果您需要多次使用同一数据集进行计算,可以将其缓存在内存中,以提高性能。您可以使用`df.cache()`方法将DataFrame缓存起来。例如: ``` df = df.cache() ``` 6. 写入数据:使用Spark SQL,您可以将处理后的数据写入各种数据源。您可以使用DataFrame的`write`方法来写入数据。例如: ``` result.write.parquet("path/to/output.parquet") ``` 这些是初级实践的一些基本建议。当您熟悉了这些基本概念后,您可以继续学习更高级的Spark SQL编程技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值