数据库实验二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西南石油大学实验报告
注意:在粘贴截图时请保留窗口完整标题,但只需保留关键界面,多余的空白界面请删除。
一、实验课时:4
二、实验目的
(1) 理解查询的概念和方法。
(2) 掌握SELECT语句在单表查询中的应用。
(3) 掌握SELECT语句在多表连接查询中的应用。
(4) 掌握SELECT语句在嵌套查询中的应用。
(5) 掌握SELECT语句在集合查询中的应用。
(6) 主要掌握使用“查询分析器”进行查询。
三、实验环境
(1) PC机。
(2) SQL Server 2008。
四、实验内容及步骤
以下查询均使用实验项目1中创建的COMPANY数据库。
1.单表查询
(1)基本查询。
Q0. 使用查询分析器从Employee表中检索出所有员工的姓名。
SQL文本:SELECT FNAME,LNAME FROM EMPLOYEE;
(以下所有题目都必须按照上图的要求截图)
Q1.从Employee表中检索出员工的FNAME、LNAME、SSN、BDATE、SALARY等字段,并分别加上“名”、“姓”、“社会保险号”、“生日”、“工资”的标题。员工的排序规则为:首先按工资的降序排列,然后按FNAME 的字母升序排列。
SQL文本:
SELECT Fname名,Lname姓,Ssn社会保险号,
Bdate生日,Salary工资
FROM EMPLOYEE
ORDER BY Salary DESC,Fname;
Q2.查询不重复的员工工资值。
SQL文本:
SELECT DISTINCT Salary
FROM EMPLOYEE;
Q3.查询没有直接上司的员工姓名。SQL文本:
SELECT Fname,Lname FROM EMPLOYEE WHERE Super_ssn IS NULL;
(2) 基于WHERE子句进行数据查询。
1)基于比较条件。
Q4. 从Employee表中查询出工资大于等于40000的员工资料。
SQL文本:
SELECT*
FROM EMPLOYEE
WHERE Salary>= 40000;
Q5.检索姓名为John B.Smith的员工的SSN、性别、出生日期和地址。
SQL文本:
SELECT Ssn,Sex,Bdate,Address
FROM EMPLOYEE
WHERE Fname='JOHN'AND Lname='SMITH'
AND Minit='B';
2)基于BETWEEN子句的查询。
Q6. 从Employee表中查询出1960年——1970年之间出生的员工资料。
SQL文本:
SELECT*FROM EMPLOYEE
WHERE Bdate BETWEEN'1960-01-01'
AND'1970-01-01';
3)基于IN子句的查询。
Q7.从Employee表中查询出部门号为4或者5的员工资料。
SQL文本:
SELECT*
FROM EMPLOYEE
WHERE Dno IN(4,5);
4)基于LIKE子句的查询。
Q8.从Employee表中查询出LNAME中含有字母o的员工资料。
SQL文本:
SELECT*
FROM EMPLOYEE
WHERE Lname LIKE'%O%';
Q9.检索居住在Houston的员工所有信息。
SQL文本:
SELECT*
FROM EMPLOYEE
WHERE Address LIKE'%Houston%';
(3) 使用计算列查询。
Q10.从Employee表中检索出员工的FNAME、LNAME、SSN、SALARY等字段(其中SALARY需换算成人民币,汇率假定为1美元=8人民币元),并分别加上“名”、“姓”、“社会保险号”、“人民币工资”的标题。
SQL文本:
SELECT Fname名,Lname姓,Ssn社会保险号,
Salary* 8 人民币工资
FROM EMPLOYEE;
2.多表连接查询(使用JOIN)
Q11.查询所有为Research部门工作的员工姓名及地址。
SELECT Fname,Lname,Address
FROM EMPLOYEE E
JOIN DEPARTMENT D
ON E.Dno=D.Dnumber
WHERE Dname='Research';
Q12.对于所有位于Stafford的项目,查询项目的编号、项目负责部门编号以及该部门经理的姓、地址、生日。
SQL文本:
SELECT E.Lname,E.Address,E.Bdate,P.Pnumber,P.Dnum FROM PROJECT P JOIN
DEPARTMENT D ON (P.Dnum=D.Dnumber)
JOIN EMPLOYEE E ON (D.Mgr_ssn=E.Ssn)
WHERE Plocation='Stafford';
Q13.查询有两个或以上家属的员工姓名(此题较难,若不能完成者可只查询出员工的SSN而不是姓名)。
SQL文本:
SELECT E.Fname,E.Lname
FROM EMPLOYEE E
JOIN DEPENDENT D
ON (D.Essn=E.Ssn)
GROUP BY D.Essn,E.Fname,E.Lname
HAVING COUNT(*)>= 2;