•例:列出张姓且单名的学生的学号、姓名。
Select sno,sname
From Student
Where sname LIKE‘张_ _’
•转义符: escape
例:列出课程名称中带有‘_’的课号及课名。
Select cno,cname
From Course
Where cname LIKE‘%\_%’ escape ‘\’
•指定结果集中元组的排列次序
–耗时
–ASC(缺省)、DESC
–(Null的处理、序号引用、未列出属性的引用)
例:列出CS系中的男生的学号、姓名、年龄,并按年龄进行排列(升序)
Select sno,sname,sage
From Student
Where sdept = ‘CS’
Order By sage ASC
例:列出具有两门(含)以上不及格的学生的学号、不及格的课目数。
Select sno,count(*)
From SC
Where grade < 60
Group By sno
Having count(*) >= 2
关系的连接——内连接
内连接的连接方式
Select *
From S Inner Join SC on S.sno = SC.sno
也可以用笛卡儿积 + 选择的方法实现
Select *
From S , SC
Where S.sno = SC.sno
关系的连接——外连接
–左外连接(Left Outer Join):
Select *
From S Left OuterJoin SC on S.sno = SC.sno
–右外连接(Right Outer Join):
Select *
From S Right Outer Join SC on S.sno = SC.sno
–全外连接(Full Outer Join):
Select *
From ( S Full Outer Join SC on S.sno = SC.sno)
–交叉连接(Cross Join):
Select sno,cno
From S Cross Join C
嵌套子查询—集合成员资格In
例:查询选修了数据库课程的学生的学号。
Select sno
From SC
Where cno IN (
Select cno
From C
Where cname like ‘%数据库%’)
例:找出与201190609118同龄的学生
Select *
From Student
Where sage = ( Select sage
From Student
Where sno = ‘201190609118’ )
例:找出年龄最小的学生
方法1:
Select * From S Where sage <=ALL (Select sage From S )
方法2:
Select * From S
Where sage = ( Select min(sage) From S )
例:创建从学生表中查询自己信息的视图并使用该视图进行查询。
Create Viewzz as
Select *
From 学生表
Where姓名 = ‘zz’
SELECT * FROM zz
例:创建查询自己各科成绩的视图
Create View zz个人成绩 as
Select姓名,课程名,成绩
From学生表,课程表,成绩表
Where姓名 = ‘zz’ AND
学生表.学号=成绩表.学号码AND
课程表.课程号=成绩表.课程号
例:建立学生平均成绩视图
Create View 平均成绩视图(学号,平均分) as
Select 学号,avg(成绩)
From 成绩表
Group By 学号
例:修改学生平均成绩视图
ALTER View 平均成绩视图(姓名,平均分) as
Select 姓名,avg(成绩)
From 成绩表,学生表
Where 学生表.学号=成绩表.学号
Group By 姓名
创建带参存储过程,从学生表、课程表、成绩表中查询指定学生的姓名、课程名和成绩。
CREATE PROCEDURE 成绩查询
@sname varchar(6)
AS
SELECT 姓名,课程名,成绩
FROM 学生表、课程表、成绩表
WHERE 学生表.学号=成绩表.学号 AND
课程表.课程号=成绩表.课程号 AND
姓名= @sname
执行存储过程
EXEC 成绩查询@sname =‘zz’
insert 触发器示例
create trigger tri_insert
on 学生表
for insert
as
declare @student_id char(10)
select @student_id=s.student_id
from 学生表 s inner join inserted i
on s.学号=i.学号
if @student_id='0000000001'
begin
raiserror('不能插入1的学号!',16,8)
rollback transaction
end
update触发器示例
create trigger tri_update
on 学生表
for update
as
if update(学号)
begin
raiserror('学号不能修改!',16,8)
rollback transaction
end
delete触发器示例
create trigger tri_delete
on 学生表
for delete
as
declare @student_id varchar(12)
select @student_id=学号 from deleted
if @student_id=‘201190609111’
begin
raiserror('错误',16,8)
rollback transaction
end
内嵌表值函数
举例:
CREATE FUNCTION func(@id char(12))
RETURNS TABLE
AS
RETURN (SELECT * FROM 学生表WHERE 学号 = @id)
**************************************调用内联表值函数:
select *
from func(‘201190609118')
---------------------------------------------------------------------------------
建立学生表
CREATE TABLE 学生表
( 学号 CHAR(12) PRIMARY KEY ,
姓名 CHAR(6) NOT NULL,
性别 CHAR(2) CHECK (性别 IN (‘男’,‘女’))
班级 CHAR(10)
)
建立课程表
CREATE TABLE 课程表
(
课程号 CHAR(2) PRIMARY KEY ,
课程名 CHAR(20) NOT NULL,
学分 INT
)
建立成绩表
CREATE TABLE 成绩表
(
学号 CHAR(12) REFERENCES 学生表(学号),
课程号 CHAR(2),
成绩 INT DEFAULT 0,
FOREIGN KEY(课程号 )
REFERENCES (课程表 ) ,
PRIMARY KEY (学号,课程号 )
)
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------