SQL Server 2005系列教学(4) 表的三种基本操作

  1. 云栖社区>
  2. 博客>
  3. 正文

SQL Server 2005系列教学(4) 表的三种基本操作

技术小胖子 2017-11-13 19:33:00 浏览937
展开阅读全文




我们已经分别详细了解如何建立数据库,建立表。下面我们来看一下如何表进行基本操作:INSERTDELETEUPDATE

在插入操作时必须注意字符型和日期型数据必须要用半角单引号引起来
insert
命令格式1
insert [into] 表名 [(字段名1,字段名2…………)] values (字段值1,字段值2…….)
注意:此命令一次只能插入一条记录
如果省略字段名则为所有字段(主键标识除外),如果带有字段名,则字段值必须和字段名一一对应有。顺序一致,但与表中的顺序无关!
举列:红色代表错误举例!
insert into dufei (编号,姓名,性别,年龄,出生日期,是否党员) values (2,'lili','',30,'1966-01-01',0)
insert into dufei (编号,姓名,性别,年龄,出生日期,) values (2,'lili','',30,'1966-01-01')
insert into dufei values (3,'张三','',30,'1966-01-01',0)
insert into dufei (编号,姓名,性别,年龄,出生日期,是否党员) values (2,lili,'',30,'1966-01-01',0)
insert into dufei (编号,姓名,性别,年龄,出生日期,是否党员) values ('lili','',30,'1966-01-01',0)
 
命令格式2insert 表名 select 列名 from 表名 [where 条件]
注意:此命令一次可插入多条记录,要插入数据的表必须和SELECT 的结果集兼容。兼容的含义是列的数量和顺序必须相同,列的数据类型也应相同,或可以通过SQL Server 自动转换。
例如:
insert into student select * from dufei
insert into student select * from dufei where 姓名='dufei'
 
DELETE 删除记录  INSERT相比,DELETE就显得简单多了。
格式:DELETE  [FROM ] 表名  [WHERE 条件]
功能:从指定表中删除满足条件的记录!如果省略WHERE条件,则删除所有记录!
示例
A. 不带参数使用 DELETE
下例从student 表中删除所有行。
DELETE from  student
B.STUDENT表中删除张三这条记录
DELETE FROM STUDENT WHERE 姓名= ‘张三
C STUDENT 表中删除所有女同志的记录
DELETE FROM STUDENT WHERE 性别=’
 STUDENT 表中删除所有党员。
DELETE FROM  STUDENT WHERE 是否党员=1
UPDATE 更新数据
格式:update 表名 SET 字段名=新值[,字段名=新值…….] [where 条件]
功能:将指定表中满足条件记录的字段值更改为新值。
注意:WHERE 条件非常重要,如果省略则是对所有记录操作。
例如:A.将员工表中李逍遥同志的年龄改为36
UPDATE 员工表 SET 年龄=36 where 姓名='李逍遥'
B.将员工表中赵灵儿的工作日期提前一年
UPDATE 员工表 SET 工作日期=’1995-6-1’ where 姓名=’赵灵儿
C.将员工表中所有女同志的工资都加200
update 员工表 set 工资=工资+200   where 性别=''
D.现在女同志越来越讲漂亮,工资再加100并县年龄去1
update 员工表 set 工资=工资+200, 年龄=年龄-1  where 性别=''
 
到这个地方为止,对数据库的三种基本操作咱们就讲完了。但这是比较简单的。我们还没有加更复杂的条件。怎么样,有什么不明白的地方?
 
SELECT 查询语句
下面我们就开始我们SQL中的精华语句:SELECT 查询语句:它是SQL中功能最强大的命令,最常用的命令。说它简单它像一潭小溪一样清澈见底,说它复杂,它像汹涌的大海一样深不可测。这一部分的内容会比较多一点,要是给SELECT 命令写一个语法格式确实是很困难的一件事情,因为它的语法太多。太复杂。我们就从简单开始,步步为营。愉快得达到我们的终点。
最简单的格式:SELECT 字段名列表 FROM 表名 [WHERE条件]
      功能:从表中显示满足条件的记录的指定字段值。显示所有字段可以用*表示。
     这个格式我们在前面也陆续用了几次。在这个地方,我们再加深一下。
举例;查询一下员工表中有没有李逍遥这个职工,如果有则显示该职工的所有信息。
SELECT *  FROM 员工表 WHERE 姓名=’李逍遥
查询一下员工表员有无张华这个职工。
SELECT * FROM 员工表 WHERE 姓名=‘张华’
显示一下员工表员所有男同志的姓名,性别,工资字段
SELECT  姓名,性别,工资 FROM 员工表 WHERE 性别=‘男’
 
 
 
