上次介绍了如何在SQL Server中建立数据库和表,并且做备份和还原。这一次将用上次建立的School数据库做演示,学习SQL语句。本文为0基础入门级别,所以介绍的知识非常有限,例子也是最简单的,还是建议大家买本SQL的书学习。
先回顾一下,上次我们建立的数据库和表结构如下:
School数据库里只有一张Student表,其中Id是自增长的主键。下面我们以它为例,来演示SQL语句的基本用法。
在SSMS中编写SQL脚本的方法是:点击工具栏上的“新建查询”,在编辑器中输入SQL脚本,选择一个正确的数据库,检查语法正确后,点击“执行”,最后在消息面板可以看到执行结果。如下图:
一、 使用SQL语句创建表
除了前面一片文章介绍的用图形化界面建表,我们还可以用SQL语句来创建表,创建Student表的SQL脚本如下:
CREATE TABLE [dbo].[Student]( [Id] [int] IDENTITY(1,1) NOT NULL, [SName] [nvarchar](50) NULL, [Phone] [nvarchar](50) NOT NULL, [Address] [nvarchar](max) NOT NULL, CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
这段脚本不必去记,可以使用SSMS生成。不过当我们用程序去创建表的时候,就需要手写SQL脚本的能力了。
二、 插入数据
例:向Student表插入一条新记录。
INSERT INTO [dbo].[Student] ([SName],[Phone],[Address]) VALUES ('Edi','123456','ABCDEF');
执行完成后,右键点击student表,选择“选择前1000行”,来检验我们的执行结果。
在下面的结果面板里,已经显示了Student表现在的数据。
三、 查询
在刚才点击“选择前1000行”之后,你可能注意到了SSMS自动为我们编写了查询脚本。这就是现在要介绍的。
刚才的脚本是:
SELECT TOP 1000 [Id] ,[SName] ,[Phone] ,[Address] FROM [School].[dbo].[Student]
其中TOP 1000表示前1000条记录,通常TOP语句都会和ORDER BY 排序一起使用,这在后面会介绍。如果你希望查询所有的数据,就把TOP 1000去掉即可。
另外,SELECT你可以省略后面的字段,用*代替,表示希望查询所有的字段。
SELECT * FROM Student
这条语句的结果和之前是一样的,因为之前的SELECT语句也是筛选全部的字段,并且我们目前只有一条记录。
为了介绍后面的技巧,我先给在表中插入一些别的数据。最后结果如下:
现在,我们的SELECT语句可以玩更多的花样了。比如:
按Id从大到小排序:
SELECT * FROM Student ORDER BY Id DESC
按条件查询(匹配Address为AAAAA)的记录:
SELECT * FROM Student WHERE Address = 'AAAAA'
配合起来也能用:
SELECT * FROM Student WHERE Address = 'AAAAA' ORDER BY ID DESC
四、 修改
如果我们需要修改记录,就要用到UPDATE语句。比如Stone的地址改为BBBBB:
UPDATE STUDENT SET Address = 'BBBBB' WHERE SName = 'Stone'
当然,你也可以批量UPDATE,这取决于后面的WHERE语句。
五、删除
最后我们来学习如何删除记录。这个非常简单,不过得注意WHERE条件,以免误删。比如我要删除Id为5的记录:
DELETE FROM Student WHERE Id = 5
最后扯一个小常识。细心的读者可能注意到了,本文所操作的Student表,Id居然不是连续的,读者可能会问了,这个不是自动加1的吗?却是是这样。但数据库的机制必须确保这个Id的唯一性,因为他是主键,数据库也要保证完整性,因为这个Id可能在别的地方被使用。如果因为删除了某条记录而自动更新这个Id的话,那么引用这个Id的地方就会指向错误的位置,毕竟数据库无法知道这个Id到底最后给谁用了。它可能是别的程序,别的表的外键,或者网络上某篇新闻的Id。
其实最后我想说的是,本文只是0基础入门,没有介绍过任何关系型数据库的基本知识,但这些知识非常重要,读者如果想学SQL Server或者其他数据库,一定得去看有关的书籍。
还是代码好用。。。