SQLServer 实验一 单表查询

在订单数据库中,完成如下的查询:

(1)查询员工的姓名、职务和薪水。

select employeeName,headShip,salary

from Employee

(2)查询名字中含有“有限”的客户名称和所在地。

select CustomerName,address

from Customer

where CustomerName like '%有限%'

(3)查询出姓“张”并且姓名的最后一个字为“梅”的员工。

select *

from employee

where employeeName like '张%梅'

(4)查询住址中含有“上海”或“南昌”的女员工,并显示其姓名、所属部门、职称、住址、出生日期和性别,其中如果出生日期为空,显示“不详”,否则按格式“yyyy-mm-dd”显示,性别用“男”和“女”显示。

select employeeName,department,headship,address,

isnull(convert(char(10),birthday,120),'不详') birthday,

sex= Case sex

                      when 'M'then '男'

                      when 'F'then '女'

                   end

from   employee

where  address like'%上海%' or address like '%南昌%' and sex='F'

(5)查询出职务为“职员”或职务为“科长”的女员工的信息。

select *

from employee

where (headship='职员' or headship='科长') and sex='F'

(6)选取编号不在C20050001~C20050004之间的客户编号、客户名称、客户地址。

select CustomerNo,CustomerName,address

from Customer

where CustomerNo not between 'C20050001' and 'C20050004'

(7) 在表OrderMaster中挑出销售金额大于等于5000元的订单。

先统计订单主表中的订单金额,使用命令:

update OrderMaster set orderSum=sum2

from OrderMaster a,(select orderNo,sum(quantity*price) sum2

                       from OrderDetail

                       group by orderNo) b

where a.orderNo=b.orderNo

再使用命令:

select *

from OrderMaster

where orderSum>=5000

(8) 在订单主表中选取订单金额最高的前10%的订单数据。

select top 10 percent orderNo

from OrderMaster

order by orderSum

(9) 计算出一共销售了几种商品。

select count(distinct productNo)

from OrderDetail

(10) 计算OrderDetail表中每种商品的销售数量、平均销售单价和总销售金额,并且依据销售金额由大到小排序输出。

select productNo,sum(quantity) 销售数量,

         sum(quantity*price)/sum(quantity) 平均销售单价,

         sum(quantity*price) 总销售金额

from OrderDetail

group by productNo

order by sum(quantity*price) desc

(11) 按客户编号统计每个客户2008年2月的订单总金额。

select customerNo,sum(orderSum) 订单总金额     

from OrderMaster

where year(orderDate)=2008 and month(orderDate)=2

group by customerNo

(12) 统计至少销售了10件以上的商品编号和销售数量。

select productNo,sum(quantity)

from OrderDetail

group by productNo

having sum(quantity)>10

(13) 统计在业务科工作且在1973年或1967年出生的员工人数和平均工资。

select count(*) 人数,avg(salary) 平均工资

from Employee

where department='业务科' and

           (year(birthday)=1973 or year(birthday)=1967)

(14) 实验问题:

① 给出SQL语句实现分组聚集操作的执行过程。

 答:1,首先执行FROM语句,查找到各表数据

2,其次执行WHERE语句,对数据进行筛选以及表与表的连接

3,然后执行GROUP BY语句,将数据划分组

4,使用聚集函数进行计算

5,使用HAVING语句进行筛选分组

② WHERE和HAVING子句都是用于指定查询条件的,请给出你对这两个子句的理解,用实例说明。

答:WHERE子句:作用于整个查询对象,对元组进行过滤,不可以和函数一起用。

HAVING子句:仅作用于分组,对分组进行过滤。必须与GROUP BY配合使用。

举例:

WHERE:(1) 查询所有业务部门的员工姓名、职称、薪水。

select employeeName,headShip,salary

from employee

where department='业务科'

HAVING:查询最高分在80以上的每个同学的平均分和最高分

select studentNo,avg(score) 平均分,max(score) 最高分

from score

group by studentNo

having max(score)>=80

③ 在分组聚集操作中,为什么在查询列中,除了集聚函数运算,其它表达式必须包含在GROUP BY子句中。

答:如果查询列除集聚函数外的表达式不包含在GROUP BY子句中,则聚合没有意义,如在订单数据库中,查询每个客户的客户编号、订单编号和订单总额

select customerNo,orderNo,sum(orderSum)

from OrderMaster

group by customerNo

该语句其语义不明确,因为一个客户有多张订单,按客户分组求和,意味着求该客户的总订单金额,而在查询列中还包含了订单编号,这个总金额应该放在那张订单中?系统无法确定。