加深部分:
 大家因为刚刚接触数据库,可能会在建库的时候一不小把数据库的名字打错了。但这时库已经建立成功了,怎么办?我们有一个命令可以更改数据库的名字:
数据库改名(不能更改物理文件名)
表改名(只能用鼠标操作,但可用alter调整)
格式:
alter database 旧库名
modify name=新库名
如:
alter database dufei
modify name=df
 格式;
alter table 表名
ADD 新列名 类型(n) 空否
:
alter table dufei
add 性别 char(2) null
调整其它参数格式:
alter database 库名
modify file
(name=数据文件/日志文件
size/maxsize/filegrowth=大小)
Alter database=df
Modify file
(name=df_data
maxaixe=10mb)
把数据文件最大调10M
alter table 表名
drop 列名
Alter table dufei
Drop column 列名
 
 
数据库改名:sp-renamedb ‘旧名’,’新名
表改名: sp_rename ‘旧表名’,’新表名
列改名: sp_rename ‘.旧列名’,’新列名’,’column’
增加列:
    Alter table 表名  add 新列名 类型(长度)   是否为空
删除列;
     Alter table  表名  drop column 列名
显示数据库信息:
  Sp_helpdb   
Status
varchar(340)
以逗号分隔的值的列表,这些值是当前在数据库上设置的数据库选项的值。
compatibility_level
tinyint
数据库兼容级别(606570  80
或者:select name from master.dbo.sysdatabases
 
较为复杂的查询用我们现在所学的知识就不行了,那么我们就插入一些新的知识,和SELECT一起使用。
 
运算符(Operator)我们从小学就学了,加,减,乘,除,这是算术运算符,但SQL中不仅仅有算术运算符,还有其他运算符。我们一个个来看。我们会和SELECT 结合使用!
    1 算术运算符
包括:+(加)、(减)、(乘)、(除)、%(取模也就是取余)
+ - *  四种运算不用说了,至于取余就是取余对小数无效
Select 2-3  select 2+3  select 2*3  select 2/3     select 2%3
Select ‘500’+2   select ‘500’+’2’  select 500+’2a’  select 500+2a
   例如:我们查询一下每个职工的所有信息及应发工资!
select 编号,姓名,性别,年龄,工作日期,籍贯,基本工资,补助,工服,基本工资+补助工服 from 员工表
但显示结果会为“无列名”所以可以加一个列名!
As 进行换名输出
select 编号,姓名,性别,年龄,工作日期,籍贯,基本工资,补助,工服,基本工资+补助-工服 as 应发工资 from 员工表
select 姓名 as name, 年龄as age 性别as sex    from 员工表
2。字符运算符
LIKE 字符串模糊匹配
LIKE 关键字用于检索与特定字符串匹配的记录行。它后面可以跟一个值段而不是一个完
整的列值。语法形式如下:
SELECT 字段名
FROM 表名
WHERE 条件 [ NOT ] LIKE  通配符]
 
 
例如:LIKE B% B开头的所有字符  SQL SERVER2000中不区分大小写。即
      Like b%等同于 like B%
     显示所有姓李的记录:select * from 员工表 where  姓名 like '%'
     显示所有姓名中含有李的记录:select * from 员工表 where  姓名 like '%%'
LIKE _C%  第二个字符是C的所有字符
显示姓名中第二个字是李的记录:select * from 员工表 where 姓名 like '_%'
     注意,在此汉字与英文字母一样也占一个字符!  此例不好!!!!!
     显示2000年参加工作的职工 select * from 员工表 where 工作日期 like ______2000%' 其中有六个_因为是月日年的格式。如‘02-01-2000
     Like [a-g] 表示 a-g中的任意字母 如:a,b,c,d,e,f,g
     Like [^a-g] 表示第一个字符不是a-g中的任意一个
如何显示正确的邮编:
SELECT * FROM 员工表 WHERE 邮政编码 like '[0-9][0-9][0-9][0-9][0-9][0-9]'
 
如果用户要查找的数据中本身就包含了通配符,如SQL_Mail,就需要使用转义符来区分通配符与实际存在的字符。其格式如下:
Like 字符匹配串 escape 转义字符
例如:查找对象名称为SQL_M开头的,以il结尾的,中间有一个不确定字符的对象!
Select * from yuangon where name like ‘SQL#_M_il’ escape ‘#’
这里使用了两个但意义是不一样的
当然不用#也可以,但不会和其他常用字符冲突
 
