第二讲结构化查询语言一Word格式.docx
《第二讲结构化查询语言一Word格式.docx》由会员分享,可在线阅读,更多相关《第二讲结构化查询语言一Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
![第二讲结构化查询语言一Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/27/c7e6c9c7-dc18-46da-a327-7e838a3321e3/c7e6c9c7-dc18-46da-a327-7e838a3321e31.gif)
通常在这个过程中我们需要使用以下的数据库指令:
数据库生命阶段
使用的SQL指令
数据库创建
CREATE
数据库使用
USE
数据库操纵
INSERT、DELETE、UPDATE、SELECT
数据库消亡
DROP
数据库的生命周期一般由程序员自己掌握,但是在某一些大型应用中也会将应用程序与数据库分离为两个独立的服务器,由专门的数据库管理员负责管理数据库的生命周期。
【SQL语句的注释】
SQL语句中的注释通常有两种:
单行注释和多行注释。
单行注释:
单行注释通常使用两个横线表示,即“--注释内容”只能对SQL语句中的某一行进行注释。
多行注释:
多行注释采用和C程序一样的注释即“/*注释内容*/”,通常可以对SQL中的一段进行注释。
【创建数据库】
数据库的创建通常使用数据定义语句CREATE进行。
基本格式如下:
CREATEDATABASEDATABASE_NAME
其中CREATE是数据定义语句,意思为创建,后跟DATABASE关键字进行说明,此时创建的对象为数据库。
DATABASE_NAME是指由用户创建的数据库名称。
通常命名规则与C++等高级语言中的命名规则相同。
[例]创建一个学生数据库
CREATEDATABASEStudent
在SQLServer中通常我们可以将需要执行的某一条SQL语句选中并且单击“执行”按钮进行执行。
如果希望一次可以执行多条语句,则需要在除最后一条的每一条SQL语句后加入关键字GO。
下面我们在SQLServer中运行,查看结果:
【使用数据库对象】
此时我们可以看到我们已经成功的创建了数据库Student。
接下来就是需要新建某一个数据表了,但是由于SQLServer每次启动时都使用的是上一次操作保存的数据库,所以对于数据库Student来说,要想进行操作,就必须要先被使用。
通常我们采用USE关键字完成这件事情,格式如下:
USEDATABASE_NAME
[例]使用Student数据库:
USEStudent
【创建数据表】
在正确使用数据库之后,我们就可以在数据库中建立表格了。
当然表格的名字可以和数据库名称相同,但是我奉劝大家不要这么做,毕竟这样调试代码的时候不容易看出错误。
我们所定义的名称应该具有唯一性。
那么如何在数据库中建立一张表格呢?
同样我们需要使用CREATE关键字,但是不同的是我们使用TABLE描述表名,同时使用一对小括号描述数据库的每个属性(即每个列)。
创建数据表的格式如下:
CREATETABLETABLE_NAME
(
COLUMN1COLUMN_TYPE,
COLUMN2COLUMN_TYPE,
COLUMN3COLUMN_TYPE,
……
COLUMNnCOLUMN_TYPE
)
其中COLUMN指示了属性的名称,而COLUMN_TYPE指示了属性的类型。
在SQLServer中,属性的类型可支持29种,由于大家的记忆力也是很有限的,故此在这里仅介绍几种常用的类型。
关键字
类型说明
备注
INT
十进制整数型
LONG
十进制长整数型
DOUBLE
十进制双精度浮点型
SQLServer2008以及向后版本取消了FLOAT类型
BIT
布尔型
对应于C++中的bool类型
VARCHAR
可变的字符串类型
VACHAR(n),其中n表示字符串的长度
DATETIME
时间日期型
用于保存时间和日期,对应于CTime类型
接下来我们将以新建一张学生信息表为例,说明CREATETABLE指令的用法。
实例如下:
CREATETABLEStudent_INF
IDvarchar(10),--学生学号
Namevarchar(20),--学生姓名
Ageint,--学生年龄
_Addressvarchar(50)—学生住址,由于Address是关键字故此加入_
在执行完上述指令后我们将看到数据库系统中多出了如下的表格:
接下来我们可以选中这张表格,右击鼠标,选择“编辑前200行”命令进入数据表。
此时我们将会看到如下的空表:
当然,此时你也可以通过该窗口向数据表中添加元组,你只需要将每一组元组设置好,然后按下回车就可以保存了。
如下图:
当然此时我们也可以看到在这张手动添加的数据表中出现了一个很严重的逻辑错误。
我们的学号是唯一的,因此通过我们的学号可以唯一的确定我们的姓名,但是现在学号出现了不唯一的情况而且数据库系统并没有出现报错的情况。
怎么办呢?
此时我们需要回顾到我们以前学过的一个知识点了。
通常我们将唯一能够确定某一个元组的属性称之为主码,也称之为主键,在SQL语句中常使用PRIMARYKEY作为关键字进行描述。
在上述表格中,我们可以发现学号即ID是该表格的主码,因此我们需要将它设置为主码。
【设置主键】
设置主键通常使用两种方式,第一种是在新建表格时直接指定主键,当然,每个数据表中的主键只能有一个。
例如我们在新建上述学生信息表时可以将ID设置为主键,代码如下:
IDvarchar(10)primarykey,--设置学号为主键
Namevarchar(20),
Ageint,
_Addressvarchar(50)
当然如果你的数据表已经建立好,并且其中已经含有了一些数据,此时你的数据表就不能再重新删除新建了,倘若这个时候你想修改主码就必须要借助于数据定义语句中的ALTER命令对数据表中的主键进行重新定义。
如上述的学生信息表,你可以使用以下指令修改:
ALTERTABLEStudent_INFALTERCOLUMN[ID]varchar(10)NOTNULL
Go
ALTERTABLEStudent_INFADDCONSTRAINTNEW_PKPRIMARYKEY(ID)
上述指令中的第一句是修改学生信息表中的属性ID为非空的意思,由于设置主键需要在非空列上进行,因此我们首先需要将原先允许为空的主键列设置为不允许为空。
最后一句是为学生信息表添加一个主键,并且设置主键列为ID。
其中CONSTRAINT关键字用于指示约束的别名。
NEW_PK是这个约束的别名。
在设置完主键之后我们再一次进入表格,并且添加两个相同的学号查看一下结果:
此时我们发现数据库终于报错了,报错的内容如下:
在这里我们可以发现指定主键的好处是可以保证数据的唯一性,当出现相同数据时,数据库系统会为我们及时报错,进而防止了在数据库中插入重复数据的操作。
毕竟两个人不能够有同一个学号啊!
【数据表的删除】
那么如何在DBMS中删除一个数据表呢?
此时我们可以使用数据定义语句中的DROP指令来实现。
通常删除表格的格式如下:
DROPTABLETABLE_NAME
其中TABLE关键字说明删除的是一张表格,而TABLE_NAME是一张具体的并且真实存在的表格的名称。
对于不存在的表格,或者因权限不足而无法删除的表格,在执行DROP指令时程序将会报错!
[例]删除学生信息表
DROPTABLEStudent_INF
【数据库的删除】
DBMS中删除数据库同样使用DROP指令进行,格式如下:
DROPDATABASEDATABASE_NAME
当然在删除数据库之前我们需要对正在使用的数据库进行释放,而DBMS无论在某一个时刻都必须要是与一个数据库进行捆绑,此时你可以使用USE指令选择其他的数据库进行使用,之后再对你的数据库进行删除操作。
实例代码如下:
USEReportServer--将DBMS与ReportServer数据库进行绑定
GO
DROPDATABASEStudent--删除Student数据库
【数据的新增】
那么如何新增一条记录呢?
通常我们需要借助数据操纵语言中的INSERT语句进行。
插入操作可以插入完整的一行,也可以对该元组中某几个固定的列进行插入操作,但是如果你需要操作的列被定义为主键或者不允许为空(notnull),那么此时该列就必须要有数据插入,否则你将插入失败。
完整的数据插入:
完整插入一行元组的格式如下:
INSERTINTOTABLE_NAMEVALUES(value1,value2,……,valuen)
其中INSERT关键字指示操作为插入操作,INTO后加入需要进行插入操作的表名,VALUES关键字用于指示需要插入的值集合,两个小括号中指定了具体插入的值。
这里值得说明的是小括号中的值的插入顺序需要和表中的属性顺序以及属性类型一致,即第一列为学号,则value1也必须为学号;
第二列为姓名,则value2也必须为姓名……否则将会导致数据插入的逻辑错误。
[例]某关系为:
学生信息表(学号,姓名,年龄,地址),请使用SQL语句新建并且插入一条完整的记录。
IDvarchar(10)primarykey,--设定主码
INSERTINTOStudent_INFVALUES('
211501001'
'
张三'
19,'
江苏省徐州市'
执行完成后我们可以查看表格中的内容如下:
部分列的数据插入:
有时候我们会遇到一些信息统计不全的情况,此时我们需要插入一条不完整的元组,此时我们就需要对某一些特定的列进行操作。
格式如下:
INSERTINTOTABLE_NAME(COLUMN1,COLUMN2,……,COLUMNn)
VALUES(value1,value2,……valuen)
[例]在上述学生信息表中插入一条新纪录,已知该生的学号为“211501002”,姓名为“李四”,其他未知。
INSERTINTOStudent_INF(ID,Name)VALUES('
211501002'
李四'
在执行完成后我们可以打开数据表查看插入结果:
SQLServer支持一条语句拆分为多行书写,但每一行只能写一条SQL语句。
【数据的删除】
在SQL中,通常使用DELETE指令完成对数据库中的一个元组的删除。
通常我们为了精确的删除相关的数据我们需要在DELETE语句后使用WHERE关键字指定相关的条件。
完全删除:
完全删除即清空整个数据表中的记录,其格式如下:
DELETEFROMTABLE_NAME
其含义为:
从名为TABLE_NAME的表格中删除,由于语句后面没有使用WHERE关键字指定删除的条件,故此将会清空表格中的所有数据。
部分删除:
部分删除即仅仅删除数据表中的一条或者多条记录,其格式如下:
DELETEFROMTABLE_NAMEWHERECONDITIONS
此处需要说明的是WHERE关键字又称之为WHERE子句,用于指定筛选记录的条件,其后的条件可以是单纯的关系表达式,也可以是由任意关系表达式通过逻辑运算符连接起来的逻辑表达式。
关系表达式:
SQL语句和其他程序设计语言一样,支持关系表达式,其关系运算符与VisualBasic中的关系运算符如出一辙。
常用的关系运算符如下:
关系运算符
运算符含义
备注说明
>
大于
<
小于
=
大于等于
小于等于
等于
SQL中的“=”既可作为赋值号,也可作为逻辑等于号
>
不等于
相当于C类语言中的!
[例]删除学生信息表中年龄大于18岁的元组
DELETEFROMStudent_INFWHEREAge>
18
[例]删除学生信息表中学号为“211501002”的元组
DELETEFROMStudent_INFWHEREID=‘211501002’
[例]删除学生信息表中地址不为“江苏省徐州市”的元组
DELETEFROMStudent_INFWHERE_Address<
‘江苏省徐州市’
逻辑表达式:
在SQL中支持的逻辑运算符共有三个,具体如下:
逻辑运算符
AND
逻辑与
两边条件同时成立则表达式成立
OR
逻辑或
左右两边条件均成立或仅有一边成立则表达式成立
NOT
逻辑非
条件成立则表达式不成立
关于这三个运算符的详细含义我在这里就不再多说了,如果大家有疑惑的,可以参见C++教材上对于逻辑运算符的解释。
[例]删除学生信息表中学号为211501013且地址不为“江苏省南通市”的元组
DELETEFROMStudent_INF
WHEREID='
211501013'
AND_Address<
'
江苏省南通市'
[例]删除学生信息表中年龄大于25或者姓名为“李四”的元组
25ORName='
至此我们已经了解到了程序员如何通过SQL语句对数据库以及数据表进行新建、删除、插入和修改等操作,由于查询方面涉及到的方式较多,因此我们将单独在下一讲为大家讲述如何使用SQL语句中的SELECT指令进行数据查询的操作。
希望大家拭目以待哦!