一、建库建表
a.建立一个公司数据库(gongsi)
CREATE DATABASE gongsi;
b.建立一张部门表(部门编号b_id,部门名称b_name) ,
其中b_id为主键,自增长,b_name不允许为空
CREATE TABLE departments(
b_id INT(20) auto_increment,
b_name CHAR(20) NOT NULL,
PRIMARY KEY (b_id)
);
c.建立一张员工表(员工编号y_id,姓名y_name,性别y_sex,年龄y_age,住址y_address,部门编号b_id),
其中y_id为主键自增长。
住址默认为’不详’
b_id依赖于部门表的b_id
CREATE TABLE employees(
y_id INT(6) PRIMARY KEY auto_increment,
y_name CHAR(6) NOT NULL,
y_sex CHAR(2),
y_age CHAR(2),
y_address VARCHAR(20) NOT NULL DEFAULT '不详',
b_id INT,
FOREIGN KEY (b_id)
REFERENCES departments(b_id)
);
二、数据插入
往每个数据表内至少写入三条数据,注意数据的合理性和约束
INSERT INTO departments VALUES
('1', '财务部'),
('2', '人力资源部'),
('3', '经理办公室'),
('4', '研发部'),
('5', '市场部'),
('6', '人事部'),
('7', '后勤部');
INSERT INTO employees VALUES
('000001','王林','1','28','中山路32-1-508','2'),
('010008','伍容华','1','23','北京东路100-2','3'),
('020010','王向容','1','22','四牌楼10-0-108','4'),
('020018','李丽','0','26','中山东路102-2','1'),
('102201','刘明','1','23','虎踞路100-2','2'),
('102208','朱俊','1','32','牌楼巷5-3-106','2'),
('108991','钟敏','0','24','中山路10-3-105','3'),
('111006','张石兵','1','31','解放路34-1-203','1'),
('102221','刘红','0','28','虎龙路1-2','6'),
('102101','罗敏','0','25','虎龙路1-5','6'),
('100101','张三','1','30','五元路1-1102','5'),
('105208','朱娟','0','32','五楼巷5-3-186','6'),
('101501','先星星','0','50','洪江路44-5','7'),
('105508','史顿','1','62','东方路54-6','7');
三、查询题目
1、查询年龄在25至30岁之间的男员工的姓名和住址。
SELECT y_name,y_address FROM employees
WHERE y_age BETWEEN 20 AND 30 AND y_sex='1';
2、查询财务部所有40岁以下男员工的所有信息
SELECT * FROM employees,departments WHERE y_age<40
AND y_sex='1' AND departments.b_name='财务部';
3、查询人事部年龄最大的女员工姓名
SELECT y_name FROM employees,departments
WHERE y_age=(SELECT MAX(y_age) FROM employees,departments
WHERE departments.b_name='人事部' AND y_sex='0'
AND departments.b_id=employees.b_id)
AND departments.b_id=employees.b_id AND y_sex='0';
4、2号新到一名员工,已知姓名,性别,年龄,将此员工加入到员工表
INSERT INTO employees VALUES
('000401','王蒙','0','27','中林路32-2-508','4');
5、在员工表中,将人事部年龄大于30岁的女同事,调到后勤部
UPDATE employees SET
b_id = (SELECT b_id FROM departments WHERE b_name = '后勤部')
WHERE(y_age >30 AND y_sex = '0'AND
b_id = (SELECT b_id FROM departments WHERE b_name = '人事部'));
6:查询每个部门年龄最大的员工,显示部门名字和年龄。
SELECT b_name 部门名称,y_name 姓名,MAX(y_age) 年龄 FROM departments,employees WHERE departments.b_id=employees.b_id GROUP BY b_name;
7:查询每个部门各有多少人,显示部门名字和人数,按人数倒序,如果人数相同,按部门编号正序。
SELECT b_name 部门名称,COUNT(*) 人数
FROM departments,employees WHERE departments.b_id=employees.b_id
GROUP BY employees.b_id
ORDER BY COUNT(*) DESC,employees.b_id;
8:将张三的的名字改为李四,并调到财务部。
UPDATE employees SET y_name='李四',
b_id=(SELECT b_id FROM departments WHERE b_name='财务部')
WHERE y_name='张三' ;
9:将后勤部年龄大于60岁的员工删除。
DELETE FROM employees WHERE y_age>60
AND b_id=(SELECT b_id FROM departments WHERE b_name='后勤部');