SQL 练习


例:列出张姓且单名的学生的学号、姓名。
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 (学号,课程号 ) 
)

---------------------------------------------------------------------------------




---------------------------------------------------------------------------------




---------------------------------------------------------------------------------







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值