题目:
根据不同条件对表进行查询操作,
1:employee表结构
字段名 字段说明 数据类型 主键 外键 非空 唯一 自增
e_no 员工编号 int(11) 是 否 是 是 否
e_name 员工姓名 varchar(50) 否 否 是 否 否
e_gender员工性别 char(2) 否 否 否 否 否
dept_no 部门编号 int(11) 否 是 是 否 否
e_job 职位 varchar(50) 否 否 是 否 否
e_salary 薪水 int(11) 否 否 是 否 否
hireDate 入职日期 date 否 否 是 否 否
2:dept表结构
字段名 字段说明 数据类型 主键 外键 非空 唯一 自增
dept_no 部门编号 int(11) 是 否 是 是 是
d_name 部门名称 varchar(50) 否 否 是 否 否
d_location 部门地址 varchar(100) 否 否 否 否 否
1:创建数据表employee和dept
2:将指定记录分别插入两个表中,执行过程如下:
向dept表中插入数据
INSERT INTO dept
VALUES (10, 'ACCOUNTING', 'ShangHai'),
(20, 'RESEARCH ', 'BeiJing '),
(30, 'SALES ', 'ShenZhen '),
(40, 'OPERATIONS ', 'FuJian ');
向employee表中插入数据
INSERT INTO employee
VALUES (1001, 'SMITH', 'm',20, 'CLERK',800,'2005-11-12'),
(1002, 'ALLEN', 'f',30, 'SALESMAN', 1600,'2003-05-12'),
(1003, 'WARD', 'f',30, 'SALESMAN', 1250,'2003-05-12'),
(1004, 'JONES', 'm',20, 'MANAGER', 2975,'1998-05-18'),
(1005, 'MARTIN', 'm',30, 'SALESMAN', 1250,'2001-06-12'),
(1006, 'BLAKE', 'f',30, 'MANAGER', 2850,'1997-02-15'),
(1007, 'CLARK', 'm',10, 'MANAGER', 2450,'2002-09-12'),
(1008, 'SCOTT', 'm',20, 'ANALYST', 3000,'2003-05-12'),
(1009, 'KING', 'f',10, 'PRESIDENT', 5000,'1995-01-01'),
(1010, 'TURNER', 'f',30, 'SALESMAN', 1500,'1997-10-12'),
(1011, 'ADAMS', 'm',20, 'CLERK', 1100,'1999-10-05'),
(1012, 'JAMES', 'm',30, 'CLERK', 950,'2008-06-15');
3:在employee表中,查询所有记录的e_no、e_name和e_salary字段值
4:在employee表中,查询dept_no等于10和20的所有记录。
5:在employee表中,查询工资范围在800到2500之间的员工信息。
6:在employee表中,查询部门编号为20的部门中的员工信息。
7:在employee表中,查询每个部门最高工资的员工信息。
8:查询员工BLAKE所在部门和部门所在地。
9:使用连接查询,查询所有员工的部门和部门信息。
10:在employee表中,计算每个部门各有多少名员工。
11:在employee表中,计算不同类型职工的总工资数。
12:在employee表中,计算不同部门的平均工工资。
13:在employee表中,查询工资低于1500的员工信息。
14:在employee表中,将查询记录先按部门编号由高到低排列,再按员工工资由高到低排列。
15:在employee表中,查询员工姓名以字母A或S开头的员工的信息。
16:在employee表中,查询到目前为止,工龄大于等于10年的员工信息。
答案:
1:创建数据表employee和dept
DROP TABLE IF EXISTS employee;
DROP TABLE IF EXISTS dept;
CREATE TABLE IF NOT EXISTS dept(
dept_no INT PRIMARY KEY,
d_name VARCHAR(50) NOT NULL,
d_location VARCHAR(100) NOT NULL
);
CREATE TABLE IF NOT EXISTS employee(
e_no INT PRIMARY KEY,
e_name VARCHAR(50) NOT NULL,
e_gender CHAR(2),
dept_no INT NOT NULL,
e_job VARCHAR(50) NOT NULL,
e_salary INT NOT NULL,
hireDate DATE NOT NULL,
CONSTRAINT fk_dept_no FOREIGN KEY employee(dept_no) REFERENCES dept(dept_no)
);
INSERT INTO dept
VALUES (10, 'ACCOUNTING', 'ShangHai'),
(20, 'RESEARCH ', 'BeiJing '),
(30, 'SALES ', 'ShenZhen '),
(40, 'OPERATIONS ', 'FuJian ');
INSERT INTO employee
VALUES (1001, 'SMITH', 'm',20, 'CLERK',800,'2005-11-12'),
(1002, 'ALLEN', 'f',30, 'SALESMAN', 1600,'2003-05-12'),
(1003, 'WARD', 'f',30, 'SALESMAN', 1250,'2003-05-12'),
(1004, 'JONES', 'm',20, 'MANAGER', 2975,'1998-05-18'),
(1005, 'MARTIN', 'm',30, 'SALESMAN', 1250,'2001-06-12'),
(1006, 'BLAKE', 'f',30, 'MANAGER', 2850,'1997-02-15'),
(1007, 'CLARK', 'm',10, 'MANAGER', 2450,'2002-09-12'),
(1008, 'SCOTT', 'm',20, 'ANALYST', 3000,'2003-05-12'),
(1009, 'KING', 'f',10, 'PRESIDENT', 5000,'1995-01-01'),
(1010, 'TURNER', 'f',30, 'SALESMAN', 1500,'1997-10-12'),
(1011, 'ADAMS', 'm',20, 'CLERK', 1100,'1999-10-05'),
(1012, 'JAMES', 'm',30, 'CLERK', 950,'2008-06-15');
-- 3.在employee表中,查询所有记录的e_no、e_name和e_salary字段值
SELECT e_no , e_name , e_salary FROM employee;
-- 4:在employee表中,查询dept_no等于10和20的所有记录
SELECT * FROM employee WHERE dept_no=10 OR dept_no=20;
-- 5:在employee表中,查询工资范围在800到2500之间的员工信息。
SELECT * FROM employee WHERE e_salary BETWEEN 800 AND 2500;
-- 6:在employee表中,查询部门编号为20的部门中的员工信息。
SELECT * FROM employee WHERE dept_no=20;
-- 7:在employee表中,查询每个部门最高工资的员工信息。
SELECT * FROM employee GROUP BY dept_no HAVING MAX(e_salary);
-- 8:查询员工BLAKE所在部门和部门所在地。
SELECT d_name , d_location FROM employee INNER JOIN dept
ON employee.`e_name`="BLAKE" AND employee.`dept_no`=dept.`dept_no`;
-- 9:使用连接查询,查询所有员工的部门和部门信息。
SELECT e_name , d_name FROM employee INNER JOIN dept
ON employee.`dept_no`=dept.`dept_no`;
-- 10:在employee表中,计算每个部门各有多少名员工。
SELECT d_name 部门,COUNT(e_name) 员工人数 FROM employee INNER JOIN dept
ON dept.`dept_no`=employee.`dept_no` GROUP BY dept.`dept_no`;
-- 11:在employee表中,计算不同类型职工的总工资数。
SELECT e_job 职工,SUM(e_salary) 总工资 FROM employee GROUP BY employee.`e_job`;
-- 12:在employee表中,计算不同部门的平均工工资。
SELECT d_name 部门,AVG(e_salary) 平均工资 FROM employee INNER JOIN dept
ON dept.`dept_no`=employee.`dept_no` GROUP BY employee.dept_no;
-- 13:在employee表中,查询工资低于1500的员工信息。
SELECT * FROM employee WHERE e_salary<1500;
-- 14:在employee表中,将查询记录先按部门编号由高到低排列,再按员工工资由高到低排列。
SELECT * FROM employee ORDER BY dept_no ASC , e_salary ASC;
-- 15:在employee表中,查询员工姓名以字母A或S开头的员工的信息。
SELECT * FROM employee WHERE e_name LIKE 's%' OR e_name LIKE 'A%';
-- 16:在employee表中,查询到目前为止,工龄大于等于10年的员工信息。
SELECT * FROM employee WHERE TIMESTAMPDIFF(YEAR,hireDate,CURRENT_DATE())>10;