④ 分析条件BETWEEN ... AND、AND、OR等关键字的使用方法。

答:BETWEEN ... AND是范围查询,可用于查询属性值在某一个范围内的元组,NOT BETWEEN ….AND 可用于查询属性值不在某个范围内的元组,BETWEEN后是属性的下限值,AND后是属性的上限值。

AND、OR是逻辑查询,AND实现逻辑与运算,要注意的是在逻辑运算中,不可以对同一个属性进行逻辑“与”的等值运算OR实现逻辑或运算。

用BETWEEN…..AND能实现的查询,也可以用AND来达到。同样,用NOT BETWEEN…AND能实现的查询,也可以用OR来实现。

⑤ 请总结SQL语句中的单表查询语句的使用方法。

 答:⒈查询所有列

SELECT *  FROM [表名]

2.查询指定列

SELECT [字段列表] FROM  [表名]

3. 消除重复元组:

SELECT  Distinct [字段列表] FROM  [表名]

4.查询经过计算的列

SELECT 【字段及字段表达式】   FROM  【表名】

5. 指定查询结果的查询

SELECT TOP n [PERCENT]  【字段列表】  FROM  【表名】

6.给属性取别名

①:SELECT 【字段名】1 as ''A''    FROM  【表名】
②:SELECT  "A"=字段名1   FROM 【表名】
③:SELECT 字段名1 "A"    FROM   【表名】

7.选择查询

SELECT 【字段名列表】 FROM  【表名】  WHERE  【条件表达式】

条件表达式运算符:
比较运算:=,<,<=,>,>=,!<,!>,!=,<>  逻辑查询:or,AND,not
范围查询:between… AND,not between …AND
集合查询:IN,not IN       字符匹配查询:ike,not LIKE
空值查询:is null,is not null

8.排序查询

SELECT 【字段名1】,【字段名2】   FROM 【表名】 

WHERE  【条件表达式】 

ORDER  BY  【字段表达式1】,【字段表达式2】 [ASC][DESC]

9.分组查询

①SELECT 字段名列表 FROM 表名 [WHERE 条件表达式]

GROUP BY 字段名
          ②SELECT 字段名列表 FROM 表名 [WHERE条件表达式]

GROUP BY  字段名 HAVING  筛选表达式

10.聚合查询

SELECT count([ALL| DISTINCT]{*|字段名列表}) FROM  表名 

[WHERE  条件表达式]

SELECT sum| avg| max| min ([ALL| DISTINCT]<字段名列表>) 

FROM 表名

[WHERE 条件表达式]

  • 18
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,以下是一个数据库系统 SQL Server 实验单表查询实验结果分析。 单表查询实验通常旨在通过 SQL 语句查询单个表格中的数据,并对查询结果进行分析和解释。在 SQL Server 中,可以使用 SELECT 语句来进行单表查询,例如: ``` SELECT * FROM tableName; ``` 这个语句将检索表格中的所有数据,并将其返回到查询结果中。 在单表查询实验中,你可以执行多种类型的查询,例如: 1. 简单查询:使用基本的 SELECT 语句查询表格中的数据。例如: ``` SELECT firstName, lastName FROM employees; ``` 这个查询将返回表格中所有员工的名字和姓氏。 2. 条件查询:使用 WHERE 子句过滤表格中的数据。例如: ``` SELECT * FROM employees WHERE department = 'Sales'; ``` 这个查询将返回所有在销售部门工作的员工的信息。 3. 聚合查询:使用聚合函数(如 COUNT、AVG、MAX、MIN 和 SUM)对表格中的数据进行计算。例如: ``` SELECT COUNT(*) FROM employees; ``` 这个查询将返回表格中员工的数。 4. 排序查询:使用 ORDER BY 子句对查询结果进行排序。例如: ``` SELECT * FROM employees ORDER BY hireDate DESC; ``` 这个查询将返回按照入职日期降序排列的所有员工信息。 在分析单表查询实验结果时,你需要考虑以下因素: 1. 查询语句的正确性:确保查询语句正确无误,并且可以返回你所期望的结果。 2. 查询结果的准确性:分析查询结果,确保其包含完整、准确的数据。 3. 查询效率:评估查询语句的执行效率,尤其是对大型数据集进行查询时。 4. 数据库性能:分析查询数据库性能的影响,例如查询语句是否会锁定表格或影响其他查询的执行。 通过对这些因素进行分析,你可以更好地理解单表查询实验的结果,并对数据库系统的性能和优化提出建议。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Water plum

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

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

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

打赏作者

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

抵扣说明:

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

余额充值