SQL语句(十九)——存储过程(练习)

select * From Student
select * From Course
select * from SC

--INSERT INTO SC (Sno, Cno, Grade)
--VALUES (‘1513032087‘, ‘7‘, 99);

--(1)找出至少选修X课和Y课的学生学号(P1)
-- 执行P1,输出X=数据库,Y=数据结构
GO
Create Proc SelectLessonToSno @X varchar(40), @Y varchar(40)
AS
begin
select SC.Sno
from SC, Course
where SC.Cno = Course.Cno
and SC.Cno in (Select SC.Cno
               From SC, Course
               Where SC.Cno = Course.Cno and
                Cname in (@X, @Y)
               )
END

EXEC SelectLessonToSno @X =  ‘数据库‘, @Y =  ‘数据结构‘

--(2)找出至少选修X老师讲的一门课的学生姓名(P2)
--执行P2,X=程老师
GO
Create Proc TnameToSname @Tname varchar(40)
AS
BEGIN
Select distinct Sname
From Student,Course,SC
where Student.Sno = SC.Sno and
    Course.Cno = SC.Cno and
    SC.Sno in (select Sno
               from SC, Course
               where SC.Cno = Course.Cno and
                    Course.Tname = @Tname
               )
END
EXEC TnameToSname @Tname = ‘程老师‘

--(3)查询X号课程得最高分的学生的学号(P3)
--执行P3,X=数据库对应的课程号
GO
Create Proc maxofCno @X varchar(10)
AS
BEGIN
select Sno
From SC
Where SC.Cno = @X and Grade =
                      (select MAX(Grade)
                       From SC
                       Group by Cno
                       Having Cno = @X
                       )
END
EXEC maxofCno @X = ‘5‘

--(4)X课程得最高分的学生的姓名、性别、所在系(P4)
--执行P4,X=数据库
GO
Create Proc LessonToStudentInfo @X varchar(40)
AS
BEGIN
Select Sname, Ssex, Sdept
From Student, SC, Course
Where Student.Sno = SC.Sno and SC.Cno = Course.Cno and
    Course.Cname = @X and Grade =
                        (
                        Select MAX(Grade)
                        from SC, Course
                        where SC.Cno = Course.Cno and
                            Course.Cname = @X
                        )
END
EXEC LessonToStudentInfo @X = ‘数据库‘

--(5)取出没有选修X课程的学生姓名和年龄(P5)
--执行P5,X=数据库
GO
Create Proc SelectNoLessonToStudentInfo @X varchar(40)
AS
BEGIN
Select Sname, Sage
From Student, SC, Course
where Student.Sno = SC.Sno and
      Course.Cno = SC.Cno and
      SC.Sno not in (
                  Select Sno
                  from SC, Course
                  where SC.Cno = Course.Cno and Course.Cname = @X
                  )
END
EXEC SelectNoLessonToStudentInfo @X = ‘数据库‘

--(6)求选修课程名为X的学生的平均年龄(P6)
--执行P6,X=数据库
GO
Create Proc LessonToStudentAge @X varchar(40) = ‘数据库‘ --默认值
AS
BEGIN
Select AVG(Sage)
From Student, Course, SC
Where Student.Sno = SC.Sno and
      Course.Cno = SC.Cno and
      Course.Cname = @X
END
EXEC LessonToStudentAge @X = ‘数据库‘

--(7)求X老师讲的每门课的学生平均成绩(P7)
--执行P7,X=程老师
GO
Create Proc LessonToAvage @X varchar(40)
AS
BEGIN
Select SC.Cno, AVG(Grade) AS 平均分
From Course, SC
Where Course.Cno = SC.Cno and
      Course.Tname = @X
Group by SC.Cno
END
Exec LessonToAvage @X = ‘程老师‘
时间: 2024-11-05 12:58:12

SQL语句(十九)——存储过程(练习)的相关文章

SQL 语句调用这个存储过程,生成顺序编码

