计算机的同学们,我这份是计试的实验报告,可能和你们的实验内容不一样


第一次实验无需代码,第三次实验只用navicat点点按钮。

四次实验代码及报告下载:

链接: https://pan.baidu.com/s/13UwgODXT6oHqr5lyxmlYsw 提取码: uqga


实验要求:

(实验1)

根据给定的需求说明,以ERWIN 7.1 为工具完成以下数据库建模操作:

1) 完成数据库概念模型设计,绘制ER(IDFE1X)模式图。(具体题目见数据库建模实验(上).doc)

2) 完成数据库逻辑模型设计,生成相关的SQL建表语句。

3) 提交以下数据库设计文档:

a. ERWIN数据模型文件(即.erwin文件);

b. 由ERWIN生成的SQL建表语句文件(即.DDL文件)。


(实验2)

在MySQL样本数据库上完成下列查询:
(1)    查询每个部门(departments)的编号(dept_no),名称(dept_name),在该部门工作过的雇员(employees)人数,最低工资(salary),平均工资,最高工资及工资总额;
(2)    查询每个部门(departments)的编号(dept_no),名称(dept_name),及各个时间段(from_date,to_date)担任该部门经理(dept_manager)的雇员的编号(emp_no)和姓名(first_name+last_name),并按时间段先后显式;
(3)    查询每位雇员的编号(emp_no),姓名(first_name+last_name),及各个时间段(from_date,end_data)的工资额(salary),并按时间段先后显式;
(4)    查询每位雇员的编号(emp_no),姓名(first_name+last_name),及各个时间段(from_date,end_data)的工作部门名称(dept_name),并按时间段先后显式;
(5)    查询每位雇员的编号(emp_no),姓名(first_name+last_name),及任职过的部门数;
(6)    查询每位雇员的编号(emp_no),姓名(first_name+last_name),及各个时间段(from_date,end_data)担任的职务(title),并按时间段先后显式;
(7)    查询担任每种职务(title)的雇员人数;
(8)    查询每个部门中担任每种职务(title)的雇员人数;
(9)    查询每位雇员的编号(emp_no),姓名(first_name+last_name),及工资额最高的时间段(from_date,end_data)及其工资额;
(10)    查询所有曾经担任过部门经理(dept_manager)的雇员的编号(emp_no)和姓名(first_name+last_name);
(11)    按时间段(from_date,end_data)先后列出每个部门(departments)的编号(dept_no),名称(dept_name),及其经理的姓名(first_name+last_name);
(12)    查询所有曾经在‘Development’工作过雇员的编号(emp_no),姓名(first_name+last_name),及时间段(from_date,end_data);
(13)    查询曾经在所有部门都工作过的雇员的编号(emp_no),姓名(first_name+last_name);
(14)    在dept_emp表中插入适当数据使得至少3个以上雇员满足上一题的查询要求。

请写出上述每一个查询的SQL语句并将执行结果输出到文件results.txt中。


(实验3)

使用SQL EXPLAIN工具(具体方法见:MySQL 性能优化神器 Explain 使用分析)对上一题中的每一条SQL语句进行分析,生成相应的查询执行计划并将查询执行计划保存到文件sql_explians.txt中。

使用SQL EXPLAIN工具(具体方法见:MySQL 性能优化神器 Explain 使用分析)对下列SQL查询语句进行分析,判断哪些索引将可以对下列查询产生加速作用,并通过实验进行验证。
SELECT TITLE,DEPT_NAME,GENDER, COUNT(DISTINCT E.EMP_NO)
FROM DEPARTMENTS D,DEPT_EMP DE,EMPLOYEES E,SALARIES S,TITLES T
WHERE D.DEPT_NO=DE.DEPT_NO AND DE.EMP_NO=E.EMP_NO AND 
E.EMP_NO=S.EMP_NO AND E.EMP_NO=T.EMP_NO
GROUP BY  TITLE,DEPT_NAME,GENDER
ORDER BY  TITLE,DEPT_NAME,GENDER;
在红色上的列建索引
比较速度:
1.不建索引
2.建索引
给出实验过程和结果。


(实验4)

