数据库:数据查询

1 实验目的

掌握SQL语言的数据查询语句,具体包括:
       SELECT语句的基本用法
       使用WHERE子句进行有条件的查询
       使用IN,NOT IN,BETWEEN等谓词查询
       利用LIKE子句实现模糊查询
       利用ORDER子句为结果排序
       用SQL Server的统计函数进行统计计算
       用GR0UP BY子句实现分组查询的方法
       连接查询的方法

2 实验任务

将学生成绩数据库(XSCJ)导入SQL SERVER 2012,并做如下查询:

       查询选修了课程的学生的学号;

       查询全体学生的姓名和出生年份,并将列别名改为XM和CSNF;

       查询年龄在18到20(包括18岁和20岁)之间学生的学号、姓名和系。

       查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。

       用LIKE查询课程名为DB_S程的课程号和学分。

       查所有有成绩的学生学号和课程号。

       查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄升序排列

       查询选修了课程的学生人数。

       计算1号课程的学生平均成绩。

       查询有3人以上(含3人)同学选修课程的课程号。

       查询1号课程的间接先修课。

       查询每个学生的学号、姓名、选修的课程名及成绩。

       找出每个学生等于他选修课程平均成绩的课程号。

拓展练习:将以下数据录入上次实验建立的BSXT数据库,并完成以下查询:

  1. 查询全体学生的学号和姓名和电话。
  2. 查询全体学生的基本情况。
  3. 查询带了毕业生的老师的教师号。
  4. 查询教师“朱龙”基本情况。
  5. 查询所有姓“王”同学的基本情况。
  6. 统计每种学历老师的人数。
  7. 查询1组老师所带毕业生的基本情况(包括学号,姓名,教师号,教师姓名,毕业设计题目)(注:1组老师只能带1组的学生)
  8. 查询所有学生的选题情况(包括没有选题的学生),包括学号,姓名,题目名称,教师名称。(注:要求老师的组号和学生的组号相一致.)

3 相关知识

       数据查询是数据库的核心操作。SQL提供了SELECT语句进行数据查询,该语句具有灵活的使用方式和丰富的功能。其一般格式为:

SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]……

FROM<表名或视图名>……|(<SELECT语句>)[AS]<别名>

[WHERE<条件表达式>][GROUP BY<列名1>][HAVING<条件表达式>]

[ORDER BY<列名2>[ASC|DESC]];

整个SELECT语句的含义是根据WHERE子句的条件表达式以FROM子句指定的基本表、视图或派生表中找出满足条件的元组,再按SELECT子句中的目标列表达式选出元组中的属性值形成结果表。

       如果有GROUP BY子句,则将结果按<列名1>的值进行分组,该属性列值相等的元组为一个组,通常会在每组中作用聚集函数。如果GROUP BY子句带HAVING短语,则只有满足指定条件的组才予以输出。如果有ORDER BY子句,则结果还要按<列名2>的值升序或降序排序。SELECT语句既可以完成简单的单表查询,也可以完成复杂的连接查询和嵌套查询。

       单表查询是指仅涉及一个表的查询,若一个查询同时涉及两个以上的表,则称之为连接查询。连接查询是关系数据库中最主要的查询,包括等值连接查询、自然连接查询、非等值连接查询、自身连接查询、外连接查询和复合条件连接查询等。

4 实验内容与实验结果

SELECT DISTINCT Sno
        FROM SC;
SELECT  Sname  XM , 2015-Sage  CSNF
FROM Student;
SELECT Sno, Sname,Sdept
FROM     Student
WHERE   Sage BETWEEN 18 AND 20;
SELECT Sname,Ssex
	FROM  Student
	WHERE Sdept IN ( 'IS','MA','CS' );
SELECT Cno,Ccredit
      FROM Course
      WHERE Cname LIKE '数据%' ESCAPE '\';
SELECT Sno,Cno
    FROM  SC
    WHERE  Grade IS NOT NULL;
SELECT  *
        FROM  Student
        ORDER BY Sdept,Sage DESC;
SELECT COUNT(DISTINCT Sno)
    FROM SC;
SELECT AVG(CAST(Grade as int))
        FROM SC
        WHERE Cno= 1;
SELECT Sno
     FROM  SC
     GROUP BY Sno
     HAVING  COUNT(*) >=3;
SELECT  FIRST.Cno,SECOND.Cpno
       FROM  Course  FIRST,Course  SECOND
      WHERE FIRST.Cpno = SECOND.Cno and FIRST.Cpno='1';
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
    FROM  Student  LEFT OUTER JOIN SC ON (Student.Sno=SC.Sno);
SELECT Sno, Cno
    FROM  SC  x
    WHERE Grade >=(SELECT AVG(CAST(Grade as int)) 
		                        FROM  SC y
                                   WHERE y.Sno=x.Sno);

SELECT Sno,Sname,Stel
FROM Student;
SELECT *
FROM Student;
SELECT DISTINCT Tno
FROM Topic;
SELECT *
FROM Teacher
WHERE Tname = '朱龙';
SELECT *
FROM Student
WHERE Sname LIKE '王%';
SELECT Tdegree,COUNT(*) as number
FROM Teacher
GROUP BY Tdegree;
SELECT Student.Sno,Sname,Teacher.Tname,Hname
FROM Student LEFT OUTER JOIN Topic ON(Student.Sno = Topic.Sno),Teacher
WHERE Teacher.Troup = '1' AND Student.Sgroup = Teacher.Troup AND Teacher.Tno = Topic.Tno;
SELECT Student.Sno,Sname,Hname,Tname
FROM Student LEFT OUTER JOIN (SELECT Hname,Tname,Sno,Troup
FROM Topic,Teacher
WHERE Topic.Tno = Teacher.Tno) TEMP ON(Student.Sno = TEMP.Sno)

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茜茜西西CeCe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值