mysql|多表连接查询

use test;
select * from students;
select * from courses;
select * from sc;
# 多表连接查询

-- 查询选修了【数据库原理】的计算机系的学生学号和姓名。 
select distinct students.Sno, Sname
	from students, courses, sc
		where Cname='数据库原理' and
			  sc.Sno=students.Sno and
              sc.Cno=courses.Cno;

select students.Sno, Sname
	from (students inner join sc on sc.Sno=students.Sno) inner join courses on courses.Cno=sc.Cno
		where Cname='数据库原理';
        
        
-- 查询每一门课的间接先行课(即先行课的先行课),显示课程编号和该门课程的间接先行课编号。
select first.Cno, second.PreCno
	from courses first, courses second
		where first.PreCno is not null and
			  second.PreCno is not null and
			  first.PreCno=second.Cno;
                
select cx.Cno, cy.PreCno
	from courses as cx, courses as cy
		where cx.PreCno=cy.Cno and
			  cy.PreCno is not null;
              
              
-- 查询学生的学号、姓名、选修课程的名称和成绩。
select students.Sno, Sname, Cname, Grade
	from students, courses, sc
		where students.Sno=sc.Sno and
              courses.Cno=sc.Cno;
              
select students.Sno, Sname, Cname, Grade
	from (students inner join sc on students.Sno=sc.Sno) inner join courses 
		on courses.Cno=sc.Cno;
        
        
-- 查询选修了课程的学生姓名。
select distinct Sname
	from students, sc
		where students.Sno=sc.Sno;
        
select distinct Sname
	from students inner join sc
		on students.Sno=sc.Sno;
			  
              
-- 查询所有学生的信息和所选修的课程, 要求显示学生的学号、姓名、课程号及课程名, 没有选课的同学对应的选课信息为空。 
-- 左连接
select students.Sno, Sname, courses.Cno, Cname
	from (students left join sc on students.Sno=sc.Sno) left join courses
		on courses.Cno=sc.Cno;
-- 右连接
select students.Sno, Sname, courses.Cno, Cname
	from courses right join (sc right join students on students.Sno=sc.Sno)
		on courses.Cno=sc.Cno;


-- 查询所有课程的课程编号、课程名称及选课人数,没有被选的课程选课人数显示为0。
select courses.Cno, Cname, count(distinct sc.Sno) as 选课人数
	from courses left join sc
		on sc.Cno=courses.Cno
			group by courses.Cno;
            

-- 列出所有学生所有可能的选修情况,要求显示学生的学号、姓名、课程号及课程名。 
select students.Sno, Sname, courses.Cno, Cname
	from students, courses
		order by students.Sno;
        
        
-- 查找计算机系的学生选修课程数大于2 的学生的姓名、 平均成绩和选课门数,并按平均成绩降序排列。 
select Sname, avg(Grade) as 平均成绩, count(sc.Cno) as 选课门数
	from students, sc
		where students.Sno=sc.Sno and Sdept='计算机'
			group by Sname
				Having count(sc.Cno)
					order by avg(Grade) desc;
一、实验目的 1.掌握SQL Server 2005的安装。 2.掌握SQL Server Management Studio的启动和使用。 3.掌握SQL Server 2005服务器的配置和注册。 4.掌握SQL Server 2005查询的基本使用。 5.掌握应用SQL Server Management Studio创建数据库的方法。 6.掌握应用SQL Server Management Studio修改和查看数据库的方法。 7.掌握应用SQL Server Management Studio删除数据库的方法。 8.掌握应用Transact-SQL语句创建数据库的方法。 9.掌握应用Transact-SQL修改和查看数据库的方法。 10.掌握通过Transact-SQL删除数据库的方法。 11.掌握SQL Server 2005数据库和操作系统物理文件的关系。 12.掌握数据库的分离和附加方法。 二、实验内容 1.完成SQL Server 2005开发版的安装。 提示:若计算机系统中已经安装有SQL Server 2005系统,则在安装时需要选择安装命名实例。安装过程中身份验证模式选择“混合模式”并设置sa账户的密码。 2.利用SQL Server配置管理器启动、停止SQL Server服务(包括默认实例和命名实例),配置SQL Server服务为自动启动。 3.利用SQL Server配置管理器配置进行SQL Server 2005网络配置,启用默认实例和命名实例的TCP/IP协议。 4.利用SQL Server外围配置器配置数据库引擎的服务及远程连接,设置为“本地连接和远程连接”,选择“同时使用TCP/IP和named pipes”。 5.利用SQL Server Management Studio注册安装的命名实例。 6.利用SQL Server Management Studio注册远程服务器。 提示:注册远程服务器时需要使用混合验证模式,利用sa账户和密码登录远程服务器。 7.启动SQL Server Management Studio,连接到服务器。新建一个查询,在其中输入如下代码: DECLARE @position int, @string char(5) SET @position = 1 SET @string = 'China' WHILE @position <= DATALENGTH(@string) BEGIN SELECT SUBSTRING(@string, @position, 1) 字符, ASCII(SUBSTRING(@string, @position, 1)) ASCII码 SET @position = @position + 1 END
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值