【MySQL】综合建库建表、多表查询、外键实训

一、建库建表

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='后勤部');

猜你喜欢

转载自blog.csdn.net/m0_65198365/article/details/124483969
今日推荐