实验时间:10.9
目录
note:MySQL对于默认大小写不敏感,因此大小写是一样的。
MySQL命令行基本命令
note:MySQL默认对大小写不敏感,因此大小写是一样的。
MySQL每一条语句后面需要添加分号;结束
连接MySQL服务器
在命令行下输入mysql –h localhost –u root –p
当显示“Enter password:”时,输入密码mysql
note:按下win键,输入mysql,双击,也可以进入数据库。
查看MySQL中有哪些数据库
show databases; (注意SQL语句结尾的分号!)
使用数据库mysql(数据库名字,自选)
use mysql;
查看当前使用的数据库
select database();
查看数据库mysql中有哪些关系
show tables;
查看数据库mysql中关系的模式(以关系user为例)
describe user;
使用help命令来了解其他命令和变量类型等的含义
help;
help use;
使用SQL语言在数据库mysql上进行简单查询
select * from user;
select user, host, password from user;
select count(*) from user;
select count(*) as ucount from user;
删除数据库
drop database user
取消命令
若要取消一条正在编辑命令,键入\c并回车
断开MySQL服务器连接
quit 或 mysql> exit
MySQL关系数据库管理系统及SQL语言的使用
1 实验任务
创建关系数据库COMPANY,使用SQL语言完成如下查询:
1:参加了项目名为“SQL Project”的员工名字;
2:在“Research Department”工作且工资低于3000元的员工名字和地址;
3:没有参加项目编号为P1的项目的员工姓名;
4:由张红领导的工作人员的姓名和所在部门的名字;
5:至少参加了项目编号为P1和P2的项目的员工号;
6:参加了全部项目的员工号码和姓名;
7:员工平均工资低于3000元的部门名称;
8:至少参与了3个项目且工作总时间不超过8小时的员工名字;
9:每个部门的员工小时平均工资;
2 关系数据库COMPANY介绍
创建关系数据库COMPANY,其模式如下(下划线表示关系的主键):
关系EMPLOYEE (ENAME, ESSN, ADDRESS, SALARY, SUPERSSN, DNO)
ENAME: 工作人员名字,
ESSN: 工作人员身份证号,
ADDRESS: 工作人员住址,
SALARY: 工作人员工资,
SUPERSSN: 工作人员直接领导的身份证号,
DNO: 所属部门号
关系DEPARTMENT (DNAME, DNO, MGRSSN, MGRSTARTDATE)
DNAME: 部门名,
DNO: 部门号,
MGRSSN: 部门领导身份证号,
MGRSTARTDATE: 部门领导开始领导工作的日期
关系PROJECT (PNAME, PNO, PLOCATION, DNO)
PNAME: 工程项目名,
PNO: 工程项目号,
PLOCATION: 工程项目所在地,
DNO: 工程项目所属部门号
关系WORKS_ON (ESSN, PNO, HOURS)
ESSN: 工作人员身份证号,
PNO: 工程项目号,
HOURS: 工作小时数
3 数据准备
向创建的数据库COMPANY中添加数据,以备后续查询使用。
要求数据库中至少包含50个员工,5个部门,10项工程,并且必须包含“研发部”、编号为P1和P2的项目、名叫张红的员工。
Excel导入数据库
一直默认下一步,
点击开始,导入完成。
源码
/*命令行操作*/
show databases;
create database company;
show databases;
use company;
show tables;
/*创建各种表*/
CREATE TABLE DEPARTMENT(
DNAME varchar(25),
DNO varchar(15),
MGRSSN varchar(15),
MGRSTARTDATE date,
PRIMARY KEY(DNO)
);
CREATE TABLE EMPLOYEE(
ENAME varchar(15),
ESSN varchar(15),
ADDRESS varchar(15),
SALARY int,
SUPERSSN varchar(15),
DNO varchar(15),
PRIMARY KEY(ESSN),
FOREIGN KEY (dno) REFERENCES department(dno))
);
CREATE TABLE PROJECT(
PNAME varchar(15),
PNO varchar(15),
PLOCATION varchar(15),
DNO varchar(15),
PRIMARY KEY(PNO),
FOREIGN KEY (dno) REFERENCES department(dno))
);
CREATE TABLE WORKS_ON(
ESSN varchar(15),
PNO varchar(15),
HOURS int unsigned,
PRIMARY KEY(ESSN,PNO),
FOREIGN KEY (essn) REFERENCES employee(essn),
FOREIGN KEY (pno) REFERENCES project(pno))
);
/*查看关系*/
describe employee;
describe department;
describe project;
describe works_on;
/*导入数据后,查看数据*/
select *
from employee;
select *
from department;
select *
from project;
select *
from works_on;
/*1*/
select ename
from employee as e , project as p, works_on as w
where e.dno = p.dno and e.essn = w.essn and p.pno = w.pno and pname = 'SQL Project';
/*1*与上一个等价,但是natural join性能不如上面,建议上面的/
select ename
from employee natural join project natural join works_on
where pname = 'SQL Project';
/*2*/
select distinct ename, address
from employee as e, department as d
where e.dno = d.dno and dname = 'Research Department' and salary < 3000;
/*3*/
select distinct ename
from employee
where ename not in(
select distinct ename
from employee as e, works_on as w
where e.essn=w.essn and w.pno='P1');
/*4*/
select distinct ename, dname
from employee as e, department as d
where e.dno = d.dno and e.superssn in(
select essn
from employee
where ename = '张红');
/*5*/
select e1.essn
from employee as e1, works_on as w1
where e1.essn = w1.essn and w1.pno ='P1' and e1.essn in(
select e2.essn
from employee as e2, works_on as w2
where e2.essn = w2.essn and w2.pno ='P2');
/*6*/
select ename, e.essn
from employee as e, works_on as w
where e.essn = w.essn
group by e.essn
having count(pno) = (select count(*) from project);
/*7*/
select dname
from employee as e, department as d
where e.dno = d.dno
group by dname
having avg(salary) < 3000;
/*8*/
select ename
from employee as e, works_on as w
where e.essn = w.essn
group by ename
having count(pno)>= 3 and sum(hours)<=18;
/*9*/
select dno, sum(salary)/sum(hours)
from employee as e, works_on as w
where e.essn = w.essn
group by dno;