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

2014-11-24 11:13:17 · 作者: · 浏览: 4
表名的地方都要使用别名,而不能再使用原表名。

操作4:三张表的连接查询。查询“信息管理系”修了“计算机文化学” 的学生姓名和成绩。
SELECT Sname, Grade
  FROM  Student s
  JOIN  SC ON s.Sno = SC. Sno
  JOIN  Course c ON c.Cno = SC.Cno
  WHERE Dept = '信息管理系' 
  AND Cname = '计算机文化学'

操作5:综合使用聚合函数、多表连接、分组。

有分组和行选择条件的多表连接查询。统计计算机系学生每门课程的选课人数、平均成绩、最高成绩和最低成绩。

SELECT Cno, COUNT(*) AS Total,
AVG(Grade) as AvgGrade,
MAX(Grade) as MaxGrade,
MIN(Grade) as MinGrade
FROM Student S JOIN SC ON S.Sno = SC.Sno
WHERE Dept = '计算机系'
GROUP BY Cno

4.索引

4.1 创建索引

语法:

create [ unique ] [ clustered | nonclustered ] index 索引名

on { 表名 | 视图名 } ( 列名 [ asc | desc ] [ , ...n ] )


注意:
1.一个表中只能创建1个聚集索引。(由于系统已自动在主键上创建了聚集索引,所以用户不能再创建,除非先删除已有的索引,重新创建)
2.一个表中可以创建若干个非聚集索引。

操作:在kc表中,重新创建名为“ix_kcm”的索引,使其成为惟一性的非聚集索引
create     unique      index     ix_kcm 
on      kc ( 课程名  desc)
with   drop_existing --删除已存在的索引,创建新的索引

4.2 删索引

语法:
drop index {表名 . | 视图名 . } 索引名 [ , … n ]

注意:
SQL Server系统自动建立的索引不能用drop index删除,只能用alter table语句中的drop constraint子句来解除加在该字段上的主键约束或惟一性约束,这些约束一解除,相关的索引也就被删除了。

4.3 查看索引

语法:
[exec] sp_helpindex {表名 | 视图名 }

5.视图

5.1 视图介绍

5.1.1 视图的含义和作用


视图是基于某个查询结果的虚表。是用户查看和修改数据表中数据的一种方式。每个视图都有几个被定义的列和多个数据行。

5.1.2 视图与基本表


1.视图中的数据列和行来源于其所引用的基表。
2.视图所对应的数据并不实际存储在数据库中,而是仍存储在视图所引用的基表中。
3.数据库中只存储视图的定义。

5.1.3 使用视图的目的与好处


1.聚焦特定数据:使用户只能看到和操作与他们有关的数据,提高了数据的安全性。
2.简化数据操作:使用户不必写复杂的查询语句就可对数据进行操作。
3.定制用户数据:使不同水平的用户能以不同的方式看到不同的数据。
4.合并分离数据:视图可以从水平和垂直方向上分割数据,但原数据库的结构保持不变。

5.2 创建视图


语法:
create view 视图
[ (列名表) ]
[ with encryption ] --用于 加密视图的定义,用户只能查看不能修改。
as
select查询语句
[ with check option ] --强制所有通过是同修改的数据,都要满足select语句中指定的条件

操作1:创建一个 名为“v1”的视图,用于查询计算机网络专业男生的学号、姓名、出生日期,并将视图的列名分别改为:学生学号、男生姓名、生日。
create   view    v1 (学生学号,男生姓名, 生日)
    as
    select   学号, 姓名, 出生日期     from      xsqk
    where   专业名=‘计算机网络’   and   性别=1
go
使用视图
select   *    from    v1

5.3 修改视图

语法:
alter view 视图
[ (列名表) ]
[ with encryption ]
as
select查询语句
[ with check option ]

操作:在“v1”的视图中增加两列:专业名和所在系。
alter   view    v1
   (学生学号,男生姓名,生日,专业,系)
    as
    select   学号,姓名,出生日期,专业名,所在系
    from      xsqk
    where   专业名=‘计算机网络’   and   性别=1
)

5.4 删除视图

语法: drop view 视图名[ ,……n ]

5.5 通过视图管理表中的数据

5.5.1 使用视图插入数据

注意:

1.可通过视图向基表中插入数据,但插入的数据实际上存放在基表中,而不是存放在视图中。

2.如果视图引用了多个表,使用insert语句插入的列必须属于同一个表。

3.若创建视图时定义了“with check option”选项,则使用视图向基表中插入数据时,必须保证插入后的数据满足定义视图的限制条件。

操作1:向“V1”视图中添加两条记录。

insert   into   v1
	values(‘020106’,‘张三’,‘1981-04-22’,‘计算机网络’,‘计算机’)
insert   into   v1
	values(‘020107’,‘张四’,‘1981-07-08’,‘信息安全’,‘计算机’)

5.5.2 使用视图删除数据

注意:

1.要删除的数据必须包含在视图的结果集中。

2.如果视图引用了多个表时,无法用delete命令删除数据。

语法:

delete from 视图名 [ where 条件]

操作:删除“V1”视图中学号为‘020108’的记录。

delete    from    V1     where    sno = ‘020108’

6.存储过程和触发器

6.1 存储过程

存储过程实际上就是数据库里的函数

6.1.2 创建并执行存储过程

创建存储过程
语法:
CREATE PROC[EDURE] 存储过程名
[ { @参数名 数据类型 } [ = default ] [OUTPUT] ] [ , … n ]
AS SQL语句 [ … n ]

执行存储过程
语法:
[ EXEC [ UTE ] ] 存储过程名 [实参 [, OUTPUT] [, … n] ]

6.1.3 不带参数的存储过程

操作:查询计算机系学生的考试情况,列出学生的姓名、课程名和考试成绩。
CREATE  PROCEDURE  p_StudentGrade1
AS
 SELECT Sname, Cname, Grade
    FROM Student s INNER JOIN SC
    ON s.Sno = SC.Sno  INNER JOIN Course c
ON c.Cno = sc.Cno
      WHERE Dept = '计算机系'
执行:
EXEC p_StudentGrade1

6.1.4 使用输入参数

语法:
create proc[edure] 存储过程名
@形参 数据类型 [=默认值] ,…n
as SQL语句

执行:
[execute] 存储过程名 [ @实参= ] 值 ,…n
注意:
执行存储过程时输入参数的传递方式由三种(让我想到了python ^_^)
1.按位置传递:直接给出参数的值,实参与形参一一对应
2.通过参数名传递:使用“参数名=参数值“的形式,参数可以任意顺序给出
3.如果在定义存储过程时为参数指定了默认值,则在执行存储过程时可以不为有默认值的参数提供值。

操作:创建并执行带输入参数的存储过程p_x