mysql查询测试(2018.09.30)

USE tst;

-- 部门表
CREATE TABLE tb_depart
(
 b_id INT PRIMARY KEY AUTO_INCREMENT,
 b_name VARCHAR(20) NOT NULL
);

INSERT INTO tb_depart(b_name) VALUES
('人事部'),
('技术部'),
('后勤部'),
('财务部');



-- 员工表
CREATE TABLE tb_staff
(
 y_id INT PRIMARY KEY AUTO_INCREMENT,
 y_name VARCHAR(20),
 y_sex VARCHAR(2),
 y_age INT,
 y_address VARCHAR(50) DEFAULT '不详',
 b_id INT ,
 CONSTRAINT fk_depart FOREIGN KEY (b_id) REFERENCES tb_depart (b_id)
);

INSERT INTO tb_staff(y_name, y_sex, y_age, y_address, b_id) VALUES
('张三1','男',19,'湖南株洲',03),
('张三2','男',29,'湖南株洲',03),
('张三3','男',23,'湖南株洲',01),
('张三4','男',19,'湖南株洲',02),
('张三5','男',35,'湖南株洲',01),
('张三6','男',25,'湖南株洲',02),
('张三7','男',19,'湖南株洲',03),
('张三8','男',19,'湖南株洲',02),
('张三9','男',19,'湖南株洲',02),
('张三10','男',26,'湖南株洲',01),
('张三11','男',19,'湖南株洲',02),
('张三12','男',19,'湖南株洲',02),
('张三13','男',19,'湖南株洲',02),
('张三14','女',19,'湖南株洲',02),
('张三15','男',20,'湖南株洲',02),
('张三16','男',19,'湖南株洲',02),
('张三17','男',19,'湖南株洲',02),
('李四1','女',34,'湖南株洲',01),
('李四2','女',34,'湖南株洲',01),
('李四3','男',34,'湖南株洲',01),
('李四4','女',29,'湖南株洲',01),
('李四5','女',34,'湖南株洲',01),
('李四6','男',26,'湖南株洲',01),
('李四7','女',34,'湖南株洲',01),
('李四8','女',28,'湖南株洲',01),
('李四9','女',34,'湖南株洲',01),
('李四10','女',34,'湖南株洲',01),
('李四11','女',34,'湖南株洲',01),
('王五1','男',22,'湖南株洲',01),
('王五2','男',34,'湖南株洲',01),
('王五3','男',22,'湖南株洲',03),
('王五4','男',22,'湖南株洲',03),
('王五5','女',22,'湖南株洲',03),
('王五6','男',22,'湖南株洲',03),
('王五7','男',23,'湖南株洲',03),
('王五8','男',38,'湖南株洲',03),
('王五9','男',34,'湖南株洲',03),
('小二1','女',28,'湖南株洲',04),
('小二2','男',28,'湖南株洲',04),
('小二3','男',28,'湖南株洲',04),
('小二4','女',25,'湖南株洲',04),
('小二5','男',28,'湖南株洲',04),
('小二6','女',20,'湖南株洲',04),
('小二7','男',28,'湖南株洲',04),
('小二8','男',18,'湖南株洲',04);


-- 1、查询年龄在25至30岁之间的男员工的姓名和住址。
SELECT y_name 姓名, y_address 住址 
FROM tb_staff 
WHERE y_sex = '男' AND y_age 
BETWEEN 25 AND 30;

-- 2、在员工表中,将人事部年龄大于30岁的女同事,调到后勤部。
UPDATE tb_staff 
SET b_id = 
(
SELECT c.b_id 
FROM tb_depart c 
WHERE c.b_name = '后勤部'
) 
WHERE y_id IN 
(
SELECT a.id 
FROM(
(
SELECT y_id id 
FROM tb_depart a, tb_staff b 
WHERE a.b_id = b.b_id AND b_name = '人事部' AND y_sex = '女' AND y_age > 30
) a
)
);

-- 3、查询每个部门年龄最大的员工,显示部门名字和年龄。
SELECT b_name 部门名字, MAX(y_age) 年龄 
FROM tb_depart a, tb_staff b 
WHERE a.b_id = b.b_id 
GROUP BY b.b_id;

SELECT * FROM tb_staff WHERE b_id = 04 ORDER BY y_age DESC;

-- 4、查询每个部门各有多少人,显示部门名字和人数,按人数倒序,如果人数相同,按部门编号正序。
SELECT b_name 部门名, COUNT(*) 人数 
FROM tb_depart a, tb_staff b 
WHERE a.b_id = b.b_id 
GROUP BY b.b_id 
ORDER BY COUNT(*) DESC, b.b_id;

-- 5、查询财务部年龄不在20-30之间的男生信息。
SELECT * 
FROM  tb_depart a, tb_staff b 
WHERE a.b_id = b.b_id AND b_name = '财务部' AND y_id NOT IN
(
SELECT y_id 
FROM tb_staff 
WHERE y_age BETWEEN 20 AND 30
);


CREATE TABLE tb_teams
(
 id INT PRIMARY KEY AUTO_INCREMENT,
 t_id INT,
 t_name VARCHAR(20)
);

INSERT INTO tb_teams(t_id, t_name) VALUES
(2,'火箭'),
(1,'小牛'),
(4,'湖人'),
(3,'热火'),
(5,'拜仁');

CREATE TABLE tb_result
(
 id INT PRIMARY KEY AUTO_INCREMENT,
 h_id INT,
 g_id INT,
 match_time DATETIME,
 result VARCHAR(10)
);

INSERT INTO tb_result(h_id, g_id, match_time, result) VALUES
(2, 4, '2014-01-23 08:00:00', '38:55'),
(3, 4, '2014-01-10 09:00:00', '27:22'),
(2, 5, '2014-02-02 10:10:00', '33:49'),
(5, 1, '2014-02-06 14:00:00', '22:26'),
(3, 5, '2014-02-18 15:30:00', '44:38');



-- 查询出各个队的输赢场数降序排名
SELECT a.t_id, a.t_name,SUM(a.count) SUM FROM (
(
SELECT a.h_id t_id, b.t_name t_name,COUNT(*) COUNT FROM tb_result a 
LEFT JOIN tb_teams b ON a.h_id=b.t_id
WHERE SUBSTRING(result,1,2)>SUBSTRING(result,4,2)
GROUP BY a.h_id
)
UNION ALL
(
SELECT a.g_id t_id, b.t_name t_name, COUNT(*) COUNT FROM tb_result a 
LEFT JOIN tb_teams b ON a.g_id=b.t_id
WHERE SUBSTRING(result,1,2)<SUBSTRING(result,4,2)
GROUP BY a.g_id
)
) a
GROUP BY a.t_id
ORDER BY COUNT DESC;

猜你喜欢

转载自blog.csdn.net/oneeyear/article/details/83003191