SQLServer数据库操作总结(sql语法的使用)(三)

2014-11-24 11:13:17 · 作者: · 浏览: 6
se

2.7 向表中插入数据

2.7.1 插入单行数据

语法: insert [ into ] 表名 [ (字段名列表) ] values (字段值列表)

操作:已知student有以下数据项:SNO,SNAME,SAGE,SEX,SAGE,SDEPT,现向student表中插入数据
INSERT INTO Student(SNO,SNAME,SAGE,SDEPT) VALUES ('132','ZHANGSAN',23,'ASD')
INSERT INTO Student VALUES ('1234','ZHANGSAN','143','MAN',22,'YI',)

注意:字符型、日期型数据要用单引号括起来。

2.7.2 插入多行数据

语法: insert [ into ] 目的表名 [ ( 字段列表 ) ]
select [ 源表名 . ] 列名 [ , … n ] from 源表名 [ , … n ]
[ where 逻辑表达式 ]

操作:将sc表中的成绩不及格的记录,插入到nopass表中,或者完全写出一一对应的列名。参考语法说明
insert   into   nopass
    select   *    from   sc  
    where  grade<60

注意: 1.查询的值与列名按顺序对应,要求值类型与列数据类型一致。
2.对语句中无值对应的列名赋NULL。
3.如果没有指明列名表,则新插入记录的值的顺序必须与表中列的顺序一致,且每一列均有值(可为空)

3.数据库查询

3.1 基本查询语句结构


语法:
SELECT <目标列名序列> -- 需要哪些列
FROM <表名> -- 来自于哪些表
[WHERE <行选择条件>] -- 根据什么条件
[GROUP BY <分组依据列>] --分组依据
[HAVING <组选择条件>]
[ORDER BY <排序依据列>]

<目标列名序列>部分能够包含的内容有如下结构:

SELECT [ ALL | DISTINCT ]
[ TOP expression [ PERCENT ] [ WITH TIES ] ]

::=
{
*
| { table_name | view_name | table_alias }.*
| {
[ { table_name | view_name | table_alias }. ]
{ column_name | $IDENTITY } } ]
| expression
[ [ AS ] column_alias ] }
| column_alias = expression
} [ ,...n ]

3.2 单表查询

3.2.1 未做处理的查询

3.2.1.1 查询部分信息

操作:查询student表中的全体学生姓名和年龄
select name,age from student

3.2.1.2 查询全部信息

操作:查询全体学生的信息
select * from student

3.2.2 指定列别名

语法: [ 列名 | 表达式 ] [ AS ] 列别名

操作:在Student表中查询学生的姓名,和年龄(年龄由计算得出),将年龄列命名为age
SELECT name,year(getdate()) - year(Birthdate) AS age  FROM Student

3.2.3 去掉重复行

语法:在要求不重复的数据列前使用distinct关键字
操作:
SELECT  DISTINCT  Sno  FROM  SC

3.2.4 where 指定查询条件

常用查询条件如下表
where查询条件
查询条件 谓词
比较运算符 比较运算符 =, >, >=, <, <=, <>(或!=)
确定范围 BETWEEN AND, NOT BETWEEN AND
确定集合 IN, NOT IN
字符匹配 LIKE, NOT LIKE
空值 IS NULL, IS NOT NULL
多重条件 AND, OR

操作:查询不及格的学生姓名

SELECT DISTINCT Sno  FROM SC  WHERE Grade < 60

3.2.5 查询范围

语法:
BETWEEN…AND …
NOT BETWEEN…AND…
说明:BETWEEN后是范围的下限,AND后是范围的上限
操作1:查询考试成绩在80~90之间的学生学号、课程号和成绩
SELECT Sno, Cno, Grade FROM SC  WHERE Grade BETWEEN 80 AND 90 
等价与下面这句话
SELECT Sno, Cno, Grade FROM SC  WHERE Grade >=80 AND Grade <=90

操作2:查询考试成绩不在80~90之间的学生学号、课程号和成绩
SELECT Sno, Cno, Grade FROM SC  WHERE Grade NOT BETWEEN 80 AND 90 
等价与下面这句话
SELECT Sno, Cno, Grade FROM SC  WHERE Grade < 80 AND Grade > 90

3.2.6 IN 确定集合

语法:列名 [NOT] IN (常量1, 常量2, … )

作用:用来查找属性值属于指定集合的元组

操作1:查询信息管理系、通信工程系和计算机系学生的姓名和性别
select  name, sex from sudent
where dept in ('信息管理系','通信工程','计算机系')
等价于
select  name, sex from sudent
where dept = '信息管理系' or dept = '通信工程系' or dept = '计算机系'

操作2:查询信息管理系、通信工程系和计算机系三个系之外的其他系学生的姓名和性别
SELECT Sname, Sex  FROM Student 
WHERE Dept NOT IN ( '信息管理系', '通信工程系', '计算机系')
等价于
SELECT Sname, Sex  FROM Student 
WHERE Dept!= '信息管理系' AND Dept!= '通信工程系' AND Dept!= '计算机系'

3.2.7 LIKE 字符串匹配


语法:列名 [NOT] LIKE <匹配串> [ESCAPE <转义字符>]
说明:匹配串中可包含如下通配符:
1.%(百分号):匹配0个或多个字符。
2._(下划线):匹配一个字符。
3.[]:匹配方括号中的任何一个字符。
4.[^]:不匹配方括号中的任何一个字符。

如果比较的字符是连续的,则可以用连字符“-”表达,例如,要匹配b、c、d、e中的任何一个字符,则可以表示为:[b-e]
(说实话这不就是简化版的正则表达式么?)
操作1:查询姓“张”的学生详细信息
select * from student where name like '张%'

操作2:查询姓“张”、姓“李”和姓“刘”的学生的详细信息
select * from student where name like '[张刘李]%'

操作3:查询名字的第2个字为“小”或“大”的学生的姓名和学号
select * from student where name like '_[大小]%'

操作4:查询所有不姓“张”的学生姓名
select name  from student where name not like '张%'

操作5:在Student表中查询学号的倒数第三为位不是1、2、3的学生信息
select * from  student where number like '%[^123]__'

3.2.8 ESCAPE 转义字符


语法:ESCAPE 转义字符如果要查找的字符串正好含有通配符,比如下划线或百分号,就需要用ESCAPE来说明。其中“转义字符”是任何一个有效的字符,在匹配串中也包含这个字符,表明位于该字符后面的那个字符将被视为普通字符,而不是通配符。

操作:查找字段t1中包含字符串“30%”的记