实验5SQL语言Word文档格式.docx
《实验5SQL语言Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验5SQL语言Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
附加数据库对话框
点击
按钮,在随后出现的“浏览现有的文件”对话框中,找到并选择“eshop_Data.MDF”后,点击“确定”按钮,回到“附加数据库”对话框,点击“确定”按钮,出现图2所示的对话框即表示附加完成:
图2
附加完成对话框
2.本实验基于eshop数据库中如图3所示的四个数据表:
图3eshop数据库的表关系图
3.SELECT语句的语法如下所示:
SELECT[ALL|DISTINCT]选择列清单
[INTO[新表名]]
FROM{表名|视图名}[(优化提示)][[,{表名2|视图名2}[(优化提示)]
[WHERE子句]
[GROUPBY子句][HAVING子句]
[ORDERBY子句][COMPUTEBY子句]
四、实验步骤
打开查询分析器,在查询编辑窗口输入以下各SQL语句。
简单查询
查询产品表中的所有信息,SQL代码如下:
USEeshop
SELECT*FROM产品表
查询结果如图4所示。
查询职工的工号、姓名、性别和族别信息。
代码如下:
SELECT工号,姓名,性别,族别FROM职工表
条件查询
条件查询所使用的运算符大致有以下六种类型:
(1)比较操作符,如:
=、>
、<
、>
=、<
=、!
=、==、!
<
和!
>
(2)范围操作符,如:
[NOT]
BETWEEN…AND
(3)列表操作符,如:
IN和NOT
IN
(4)字符串操作符,如:
LIKE和NOTLIKE
(5)未知值,如:
ISNULL和ISNOTNULL
(6)逻辑操作符,如:
AND、OR和NOT
图4
产品表中的全部信息
查询产品表中单价在800元以上的产品详细信息,SQL代码如下:
SELECT*FROM产品表WHERE单价>
800
查询结果如图5所示。
图5
单价在800元以上的产品详细信息
查询产品表中订单数量在200~500之间的产品编号、产品名称和产品数量,
SQL代码如下:
SELECT产品编号,产品名称,订单数量FROM产品表
WHERE订单数量>
=200AND订单数量<
=500
或
WHERE订单数量between200AND500
查询结果如图6所示。
图6
订单数量在200~500之间的产品信息
使用通配符
SQLServer为字符串表达式提供了一种使用LIKE关键字和通配符进行模式匹配的方法。
通配符有:
(1)%代表任意字符串
(2)_
代表单个字符
(3)[]在某个指定范围
查询所有姓刘的职工信息。
SELECT*FROM职工表WHERE姓名LIKE'
刘%'
查询职工表中家庭住址为“河南”的职工详细信息,SQL代码如下:
SELECT*FROM职工表WHERE
家庭住址LIKE'
河南%'
查询姓名中第2个字为“丽”的职工。
SELECT工号,姓名FROM职工表WHERE姓名
LIKE'
_丽%'
查询结果如图7所示。
图7
姓名中第2个字为“丽”的职工
使用计算列
查询职工表中年龄大于28岁且性别为“男”的职工详细信息,SQL代码如下:
DATEDIFF(YY,出生日期,GETDATE())>
28
AND性别='
男'
查询各种产品的额定产值(额定产值仅与单价和订单数量有关,单位:
元),SQL代码如下:
select产品编号,产品名称,单价*订单数量额定产值from产品表
查询结果如图8所示。
图8
产品的额定产值(图中未列出全部产品)
排序输出
(1)ASC指定按递增顺序(此为默认值),从最低值到最高值对指定列中的值进行排序。
(2)DESC指定按递减顺序,从最高值到最低值对指定列中的值进行排序。
查询性别为“男”的职工详细信息,查询结果按基本工资降序排列,SQL代码如下:
SELECT*FROM职工表WHERE性别='
ORDERBY基本工资DESC
查询全体职工的工号、姓名、家庭住址和年龄(注意年龄的计算方法),并按家庭住址升序排列,住址相同的职工按年龄降序排列,SQL代码如下:
SELECT工号,姓名,家庭住址,YEAR(GETDATE())-YEAR(出生日期)年龄
FROM职工表ORDERBY家庭住址,出生日期
SELECT工号,姓名,家庭住址,DATEDIFF(YY,出生日期,GETDATE())年龄
查询结果如图9所示。
图9
家庭住址相同的职工按年龄降序排列(仅列出部分职工信息)
限定输出结果
(1)DISTINCT:
去除重复结果
(2)TOP:
返回指定记录行数
(3)PERCENT:
按比例显示记录行
从职工表中查询所有职工由哪几个民族构成。
SELECTDISTINCT族别FROM职工表
查询结果如图10所示。
图10
所有职工共来自六个民族
查询在生产“1-005”产品的职工中,产量位居前三名的职工。
SELECTtop3工号,生产数量FROM生产表where产品编号='
1-005'
orderby生产数量desc
查询结果如图11所示。
图11
生产“1-005”产品的职工中,产量位居前三名的职工
在生产“1-001”产品的职工中,按产量排序,前30%的职工将获得嘉奖。
查询可以获得嘉奖的职工编号。
SELECTtop30percent工号获得嘉奖的职工工号FROM生产表
WHERE产品编号='
1-001'
查询结果如图12所示。
图12
获得嘉奖的职工
使用汇总函数
查询所有产品的额定总产值(单位:
selectsum(单价*订单数量)额定总产值from产品表
查询参与生产’2-005’产品的总人数,SQL代码如下:
SELECTCOUNT(*)参与生产总人数FROM生产表WHERE产品编号='
2-005'
查询“1-005”产品的产量
SELECTsum(生产数量)产量FROM生产表where产品编号='
查询所有职工的基本工资的平均值,最高值和最低值,SQL代码如下:
SELECTAVG(基本工资)平均工资,MAX(基本工资)最高工资,MIN(基本工资)最低工资
FROM职工表
分组查询
借助汇总函数,根据查询定义的分组把数据分别按组进行汇总。
HAVING子句则进一步规定了结果集必须根据指定的条件来产生。
从职工表中统计各民族职工的人数。
SELECT族别,COUNT(族别)AS职工人数FROM职工表GROUPBY族别
查询各生产车间的产值定额(单位:
select生产部门编号,sum(单价*订单数量)产值定额
from产品表groupby生产部门编号
查询产量位列前3名的产品编号和生产数量,SQL代码如下:
SELECTtop3产品编号,sum(生产数量)总产量FROM生产表
groupby产品编号
ORDERBYsum(生产数量)desc
查询各类产品的最高生产数量,要求输出最高数量大于2800的产品编号和最高数量,并按最高数量升序排序,SQL代码如下:
SELECT产品编号,SUM(生产数量)生产数量FROM生产表
GROUPBY产品编号HAVINGSUM(生产数量)>
2800ORDERBYSUM(生产数量)DESC
多表连接查询
SQLServer允许用连接方式从多个表中查询数据。
连接可以定义为同时支持多表查询的一种操作。
在连接条件中引用某一列时,应该在列名前加上它所属的表名或表的别名。