DBA 数据库管理 . 内连接.外链接

内连接

通过链接把多张表组合成一张临时表

select 表头名 from 表名1 inner join 表名2 ;

select * from employees inner join departments

select 表头名 from 表名1 inner join 表名2 on 链接条件;

select * from employees inner join departments on employees.dept_id = departments.dept_id;

在临时组成新表里,可以在哟以下处理

select 表头名 from 表名1 inner join 表名2 on 链接条件where \| order by \| group by\| limit \| having;

等值链接 : 前提是链接里有储存相同数据的表头

select * from employees inner join departments on employees.dept_id = departments.dept_id;

定义别名后必须使用别名表示表名

  1. select e.* , d.dept_name
  2. from employees as e inner join departments as d on e.dept_id=d.dept_id;

查询每个员工2018年的总工资

复制代码
select name ,sum(basic+bonus) as total from employees inner join salary on employees.employee_id = salary.employee_id where year(date)=2018 group by name;

select salary.employee_id ,sum(basic+bonus) as total from employees inner join salary on employees.employee_id = salary.employee_id  where year(date)=2018 group by employee_id having total > 300000 order by total desc ,employee_id asc;查询2018年总工资大于30万的员工,按2018年总工资降序排列

非等值链接: 表里没有存储相同数据的表头

select employee_id ,basic,garde from salary inner join wage_grade on salary.basic between wage_grade.low and wage_grade.high where year(date)=2018 and month(date)=12;

查询2018年12月员工基本工资

select garde as 级别,count(employee_id) as 总人数 from salary inner join wage_grade on salary.basic between wage_grade.low and wage_grade.high where year(date)=2018 and month(date)=12 group by garde;查询2018年12月员工基本工资级别的人数

3张表连接的例子

select name ,basic ,garde from employees inner join salary on employees.employee_id = salary.employee_id inner join wage_grade on salary.basic between wage_grade.low and wage_grade.high where year(date)=2018 and month(date)=12;

外链接查询

外链接是比较2个表的不同

左链接 用左表数据和右表数据作比较 输出结果左表头数据全部显示,

右边仅显示与链接匹配的`行

select 表头名 from 表名1 left jion 表名2 on 链接条件 ;

select 表头名 from 表名1 left jion 表名2 on 链接条件 ·where \|group by\| orderby \| having \| limit ;

select dept_name, name from departments left join employees on departments.dept_id=employees.dept_id where name is null;

右链接 用右表数据和左表数据作比较 输出结果右表头数据全部显示

右边仅显示与链接匹配的`行

select 表头名 from 表名1 right jion 表名2 on 链接条件 ·where \|group by\| orderby \| having \| limit ;

mysql> select dept_name,name from departments as d right join employees as e on d.dept_id=e.dept_id where dept_name is null;

update employees set dept_id=11 where name="bob";

全链接查询

把多个select命令查询的行一起数据 多个select查询,表头数要一致

去重行的输出

mysql> (select date , max(basic) as 工资 from salary where date=20180110)union(select date,min(basic) from salary where date=20180110);

(select 查询命令)union (select 查询命令);

不去重行的输出

select 查询命令)union all(select 查询命令);

嵌套查询

select 查询命令包含select查询命令

where之后嵌套查询 分组

select 表头名 from 库.表 where 表头名 判断符号 ( select 查询命令)

select employee_id,date,basic,bonus from salary where year(date)=2018 and month(date)=12 and basic > (select basic from salary where year(date)=2018 and month(date)=12 and employee_id=100);

having之后嵌套查询 把()里的查询结果作为过滤条件,

select 表头名 from 库.表 having 表头名 判断符号 ( select 查询命令)

select dept_id , count(name) as total from employees group by dept_id

having total < (

select count(name) from employees where dept_id=(

select dept_id from departments where dept_name='开发部')

from之后嵌套查询 把()的查询结果作表使用

select 表头名 from (select 查询结果)as 临时表名 where 筛选条件;

select employee_id ,name,email,dept_name from (select d.dept_name,e.* from departments as d inner join employees as e on d.dept_id=e.dept_id) as tmp_table where dept_id=3;

select之后嵌套查询

select 表头名, (select 查询命令)as 表头名 from 库.表 where 筛选条件;

select d.* ,(select count(name)from employees as e where d.dept_id=e.dept_id)as vumen from departments as d;

相关推荐
九零HTTP2 小时前
10月21号-CSDN配菜-IP池的5个坑
服务器·数据库·tcp/ip
Data-Miner3 小时前
需要做财务数据分析,有什么好用的工具?从准备到出报告的实操指南
大数据·数据库·数据分析
袋鼠云数栈3 小时前
让 SQL 解析不再重复造轮子:SqlParserX 正式开源
数据库·人工智能·sql·开源·数据治理
这个DBA有点耶4 小时前
期货 CTP 系统 Oracle RAC 迁移国产库实战:读写分离架构设计与性能对标
数据库·架构·dba
数据库安全4 小时前
AI数据访问安全 |如何控制AI访问权限,防止越权
数据库·安全
这个DBA有点耶5 小时前
Redo Log循环写与checkpoint推进:长事务阻塞下的Checkpoint风暴完整链路
数据库·mysql·代码规范
jnrjian5 小时前
pg_waldump --key-file-name status 查看wal 产生的db
数据库
SelectDB技术团队6 小时前
Snowflake 的开源替代怎么选:能力对照、三条部署路径与迁移执行
大数据·数据库·云原生·开源·snowflake·apache doris
Elastic 中国社区官方博客6 小时前
告别繁琐控制台:Kabanos 如何将 MongoDB Compass 的易用性带入 Elasticsearch
大数据·数据库·mongodb·elasticsearch·搜索引擎·全文检索
京东云开发者6 小时前
当我谈数据库高可用时我谈些什么
数据库