嵌入式实验:
题目:
求身处两个或两个以上部门的员工信息(需要包含emp_np、first_name、emp_no_leader、dept_manager),并利用代码在mysql中创建一个新表并将结果输出进去(注:只需要保存多个部门中的第一个及多个领导中的第一个),并且要求代码运行耗时和时间复杂度尽可能的低。
要求:
任何操作都必须利用代码完成(需要利用嵌入式sql读取数据、建表、输出数据)
提示:
需要employees表(姓名)、dept_emp(工号、两个部门、及部门名称)、dept_manager(领导名称)
从dept_emp中找出在两个部门的人,进而确定他们的离职日期部门名称,依据他们的部门名称s去寻找领导名称s

编写上机实验报告。


第二次实验的代码:

2.
SELECT departments.dept_no, departments.dept_name, employees.emp_no,from_date, to_date, CONCAT(first_name,' ',last_name)
FROM departments, dept_manager, employees
WHERE departments.dept_no=dept_manager.dept_no AND dept_manager.emp_no=employees.emp_no
ORDER BY departments.dept_no
INTO OUTFILE 'F:/mysql_result/2.txt'3.
SELECT employees.emp_no, CONCAT(first_name,' ',last_name), from_date, to_date, salary
FROM salaries, employees
WHERE employees.emp_no=salaries.emp_no
ORDER BY employees.emp_no
INTO OUTFILE 'F:/mysql_result/3.txt'4.
SELECT employees.emp_no, CONCAT(first_name,' ',last_name), from_date, to_date, departments.dept_name
FROM departments, employees,dept_emp
WHERE employees.emp_no=dept_emp.emp_no AND dept_emp.dept_no=departments.dept_no
ORDER BY employees.emp_no,from_date
INTO OUTFILE 'F:/mysql_result/4.txt'5.
SELECT employees.emp_no, CONCAT(first_name,' ',last_name), COUNT(DISTINCT dept_emp.dept_no)
FROM employees,dept_emp
WHERE employees.emp_no=dept_emp.emp_no
GROUP BY employees.emp_no
INTO OUTFILE 'F:/mysql_result/5.txt'6.
SELECT employees.emp_no, CONCAT(first_name,' ',last_name), from_date,to_date,title
FROM employees,titles
WHERE employees.emp_no=titles.emp_no
ORDER BY employees.emp_no,from_date
INTO OUTFILE 'F:/mysql_result/6.txt'7.
SELECT title,COUNT(title)
FROM titles
#WHERE employees.emp_no=titles.emp_no
GROUP BY title
INTO OUTFILE 'F:/mysql_result/7.txt'8.
SELECT title,COUNT(DISTINCT titles.emp_no),dept_no
FROM titles,employees,dept_emp
WHERE employees.emp_no=titles.emp_no AND employees.emp_no=dept_emp.emp_no
GROUP BY dept_emp.dept_no,titles.title
ORDER BY dept_emp.dept_no
INTO OUTFILE 'F:/mysql_result/8.txt'9.
SELECT CONCAT(first_name,' ',last_name),MAX(salary),employees.emp_no,from_date,to_date
FROM salaries,employees
WHERE employees.emp_no=salaries.emp_no
GROUP BY employees.emp_no
ORDER BY from_date
INTO OUTFILE 'F:/mysql_result/9.txt'10.
SELECT DISTINCT(CONCAT(first_name,' ',last_name)),employees.emp_no
FROM dept_manager,employees
WHERE employees.emp_no=dept_manager.emp_no
#ORDER BY employees.emp_no
INTO OUTFILE 'F:/mysql_result/10.txt'11.
SELECT departments.dept_no,dept_name,CONCAT(first_name,' ',last_name)
FROM dept_manager,employees,departments
WHERE employees.emp_no=dept_manager.emp_no AND departments.dept_no=dept_manager.dept_no
#GROUP BY departments.dept_no
ORDER BY departments.dept_no,from_date
INTO OUTFILE 'F:/mysql_result/11.txt'12.
SELECT employees.emp_no,CONCAT(first_name,' ',last_name),from_date,to_date
FROM dept_emp,employees,departments
WHERE employees.emp_no=dept_emp.emp_no AND departments.dept_name='Development' AND departments.dept_no=dept_emp.dept_no
#GROUP BY departments.dept_no
ORDER BY departments.dept_no,from_date
INTO OUTFILE 'F:/mysql_result/12.txt'13.
SELECT DISTINCT(employees.emp_no),CONCAT(first_name,' ',last_name)
FROM dept_emp,employees
WHERE NOT EXISTS (
SELECT *
FROM departments
WHERE NOT EXISTS (
SELECT *
FROM dept_emp
WHERE departments.dept_no=dept_emp.dept_no AND dept_emp.emp_no=employees.emp_no
)
)
#GROUP BY departments.dept_no
ORDER BY employees.emp_no
INTO OUTFILE 'F:/mysql_result/13.txt'