一直很讨厌存储过程,没想到今天帮了我大忙啊,或许会因为今天让我慢慢喜欢上存储过程吧,不多说了,切入正题 在使用数据库的时候,难免要在使用过程中进行删除的操作,如果是使用int类型的字段,令其自增长,这是个最简单的办法,但是后果会有些不是你想要的!看下这个Demo: 1.建立这样的简单的表Test. 2.设置字段id的自增. 3.表添加数据 insert into Test(name) values('TestName') insert into Test(name) values('TestNa

LINQ to SQL语句(20)之存储过程

在我们编写程序中,往往需要一些存储过程,在LINQ to SQL中怎么使用呢?也许比原来的更简单些.下面我们以NORTHWND.MDF数据库中自带的几个存储过程来理解一下. 1.标量返回 在数据库中,有名为Customers Count By Region的存储过程.该存储过程返回顾客所在"WA"区域的数量. ALTER PROCEDURE [dbo].[NonRowset] (@param1 NVARCHAR(15)) AS BEGIN SET NOCOUNT ON; DECLARE

用SQL语句获得一个存储过程返回的表

定义一个存储过程如下: create proc [dbo].[test1] @id int as select 1 as id,'abc' as name union all select @id as id,'zzz' as name 返回两行数据.现在想用SQL语句来调用这个存储过程,并把他返回的表放入变量中.可以如下做: declare @table table(id int,name varchar(50))--定义表变量来存放存储过程返回的内容 insert into @table e

执行Sql语句,包括存储过程,可以动态生成返回实体

1 /// <summary> 2 /// 执行Sql语句 3 /// </summary> 4 public static class DatabaseExtend 5 { 6 /// <summary> 7 /// 执行任何SQL语句,通用所有的数据库(SQLServer,MySql,Oracle等),利用EMIT快速反射,得到动态类型实体,支持参数查询,防止sql注入. Created by ZhangQC 8 /// </summary> 9 ///

sql 语句随机时间存储过程

CREATE PROC [dbo].[Proc_GetRandomTime](@startTime datetime,@endTime datetime,@date datetime output ) AS Begin Declare @MS int Set @MS=DATEDIFF(ms,@startTime,@endTime) set @date=DateAdd(ms,Floor(@MS*rand()*5/8),@startTime) End

EF执行SQL语句和存储过程

EF虽然使用对象化的方式避免了我们写SQL,但是对于部分SQL,例如需要复杂的查询.执行插入和删除等可以操作,直接执行SQL可以减少减少性能上的损失. 使用EF执行SQL可以通过ExecuteSqlCommand()和SqlQuery()两个方法.这两个方法适用场景如下: ExecuteSqlCommand()不返回执行的结果,只返回受影响的行数,所以适用于数据库修改,数据创建,更新和删除等操作: SqlQuery()则会返回查询到的结果,并将结果保存在数据实体中: 使用ExecuteSqlCo

EF增删查改加执行存储过程和sql语句,多种方法汇总

1 ActionUrl c = new ActionUrl() { ActionName="test", RequestUrl="/123/123", SubTime=DateTime.Now }; 2 //增 3 using (EntityContext db = new EntityContext()) 4 { 5 6 /*方法1*/ 7 db.ActionUrls.Add(c); 8 db.SaveChanges(); 9 /*方法2*/ 10 db.Set&

LINQ to SQL语句Concat/Union/Intersect/Except--2017年2月22日

Concat/Union/Intersect/Except操作 适用场景:对两个集合的处理,例如追加.合并.取相同项.相交项等等. Concat(连接) 说明:连接不同的集合,不会自动过滤相同项:延迟. 1.简单形式: var q = ( from c in db.Customers select c.Phone ).Concat( from c in db.Customers select c.Fax ).Concat( from e in db.Employees select e.Home

SQL Server之 (四) ADO增删查改 登录demo 带参数的sql语句 插入自动返回行号

SQL Server之 (四) ADO增删查改  登录demo  带参数的sql语句  插入自动返回行号 自己学习笔记,转载请注明出处,谢谢!---酸菜 1.什么是ADO.NET ADO.NET是一组类库,这组类库可以让我们通过程序的方式访问数据库,并以各种方式操作存储在其中的数据; ADO.NET是基于.NET FrameWork,与.NET FrameWork类库的其余部分是高度集成的 2.连接数据库的步骤 ①创建连接字符串 Data Source=XXX-PC; Initial Catal

LINQ to SQL语句(1)之Where(抄的好)

Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句. Where操作包括3种形式,分别为简单形式.关系条件形式.First()形式.下面分别用实例举例下: 1.简单形式: 例如:使用where筛选在伦敦的客户 var q = from c in db.Customers where c.City == "London" select c; 再如:筛选1994 年或之后雇用的雇员: