MySQL 多表查询

 

 

 

 

 

 

 

 

 

 

create table user(
    id int primary key auto_increment comment '主键',
    name varchar(10) not null  unique comment '姓名',
    age int check ( age>0 && age<120),
    status char(1) default '1' comment '状态',
    gender char(1)

)comment '用户表';

INSERT INTO user (name, age, status, gender) VALUES ('Alice', 30, '1', 'F');
INSERT INTO user (name, age, status, gender) VALUES ('Bob', 25, '1', 'M');
INSERT INTO user (name, age, status, gender) VALUES ('Charlie', 35, '1', 'M');
INSERT INTO user (name, age, status, gender) VALUES ('Diana', 28, '1', 'F');
INSERT INTO user (name, age, status, gender) VALUES ('Ethan', 40, '1', 'M');
INSERT INTO user (name, age, status, gender) VALUES ('Francesca', 22, '1', 'F');
INSERT INTO user (name, age, status, gender) VALUES ('George', 55, '1', 'M');
INSERT INTO user (name, age, status, gender) VALUES ('Hannah', 29, '1', 'F');
INSERT INTO user (name, age, status, gender) VALUES ('Isaac', 18, '1', 'M');
INSERT INTO user (name, age, status, gender) VALUES ('Jessica', 32, '1', 'F');

select * from user;
INSERT INTO user (age, status, gender) VALUES (32, '1', 'F');

delete from user where id=13;
update user set gender='M' WHERE id=1;

INSERT INTO user (name, age, status, gender) VALUES ('J1a', 10, '1', 'F');

INSERT INTO user (name, age, gender) VALUES ('Is1aa1c', 18, 'M');

# alter table employees  add constraint fk_emp foreign key (department_id) references departments(id) on update cascade on delete cascade;

CREATE TABLE department (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
    name VARCHAR(50) NOT NULL COMMENT '部门名称',
    description TEXT COMMENT '部门描述'
) COMMENT '部门表';


-- 创建员工表
CREATE TABLE employee (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
    name VARCHAR(100) NOT NULL COMMENT '员工姓名',
    position VARCHAR(50) COMMENT '职位',
    salary DECIMAL(10, 2) COMMENT '薪水',
    department_id INT,
    -- 设置外键约束,并指定 ON DELETE CASCADE 以实现级联删除
    FOREIGN KEY (department_id) REFERENCES department(id) ON DELETE CASCADE
) COMMENT '员工表';

INSERT INTO department (name, description) VALUES
('人力资源部', '负责招聘、培训、员工关系等'),
('技术部', '负责软件开发、系统维护、技术支持等'),
('市场部', '负责市场推广、品牌建设、销售策略等'),
('财务部', '负责财务管理、预算编制、会计审计等'),
('法务部', '负责法律咨询、合同审核、合规管理等'),
('运营部', '负责运营规划、流程管理、客户服务等');

INSERT INTO employee (name, position, salary, department_id) VALUES
('张三', '人力资源经理', 12000.00, 1),
('李四', '招聘专员', 8000.00, 1),
('王五', '高级软件工程师', 25000.00, 2),
('赵六', '软件工程师', 20000.00, 2),
('孙七', '市场总监', 22000.00, 3),
('周八', '市场推广专员', 10000.00, 3),
('吴九', '财务经理', 15000.00, 4),
('郑十', '会计', 12000.00, 4),
('陈十一', '法务主管', 18000.00, 5),
('刘十二', '法务助理', 10000.00, 5),
('高十三', '运营总监', 20000.00, 6),
('黄十四', '运营经理', 16000.00, 6),
('何十五', '客服经理', 13000.00, 6),
('郭十六', '客服专员', 9000.00, 6),
('曹十七', 'IT支持工程师', 14000.00, 2); -- 假设IT支持属于技术部

INSERT INTO employee (name, position, salary) VALUES ('郭十1六', '客服专员', 9000.00);
# 多表查询
select * from employee,department;

select * from department,employee;
# 隐式内连接
select * from employee,department where department_id=department.id;

# 显示内连接 inner join ... on...
select e.name,d.name from department d inner join employee e on e.department_id=d.id;

# 查询emp表的所有数据和对应的部门名称 左外连接
select e.*,d.name from employee e left join department d on e.department_id = d.id;

# 查询dep表的所有数据和对应的员工信息 右外连接
select d.* ,e.* from employee e right join department d on e.department_id = d.id;

# 查询dep表的所有数据和对应的员工信息 左外连接
select d.name ,e.*from department d left join employee e on e.department_id = d.id;

# 自连接 查询员工及其领导的名字
select e.name,e_m.name,e_m.position from employee e inner join employee e_m on e.manager_id = e_m.id;

# 查询员工及其领导 没有领导也要查询材料
select e.name,e_m.name,e_m.position from employee e left  join employee e_m on e.manager_id = e_m.id;

# union 联合查询
select * from employee  e where e.age>50 and e.salary >10000;

select * from employee e where e.salary>10000
UNION
select * from employee e where e.age<50;

# 标量子查询
# 查询运营部的所有员工
select * from employee inner join department d on employee.department_id = d.id;
select id from department where name = '运营部';

select * from employee  where department_id=(select id from department where name = '运营部');

# 列子查询
# 查询技术部和运营部的所有员工信息
select id from department d where d.name='运营部' or d.name='技术部';
select * from employee where department_id in (select id from department d where d.name='运营部' or d.name='技术部');

# 查询比财务部所有人工资都高的员工信息
select e.salary from employee e where e.department_id=(select id from department d where d.name='财务部');
select e.salary from employee e where e.department_id=(select id from department d where d.name='财务部') order by salary desc limit 1;
select * from employee where salary>(select e.salary from employee e where e.department_id=(select id from department d where d.name='财务部') order by salary desc limit 1)


select * from employee where salary> all((select e.salary from employee e where e.department_id=(select id from department d where d.name='财务部')));

# 查询比技术部任意一人工资都高的员工信息
select e.salary from employee e where e.department_id=(select id from department d where d.name='技术部');
select * from employee where salary> any((select e.salary from employee e where e.department_id=(select id from department d where d.name='技术部')));

# 行子查询

select salary,manager_id from employee  where name='王五' or name= '李四';
# 一行 =
select * from employee where (salary,manager_id)=(select salary,manager_id from employee  where name='王五');
# 多行多列 用in
select * from employee where (salary,manager_id) in (select salary,manager_id from employee  where name='王五' or name= '李四');

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值