第四次实验的代码:

import pymysql# 打开数据库连接
db = pymysql.connect(host='localhost',port=3306,user='root',password='',database='employees')# 使用cursor()方法获取操作游标
cursor = db.cursor()index=0
'''sql_create_database = CREATE TABLE if not exists `empWith2dep` (`id` int(11) NOT NULL AUTO_INCREMENT,`song_id` int(11) DEFAULT NULL,PRIMARY KEY (`id`))
'''mylist=[]# SQL 查询语句sql_employees = "SELECT emp_no,first_name \FROM employees"
sql_dept_emp = "SELECT emp_no,dept_no,from_date \FROM dept_emp"
'''
sql_departments = "SELECT * \FROM departments"
'''
sql_dept_manager = "SELECT dept_no,emp_no,from_date,to_date \FROM dept_manager"cursor.execute("DROP TABLE IF EXISTS RESULT")
sql_create = "CREATE TABLE result \(emp_no INT, \first_name CHAR(14), \dept_no CHAR(4), \manager_no INT)"cursor.execute(sql_create)
try:# 执行SQL语句cursor.execute(sql_employees)# 获取所有记录列表employees = cursor.fetchall()#同上 cursor.execute(sql_dept_emp)dept_emp = cursor.fetchall()cursor.execute(sql_dept_manager)dept_manager = cursor.fetchall()#遍历emloyees表for row in employees:emp_no = row[0]                   #记录员工编号数据和first_namefirst_name = row[1]'''debug代码if emp_no<=10010:print ("aaa")print("emp_no=",str(emp_no))print("index=",index)'''#防止越界#print("index=",index)if index>=len(dept_emp)-1:break#判断该员工是否满足曾在两个及以上的部门工作过if dept_emp[index][0]==dept_emp[index+1][0] and dept_emp[index][0]==emp_no:#print("bbb")#若有,记录员工在该部门的上岗日期和部门编号from_date=dept_emp[index][2]dept_no=dept_emp[index][1]manager_no=0#接下来遍历部门领导表,寻找该人的第一个领导for row1 in dept_manager:if row1[0]==dept_no and row1[2]<=from_date and row1[3]>=from_date:manager_no=row1[1]break#把结果写进mylistmylist.append([emp_no,first_name,dept_no,manager_no])sql_insert = "INSERT INTO result ( \emp_no,first_name,dept_no,manager_no) \VALUES ('%d','%s','%s','%d')" %(emp_no,first_name,dept_no,manager_no)cursor.execute(sql_insert)#db.commit()#更新index索引值,该值的只增不减保证了时间复杂度while index<len(dept_emp)-1 and dept_emp[index][0]==dept_emp[index+1][0]:#print("ccc")index+=1index+=1'''debug代码if emp_no<=10010:print("new index=",index)'''
#若出错,输出错误原因
except Exception as e:print ("Error: unable to fetch data")print (e)
#结果保存到文件
f=open("F:/mysql_result/result.txt","w")for line in mylist:f.write(str(line)+'\n')
db.commit()
# 关闭数据库连接
db.close()