还可以使用[]来将通配符指定为普通字符:
:查找分数提高50% 的学生信息
Select * from student where 分数 like 50[%]
 
 
注意:
当使用 LIKE 进行字符串比较时,模式字符串中的所有字符都有意义,包括起始或尾随空
格。如果查询中的比较要返回包含"abc "abc 后有一个空格)的所有行,则将不会返回包含"abc"abc 后没有空格)的列所在行。但是可以忽略模式所要匹配的表达式中的尾随空格。如果查询中的比较要返回包含"abc"abc 后没有空格)的所有行,则将返回以"abc"开始且具有零个或多个尾随空格的所有行。
 
字符连接运算符“+”用于连接两个或两个以上的字符
: select 性别+籍贯 from 员工表         当然这个例子没有具体意义!
Print ‘中华人民共和国’+‘中国共产党’
 
 
3.比较运算符
包括:>(大于)<(小于)、(等于)、>=(大于等于)、<=(小于等于)、<>(不等于)、
显示所有年龄在25岁以下的职工记录 select * from 员工表 where 年龄<25
显示所有在2000年以前工作的职工记录
 select * from 员工表 where 工作日期<'2000-01-01'
4 逻辑运算符
包括:AND(与)、OR(或)、NOT(非)
分析介绍 与,或,非的含义,举例如下;
显示籍贯是安徽的男同志记录
Select * from 员工表 where 籍贯=’安徽’ and 性别=’
显示籍贯分别是安徽或天津的同志记录
Select * from 员工表 where 籍贯='安徽' or 籍贯='天津'
NOT来实现查找所以女同志记录
Select * from 员工表 where not 性别=''
字符连接运算符“+”用于连接两个或两个以上的字符
: select 性别+籍贯 from 员工表         当然这个例子没有具体意义!
 
运算符的优先等级从高到低如下所示
 
       括号:();
       乘、除、求模运算符:*/%
       加减运算符:+
       比较运算符:=><>=<=<>!=!>!<
       位运算符:^&|
       逻辑运算符:NOTANDOR
 
 

执行范围测试(BETWEEN关键字)

组合两个比较运算符条件可以查询在指定范围内的数据。例如:
SELECT ExamID, SustainedOn, Comments FROM Exam
WHERE SustainedOn >= '2003-03-20'
AND SustainedOn <= '2003-03-24';
但是使用SQL关键字BETWEEN使范围测试更具可读性:
SELECT A, FROM 
WHERE BETWEEN 下限 AND 上限;
在这里,列C的值被检测,看它是否大于或者等于下限,并且小于或者等于上限。例如:
SELECT ExamID, SustainedOn, Comments FROM Exam
WHERE SustainedOn BETWEEN '2003-03-20' AND '2003-03-24';
当然,我们也可以在BETWEEN前面加上NOT来排除一个范围:
SELECT ExamID, SustainedOn, Comments FROM Exam
WHERE SustainedOn NOT BETWEEN '2003-03-20' AND '2003-03-24';
 

定义集合关系(IN关键字)

前面我们学习了如何检测值是否在一个系列范围之内(或者之外),同样,我们也可以检测值是否是几个可能值中的一个。使用已经学习过的运算符和关键字可以做到这点:
SELECT A, FROM 
WHERE C = Value1 OR C = Value2 OR C = Value3;
然而,在WHERE子句中使用IN关键字加上一系列可选值看起来更优美:
In 是在表中查找有没有和我给定的值有没有想匹配的,如果有,则显示,如果没有,则不显示
 
SELECT A, FROM  WHERE C IN (值集合);
这个值集合可以是几个常量,例如:
SELECT A, B FROM 
WHERE IN ('Value1', 'Value2', 'Value3');
也可以是完全独立的SELECT查询,例如:
SELECT A, FROM 
WHERE C IN (SELECT D FROM 2);
注意:这里只是子查询的一个示例,后续章节我们将详细讲述。
INNOT一起组合使用,可以查询不在值集合中的数据:
SELECT A, B FROM 
WHERE C NOT IN ('Value1', 'Value2', 'Value3');
作为一个更具体的例子,我们在InstantUniversity数据库的StudentExam表中查询StudentID273的考试信息,其SQL语句如下:
SELECT StudentID, ExamID, Mark FROM StudentExam WHERE StudentID IN (2, 7, 3);
 



 本文转自 dufei 51CTO博客,原文链接:http://blog.51cto.com/dufei/80750,如需转载请自行联系原作者

 

网友评论

登录后评论
0/500
评论
技术小胖子
+ 关注