文章总结: 该文档是一篇关于SQL语句编写的基础教程,内容涵盖创建和查询数据库对象、创建视图和存储过程、以及删除数据库对象三个主要部分。文章详细介绍了前提条件、连接数据库引擎的方法,并提供了具体的SQL代码示例与操作步骤,适合初学者掌握SQLServer的基础语法与操作。 综合评分: 65 文章分类: 数据安全,安全开发,安全培训
请点击上方蓝色字体关注我
编写SQL语句学习思路:
第%201%20节:创建和查询数据库对象
在本节中,将介绍如何创建数据库、在数据库中创建表、将数据插入到表中、更新数据,然后读取数据。
第%202%20节:创建视图和存储过程
在本节中,将创建一个视图和一个存储过程。
第%203%20节:删除数据库对象
在本节中,从表中删除视图、存储过程、数据、删除表等。
一、前提条件
创建一个数据库并创建一个%20Windows%20用户。%20这些任务需要高级别的权限;因此,应该以管理员身份登录到计算机。
系统必须安装以下软件:
- 任何版本的%20SQL%20Server
- SQL%20Server%20Management%20Studio
二、连接到数据库引擎
使用SSMS登录%20SQL%20Server数据库,Windows%20身份验证登录名使用%20Windows%20中的凭据。%20SQL%20Server%20身份验证登录名将身份验证信息存储在%20SQL%20Server%20中,独立于%20Windows%20凭据:
三、SQL语句
3.1%20第%201%20节:创建和查询数据库对象
创建数据库
与许多%20Transact-SQL%20语句一样,CREATE%20DATABASE%20语句具有一个必需参数:数据库的名称。CREATE%20DATABASE 还具有许多可选参数,如希望放置数据库文件的磁盘位置。当执行不带可选参数的CREATE%20DATABASE 时,SQL%20Server%20使用其中许多参数的默认值。
- 在查询编辑器窗口中,键入以下代码,但不要执行它:
CREATE DATABASE%20TestDataGO
2.使用指针选择词语 CREATE%20DATABASE,再按 F1。%20 CREATE%20DATABASE 帮助文章将打开。%20可以使用此方法查找 CREATE%20DATABASE 以及在使用的其他语句的完整语法。
3.在查询编辑器中,按 F5 以执行语句并创建名为 TestData的数据库。
创建表
若要创建表,必须提供该表的名称以及该表中每个列的名称和数据类型。%20最好是指示是否允许在每个列中使用%20null%20值。%20若要创建表时,必须具有 CREATE%20TABLE 权限,以及对包含该表的架构的 ALTER%20SCHEMA 权限。
大多数表有一个主键,主键由表的一列或多列组成。%20主键始终是唯一的。%20数据库引擎强制实施以下限制:表中的任何主键值都不能重复。
将查询编辑器连接切换到%20TestData%20数据库,在查询编辑器窗口中,键入以下代码,并执行它以更改与 TestData 数据库的连接
USE TestDataGO
创建表
在查询编辑器窗口中,键入以下代码,并执行它以创建一个名为Products的表。该表中各列的名称为ProductID、ProductName、Price和``ProductDescription。
ProductID 列是表的主键。int``varchar(25)、 money和 varchar(max)都是数据类型。Price 和 ProductionDescription 列可以不包含数据。%20此语句包含称为架构的可选元素%20(dbo.)。%20架构是拥有表的数据库对象。%20如果你是管理员, dbo 则为默认架构。%20 %20 dbo 代表数据库所有者。
CREATE%20TABLE%20dbo.Products %20 %20(ProductID int PRIMARY%20KEY%20NOT NULL, %20 %20ProductName varchar(25)%20NOT NULL, %20 %20Price%20money NULL, %20 %20ProductDescription varchar(max) NULL)GO
插入和更新表中的数据
创建表后 Products ,即可使用 INSERT 语句将数据插入表中。%20插入数据后,将使用语句更改行 UPDATE 的内容。%20使用 WHERE 语句的 UPDATE 子句将更新限制为单个行。%20这四条语句会输入以下数据。
基本语法是: INSERT、表名、列列表 VALUES,然后是要插入的值的列表。%20如果某行的前面有两个连字符,则指示该行为注释,编译器将忽略其文本。%20在这种情况下,注释说明允许的语法变体。
将数据插入到表
- 执行以下语句,将一行插入到在上一个任务中创建的
Products表中。
--%20Standard%20syntaxINSERT dbo.Products%20(ProductID,%20ProductName,%20Price,%20ProductDescription) %20 VALUES (1, 'Clamp', 12.48, 'Workbench%20clamp')GO
如果插入成功,则继续执行下一步。
如果插入失败,可能是因为 Product 该表中已有具有该产品%20ID%20的行。
若要继续,请删除表中的所有行并重复上一 TRUNCATE%20TABLE 删除表中的所有行。运行以下命令来删除表中的所有行:
TRUNCATETABLE%20TestData.dbo.Products;GO
删除表后,在此步骤中重复 INSERT 命令。
2.以下语句显示如何通过在字段列表(在圆括号中)中和值列表中均切换 ProductID 和 ProductName 的位置,更改提供参数的顺序。
--%20Changing%20the%20order%20of%20the%20columnsINSERT dbo.Products%20(ProductName,%20ProductID,%20Price,%20ProductDescription) %20 VALUES ('Screwdriver', 50, 3.17, 'Flat%20head')GO
- 以下语句演示,只要值是按正确顺序列出的,列的名称就是可选的。%20此语法很常见,但是建议不要使用它,因为其他人可能会难以理解你的代码。
NULL为Price列指定,因为还不知道此产品的价格。
--%20Skipping%20the%20column%20list,%20but%20keeping%20the%20values%20in%20orderINSERT dbo.Products %20 VALUES (75, 'Tire%20Bar', NULL, 'Tool%20for%20changing%20tires.')GO
4.只要访问和更改默认架构中的表,架构名称是可选的。ProductDescription 列允许%20Null%20值,而且没有提供值,因此可以从语句中完全删除 ProductDescription 列的名称和值。
--%20Dropping%20the%20optional%20dbo%20and%20dropping%20the%20ProductDescription%20columnINSERT Products%20(ProductID,%20ProductName,%20Price) %20 VALUES (3000, '3%20mm%20Bracket', 0.52)GO
验证之前插入操作的数据:
更新%20products%20表
键入并执行以下UPDATE语句将第二种产的 ProductName 从 Screwdriver更改为 Flat%20Head%20Screwdriver。
UPDATE dbo.Products %20 SET ProductName = 'Flat%20Head%20Screwdriver' %20 WHERE ProductID = 50GO
更新后的效果:
从表中读取数据
使用 SELECT 语句读取表中的数据。%20该 SELECT 语句是最重要的%20Transact-SQL%20语句之一,语法存在许多变体。%20在本教程中,你将使用五个基本版本。
读取表中的数据
- 键入并执行以下语句以读取
Products表中的数据。
--%20The%20basic%20syntax%20for%20reading%20data from a single tableSELECT ProductID,%20ProductName,%20Price,%20ProductDescription %20 FROM dbo.ProductsGO
- 你可以使用星号%20(
*)%20选择表中的所有列。%20星号用于临时查询。%20在永久代码中,请提供列列表,使语句返回预测列,即使稍后会将新列添加到表中,也是如此。
--%20Returns all columns in%20the table--%20Does%20not use the%20optional%20schema,%20dboSELECT * FROM ProductsGO
- 可以省略不希望返回的列。%20列会按列出它们的顺序返回。
--%20Returns%20only%20two%20of%20the columns from the tableSELECT ProductName,%20Price %20 FROM dbo.ProductsGO
- 使用
WHERE子句可以限制返回给用户的行。
--%20Returns%20only%20two%20of%20the%20records%20in%20the%20tableSELECT ProductID,%20ProductName,%20Price,%20ProductDescription %20 FROM dbo.Products %20 WHERE ProductID < 60GO
- 您可以在返回列中的值时使用它们。%20以下示例对
Price列执行数学运算。%20除非通过使用AS关键字提供一个名称,否则以此方式更改的列将没有名称。
--%20Returns%20ProductName%20and%20the%20Price%20including%20a%207%%20tax--%20Provides%20the%20name%20CustomerPays%20for%20the%20calculated%20columnSELECT ProductName,%20Price * 1.07 AS CustomerPays %20 FROM dbo.ProductsGO
3.2%20第2节:创建视图和存储过程
视图是存储 SELECT 语句,存储过程是作为批处理执行的一个或多个%20Transact-SQL%20语句。
视图像表那样进行查询,但不接受参数。%20存储过程比视图更复杂。%20存储过程可以同时具有输入和输出参数,并且可以包含用于控制代码流的语句,例如 IF 和 WHILE 语句。%20良好的编程做法是对数据库中的所有重复作使用存储过程。
对于此示例,使用 CREATE VIEW%20创建一个视图,该视图仅选择表中的两列 Products 。%20然后,用于 CREATE%20PROCEDURE 创建一个存储过程,该存储过程接受价格参数,并仅返回那些成本低于指定参数值的这些产品。
创建视图
执行以下语句创建一个视图,该视图执行%20Select%20语句,并将产品的名称和价格返回给用户。
CREATE VIEW vw_Names %20 AS %20 SELECT ProductName,%20Price FROM Products;GO
测试视图
视图的处理方式与表类似。%20使用 SELECT 语句访问视图。
SELECT * FROM vw_Names;GO
创建存储过程
以下语句创建一个名为 pr_Names的存储过程,接受名为 @VarPrice 、数据类型为 money的输入参数。CAST 函数是%20SQL%20Server%20中的类型转换函数,用于将一个数据类型的表达式转换为另一个数据类型。%20该存储过程打印与输入参数(已从 Products%20less%20than 数据类型更改为 money 字符数据类型)串联的语句 varchar(10) 。%20然后,该存储过程对视图执行 SELECT 语句,将输入参数作为 WHERE 子句的一部分进行传递。%20这将返回价格小于输入参数值的所有产品。
CREATE PROCEDURE pr_Names @VarPrice money %20 AS %20 BEGIN %20 %20 --%20The%20print%20statement%20returns%20text%20to%20the%20user %20 %20 %20PRINT 'Products%20less%20than%20' + CAST(@VarPrice AS varchar(10)); %20 %20 --%20A%20second%20statement%20starts%20here %20 %20 SELECT ProductName,%20Price FROM vw_Names %20 %20 %20 %20 %20 WHERE Price < @VarPrice; %20 ENDGO
测试存储过程
若要测试存储过程,请键入并执行以下语句。%20存储过程应该返回在第%201%20节中向 Products 表中输入的、其价格小于 10.00的两个产品的名称。
EXECUTE pr_Names 10.00;GO
3.3%20第%203%20节:删除数据库对象
删除在第%201%20节和第%202%20节中创建的对象,再删除数据库。
在删除对象之前,请确保使用正确的数据库:
USE TestData;GO
撤销存储过程
USE TestData;GODROP%20PROC%20pr_Names;GO
撤销视图
使用 DROP 语句删除视图 vw_Names:
DROP VIEW vw_Names;GO
删除表
- 使用
DELETE语句删除Products表中的所有行:
DELETE FROM Products;GO
- 使用
DROP语句删除Products表:
DROP TABLE Products;GO
如果文章对你有帮助,请关注我的公众号:
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:成渝Sec 成渝Sec 成渝Sec《数据安全:编写 SQL 语句》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论