西安交通大学数据库实验报告及代码相关推荐

  1. 西安交通大学matlab实验报告,matlab实验报告.doc

    matlab实验报告.doc MATLAB实验报告1MATLAB实验报告MATLAB实验报告2姓名学号0905130129专业班级通信工程1301班学院信息科学与工程学院指导老师陈科文.支国明.张金焕 ...

  2. mysql视图 实验报告_数据库实验报告(视图).doc

    数据库实验报告(视图) 实验报告(视图) 课程数据库原理与应用技术日期 2012 年 5月 17日学号实验项目 名 称有关视图的数据库操作姓名一.实验目的 本次试验就是要掌握基本的SQL Server ...

  3. oracle实验六杨艳华_工作报告之oracle数据库实验报告

    oracle 数据库实验报告 [篇一:大型数据库 oracle 10g 实验教程实验五实验报 告] 集美大学计算机工程学院实验报告 课程名称: oracle 10g 数据库基础教程 指导教师:杨艳华 ...

  4. mysql实验索引和视图_数据库实验报告 索引和视图

    数据库实验报告 索引和视图 (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 1西北师范大学计算机科学与工程学院学生实验报告西北师范大 ...

  5. c语言八数码A星算法代码解析,八数码问题c语言a星算法详细实验报告含代码解析...

    八数码问题c语言a星算法详细实验报告含代码解析 (13页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 一.实验内容和要求 八数码问题:在3 ...

  6. 数据库实验报告【学会使用企业管理器和查询分析器管理工具】

    Hello各位,本系列为数据库实验报告的合集,是我按照<数据库系统概论习题解析与实验指导第5版>中的实验指导写出来的所有报告.这个系列的每一份报告都是我滴原创于是想把自己的劳动成果发出来共 ...

  7. 超声波测距仪编程_北邮小学期pic单片机-超声波测距仪实验报告(附代码).docx

    北邮小学期pic单片机-超声波测距仪实验报告(附代码) 2014年小学期单片机设计实验报告 题目:超声波测距仪 目录 TOC \o "1-3" \h \z \u HYPERLINK ...

  8. oracle空间数据库实验报告,Oracle数据库实验报告六 PL/SQL基础

    Oracle数据库实验报告六 PL/SQL基础 -by QQC from BTBU [实验目的] PL/SQL的安装网上有很多教程这里就不做赘述了,如果后序需求大的话我再考虑做一期PL/SQL安装使用 ...

  9. 数据库实验报告【太原理工大学】

    数据库实验报告 温馨提示:仅供参考! 目录 数据库实验报告 一.交互式 SQL 语句的使用 1.数据定义 2.数据操作 3.数据查询操作 二.用户鉴别与数据控制 1.使用 SSMS 的图形界面创建用户 ...

最新文章

  1. 科大讯飞年报出炉,2018每天赚148万元,53%是政府补助
  2. Remoting Practice Sample
  3. 【NOIP2015模拟10.22】矩形
  4. SSM框架的搭建学习(1)---MyBatis的环境搭建
  5. 发年终奖了,创了新高
  6. OneNote 2013 快捷键
  7. Android 项目经验汇总:Fiddler的坑,证书无效
  8. WebEx 播放器下载
  9. 泰坦尼克 数据集_Kaggle-泰坦尼克-学习心得(高分容易,理解很难)——第1篇...
  10. java ppt模板_java循环ppt模板
  11. 基于Vue2和jsmind.js实现思维导图
  12. Win10禁用UAC(用户账户控制)
  13. java发送短信功能工具类及思路详解
  14. 手机拍的照片计算机内存不足怎么办,电脑内存不足怎么办
  15. 按键精灵 获取网页flash游戏 句柄 以360浏览器为例
  16. bigemap大地图软件功能对比分析
  17. python数据可视化—WordCloud词云图
  18. 【OpenStack】在OpenStack上搭建OpenStack UT环境
  19. 报错:ERROR: modpost: “__aeabi_unwind_cpp_pr1“ [/tmp/stapuOPLIl/stap_xxx.ko]undefined!
  20. 正态分布的参数含义μ,σ

热门文章

  1. Java几种生成synthetic方法的情况
  2. java 开源监控_推荐一款强大的国产开源监控系统!
  3. RabbitMQ学习笔记:Monitoring(监控)
  4. Jmeter命令测试执行
  5. 测试工具charles(花瓶)安装 以及简单的使用(2)
  6. 【中间件技术】第二部分 CORBA规范与中间件(1) CORBA基本原理
  7. Python 类的 6 种替代方案
  8. Update 多表链接报错 ORA-01427
  9. Mybatis一对多,分页问题及映射问题
  10. 微信迎来重量级挑战者:易信