实验二 数据更新和简单查询

1. 实验目的

  1. 掌握运用Transact-SQL语句实现表的更新操作。
  2. 掌握运用Transact-SQL语句实现表的简单查询操作。

   包括:

(1)掌握SELECT子句以及WHERE子句的使用方法。

(2)学会应用ORDER BY子句。

(3)掌握5种基本的聚合函数。

(4)学会分组统计。

2.实验内容

  1. 熟悉SQL Server 查询分析器环境。
  2. 运用T-SQL语句对表中的数据进行插入、修改和删除操作。
  3. 运用Transact-SQL语句实现:

(1)SELECT子句的应用。

(2)WHERE子句的应用。

(3)ORDER BY子句的应用。

(4)聚合函数的应用。

(5)聚合操作与分组统计的应用。

3.实验步骤

根据实验一创建的数据库及基本表,运用SQL语句实现以下查询要求:

  1. 查询所有同学的基本信息,包括:学号s_no、班级号class_no、姓名s_name、性别s_sex、出生日期s_birthday。
SELECT [s_no]
      ,[class_no]
      ,[s_name]
      ,[s_sex]
      ,[s_birthday]
  FROM [study].[dbo].[Student]

  1. 查询所有同学,要求显示其学号s_no、姓名s_name。

SELECT [s_no]

      ,[s_name]

     FROM [study].[dbo].[Student]

  1. 查询所有男同学,要求显示其学号s_no、姓名s_name、出生日期s_birthday。

SELECT [s_no]

      ,[s_name]

      ,[s_sex]

      ,[s_birthday]

  FROM [study].[dbo].[student]

  WHERE [s_sex] =''

  1. 查询所有出生日期在“1980-01-01”前的女同学,要求显示其学号s_no、姓名s_name、性别s_sex、出生日期s_birthday。

select s_no,

      s_name,

      s_sex,

      s_birthday

from Student

where s_birthday>'1980-01-01'and s_sex=''

  1. 查询所有姓“李”的男同学,要求显示其学号s_no、姓名s_name、性别s_sex、出生日期s_birthday。

SELECT [s_no]

      ,[s_name]

      ,[s_sex]

      ,[s_birthday]

  FROM [study].[dbo].[student]

  WHERE s_sex=''AND s_name like'%'

  1. 查询所有姓名中含有“一”字的同学,要求显示其学号s_no、姓名s_name。

SELECT [s_no]

      ,[s_name]

  FROM [study].[dbo].[student]

  WHERE s_name like'%%'

  1. 查询所有职称不是“讲师”的教师,要求显示其教师号t_no、姓名t_name、职称t_title。

SELECT [t_no]

      ,[t_name]

  ,[t_title]

  FROM [study].[dbo].[teacher]

 WHERE t_title not like'讲师'

  1. 查询虽选修了课程,但未参加考试的所有同学,要求显示出这些同学的学号s_no。

SELECT [s_no]

  FROM [study].[dbo].[choice]

  WHERE score is null 

  and course_no is not null

  1. 查询所有考试不及格的同学,要求显示出这些同学的学号s_no、成绩score,并按成绩降序排列。

SELECT [s_no],[score]

  FROM [study].[dbo].[choice]

  WHERE score<60

  1. 查询出课程号为01001、02001、02003的所有课程,要求显示出课程号course_no、课程名称course_name。(要求用in运算符)。

SELECT [course_no],[course_name]

  FROM [study].[dbo].[course]

  WHERE course_no in (01001,02001,02003) 

  

  1. 查询所有在1970年出生的教师,要求显示其教师号t_no、姓名t_name、出生日期t_birthday。

SELECT [t_no]

      ,[t_name]

      ,[t_birthday]

  FROM [study].[dbo].[teacher]

  WHERE [t_birthday] between'1970-1-1'and'1970-12-31'

  1. 查询出各个课程号course_no及相应的选课人数。

SELECT [course_no]

      ,count(course_no)as 选修人数

  FROM [study].[dbo].[choice]

 GROUP BY course_no

  1. 查询出教授两门以上课程的教师号t_no。

SELECT [t_no] as 教授2门以上课程的教师号

  FROM [study].[dbo].[teaching]

 GROUP BY t_no

     having count(t_no)>=2

  1. 查询出选修了01001课程的学生平均分数、最低分数及最高分数。

select  avg(score) 平均分

,max(score) 最大分,

min(score) 最小分

from [study].[dbo].[choice]

where course_no=01001

  1. 查询1960年以后出生的,职称为讲师的教师的姓名t_name、出生日期t_birthday,并按出生日期升序排列。

select  t_name,t_birthday

from [study].[dbo].[teacher]

where t_birthday > '1959-12-31'

order by t_birthday

5.思考回答

  1.  HAVING短语与WHERE子句的区别:作用对象不同。有什么不同?

where子句与having短语的区别在于作用的对象不同

where:

作用于基本表或者是试图

表示的是个体存在的条件

是分组统计前对个体进行的筛选

where不能使用聚集函数

having:

是对于分组以后对统计量进行的判断条件

作用于组,从中选择满足条件的组

having可以使用聚集函数

where与having的执行顺序where > group by > having

  1. 集函数的作用对象在有无分组的SELECT语句中有什么不同?

集函数是用来对数据进行统计和计算的函数,通常用于在SELECT语句中进行聚合操作。集函数的作用对象在有无分组的SELECT语句中有以下不同:

1. 无分组的SELECT语句:在没有使用GROUP BY子句的SELECT语句中,集函数会对查询结果集中的所有行进行计算,并返回单个值作为结果。这样的语句常用于对整个数据集进行聚合操作,如求和、平均值、最大值、最小值等。例如:SELECT SUM(salary) FROM employees; 将返回所有员工的薪水总和。

2. 有分组的SELECT语句:在使用GROUP BY子句的SELECT语句中,集函数会根据GROUP BY子句指定的列对数据进行分组,然后对每个分组内的数据进行计算,并返回每个分组的结果。这样的语句常用于按照某个列的值进行分组统计或计算。

无分组的SELECT语句使用集函数对整个数据集进行计算,返回单个结果;有分组的SELECT语句使用集函数对每个分组内的数据进行计算,返回多个结果。

  1. 用户可以使用LIKENOT LIKE进行部分匹配查询(也称模糊查询),问:字符串中的通配符有哪些,举例说明如何使用。

SQL中,字符串模糊查询可以使用通配符进行匹配,常用的通配符有以下三种1. 百分号(%)通配符:表示任意字符出现任意次数(包括零次)。可以用来匹配任意长度的字符串。例如,使用 "SELECT * FROM students WHERE name LIKE '%son%';" 将查询出名字中包含 "son" 字符的所有学生记录,比如 "Johnson"、"Wilson"、"Jackson" 等。2. 下划线(_)通配符:表示任意单个字符的出现。可以用来匹配一个字符的位置。例如,使用 "SELECT * FROM students WHERE name LIKE '_oan';" 将查询出名字以 "o" 开头,后面接一个任意字符,然后是 "an" 的学生记录,比如 "Joan"、"Moan" 等。

3. 转义符(\):用于转义通配符本身的含义。例如,如果想要匹配一个包含 "%" 字符的字符串,可以使用 "SELECT * FROM students WHERE name LIKE '\%son';"。

需要注意的是,通配符只能在与LIKE关键字一起使用时起效。此外,不同数据库的通配符可能存在差异,可以根据具体数据库的文档来了解更多详细信息。

  

  • 33
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值