MySQL:多表查询

SELECT查询不但可以从一张表查询数据,还可以从多张表同时查询数据。查询多张表的语法是:SELECT * FROM 表1 表2,普通多表查询会获取M x N行记录,所以一般使用连接查询或子查询获取多张表的数据;

连接查询

连接查询对多个表进行 JOIN 运算,简单地说,就是先确定一个主表作为结果集,然后,把其他表的行有选择性地“连接”在主表结果集上。

连接查询分为内连接和外连接,内连接只返回同时存在于两张表的行数据,外连接返回右表都存在的行。如果某一行仅在右表存在,那么结果集就会以NULL填充剩下的字段。

内连接

内连接是最常用的一种JOIN查询,内连接查询的语法格式:

# 标准语法,INNER可省略

SELECT ... FROM 表1 JOIN 表2 ON 连接条件 ;

# 衍生语法1(WHERE与ON的作用相同)

SELECT ... FROM 表1 JOIN 表2 WHERE 连接条件 ;

# 衍生语法2

SELECT ... FROM 表1 , 表2 WHERE 连接条件 ;

查询实例:

# 连接员工表与部门表两张表

SELECT e.empno,e.ename,d.dname

FROM t_emp e

JOIN t_dept d ON e.deptno=d.deptno ;

# 连接员工表、部门表、登记表三张表

SELECT e.empno,e.ename,d.dname,e.sal,e.job,s.grade

FROM t_emp e

JOIN t_dept d ON e.deptno=d.deptno

JOIN t_salgrade s ON e.sal BETWEEN s.losal AND s.hisal;

# 连接自身:查询与SCOTT同部门的人

SELECT e2.ename

FROM t_emp e1

JOIN t_emp e2 ON e1.deptno=e2.deptno

WHERE e1.ename="SCOTT" AND e2.ename!="SCOTT";

# 进阶练习1:查询员工表中工资超过平均工资的人

# 与WHERE一样,ON子句也不能使用聚合函数,这里将聚合结果作为一张表来连接

SELECT e.ename,e.sal

FROM t_emp e

JOIN (SELECT AVG(sal) avg FROM t_emp) t ON e.sal=t.avg;

内连接的数据表不一定需要同名字段或外键关联,只需字段之间符合逻辑关系即可

外连接

由于内连接只返回同时存在于两张表的行数据,如果员工表中有部门编号为NULL的特殊员工,使用内连接就会遗漏这个员工的信息,这时候就需要使用外连接,外连接分为LEFT [OUTER] JOIN、RIGHT [OUTER] JOIN、FULL [OUTER] JOIN,左右相对JOIN关键字前后的表而言的:

左连接实例1:查询所有员工(包括部门为NULL)的部门信息

SELECT e.ename,d.dname

FROM t_emp e

LEFT JOIN t_dept d ON e.deptno=d.deptno;

左连接实例2:查询所有部门的人数

SELECT d.dname,COUNT(e.deptno)

FROM t_dept d

LEFT JOIN t_emp e ON d.deptno=e.deptno

GROUP BY d.deptno;

MySQL数据库不支持全连接查询,可使用UNION关键字实现全连接:

(SELECT d.dname,COUNT(e.deptno)

FROM t_dept d

LEFT JOIN t_emp e ON d.deptno=e.deptno

GROUP BY d.deptno)

UNION

(SELECT d.dname,COUNT(*)

FROM t_dept d

RIGHT JOIN t_emp e ON d.deptno=e.deptno

GROUP BY d.deptno);

内连接中,ON与WHERE的用法一样;外连接中不太一样,WHERE能筛选掉更多数据。

子查询

根据所在位置,子查询可分为WHERE、FROM、SELECT子查询。对于WHERE、SELECT子查询,每次比较都会运行一次,非常低效,不推荐使用,一般转化为表连接查询。对于FROM子查询只会执行一次,可以经常使用。

根据子查询的返回结果,可以分为单行和多行子查询,单行子查询即子查询返回一个值,很容易使用。对于多行子查询,可以使用IN、ALL、ANY、[NOT] EXISTS关键字来处理

MySQL:多表查询 相关文章

Linux下Mysql root用户失去特权怎么办

问题如下: [root@localhost ~]# mysql -uroot -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 8Server version: 8.0.20 MySQL Community Server - GPLCopyright (c) 2000, 2020, Oracle and/or it

MySQL学习03(MySQL数据管理)

MySQL数据管理 外键 外键概念 如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为 主表 ,具有此外键的表被称为主表的 从表 。 在实际

一. mysql 内存结构

mysql的内存结构由以下几部分构成: 1.buffer pool (data page,index page,change buffer page,adaptive hash index,lock info,data dictionary) 2.additional memory pool 3.double write 4.redo log buffer 一.buffer pool buffer pool 大小设置 1.通常分

Mysql基础命令笔记

MYSQL基础 1.DDL语句 数据库/表的创建、删除 --创建数据库create database 数据库名 charset=utf8--删除数据库drop database test1--创建表CREATE TABLE tablename( column_name_1 column_type_1 constraints, column_name_2 column_type_2 constraints,)--

sql基础语法

一、数据库的查询和创建 二、数据库的修改和删除以及使用 三、 数据表的查询 四、 数据表的创建 五、 数据表的修改 六、数据表的删除 七、 DML表数据的增删改 7.1新增表数据 7.2 修改表数据 7.3删除表数据 例子: /* 删除表数据 标准语法: DELETE FROM 表名

Kubernetes部署本地有状态mysql主从服务【转】

一般情况下Kubernetes可以通过ReplicaSet以一个Pod模板创建多个pod副本,但是它们都是无状态的,任何时候它们都可以被一个全新的pod替换。然而有状态的pod需要另外的方案确保当一个有状态的pod挂掉后,这个pod实例需要在别的节点上重建,但是新的实例必须与

MySQL和SQLserver的区别

1、自增长列的插入: SQLServer中可以不为自动增长列插入值, MySQL中需要为自动增长列插入值。 2、获取当前时间函数: SQLServer写法:getdate() MySQL写法:now() 3、从数据库定位到表。 Sqlserver写法:库名.dbo.表名 ;或者:库名..表名 (注:中间使用

MySQL主从复制

MySQL 主从复制是其最重要的功能之一. 主从复制是指一台服务器充当主数据库服务器, 另一台或多台服务器充当从数据库服务器, 主服务器中的数据自动复制到从服务器之中. 对于多级复制, 数据库服务器即可充当主机, 也可充当从机. MySQL 主从复制的基础是主服务

sql server查询优化方法(海量数据)

此方法只适用于对海量数据查询的优化,对于数据量较少的查询不具有参考性 一、尽量避免全表扫描,使用索引 1.在常用字段上面建立索引,方便查找 2.避免null值判断。eg: where xx is null。 改进:可以设置默认值代替null 3.避免使用不等于操作符,如!=, 4.

mysql分库分表

一. 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于

mysql表deptno,MySQL:多表查询相关推荐

  1. MySQL的约束、多表查询、子查询

    一.约束之主键约束 约束:约束是添加在列上的,用来约束列的. 1.主键约束(唯一标识):非空.唯一.被引用 当表的某一列被指定为主键后,该类就不能为空,不能有重复值出现 创建表时指定主键的两种方式: ...

  2. mysql外连接基准表_4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)...

     mysql数据库创建,表创建模等模板脚本 --用root用户登录系统,执行脚本 --创建数据库 create database mydb61 character set utf8 ; --选择数 ...

  3. mysql年月分表_MySQL之按月拆分主表并按月分表写入数据提高数据查询速度

    使用场景: 主表数据量特别大,为了提高查询的速度,可以考虑按月进行分表,要求就是当月的数据到当月表查询,上月的数据到上月表查询,当天的数据到主表来查询.这样在一定程度上也是提高了数据的查询速度 过程演 ...

  4. Linux命令:MySQL系列之五--SELECT单表查询、多表查询升级及删除,插入

    SELECT:查询 SELECT select-list FROM tb WHERE qualification  根据标准qualification查找对应的行 查询语句类型:  qualifica ...

  5. 面试官:为什么mysql不建议执行超过3表以上的多表关联查询?

    概述 前段时间在跟其他公司DBA交流时谈到了mysql跟PG之间在多表关联查询上的一些区别,相比之下mysql只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort ...

  6. mysql中一个表怎么查询多以上的信息,MySQL怎么样实现多个表的或查询?

    我想要像上图那样在两个表里面查询username,只有其中一个表有这个数据就返回true,但是MySQL判断必须两个表都有才返回true. 请问有什么办法可以实现这样的查询呢?(两个表中任何一个表有数 ...

  7. 03 mysql数据查询_MySql学习day03:数据表之间的连接、查询详解

    主键: 关键字:primary key 特点:不能为null,并且唯一. 主键分类: 逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐) 业务主键:例如username,参与实 ...

  8. mysql多表 性能_Mysql 多表联合查询效率分析及优化

    1. 多表连接类型 1. 笛卡尔积(交叉连接)在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: SELECT*FROMtable1CROSSJOINtabl ...

  9. MySQL数据库在众多表中对表名的查询及预处理存储过程(变量做表名)

    以下的文章主要介绍的是MySQL数据库在众多表中进行表名与字段名的查询的实际操作步骤,以及对实现其查询所要用到的SQL 语句的介绍,还有两个实际解决方案的描述,以下就是文章的主要内容描述. 在MySQ ...

最新文章

  1. 如何利用Tensorflow和OpenCV构建实时对象识别程序?
  2. SAP PM 入门系列14 – PM模块与其它模块的集成
  3. 与两位主席复盘IJCAI,今年得失几何?
  4. JZOJ 3853. 【NOIP2014八校联考第2场第2试9.28】帮助Bsny(help)
  5. 魅蓝s6启动android密码_魅蓝s6怎么恢复出厂设置?忘记密码怎么办
  6. 面包房算法 java_java处理买面包事件
  7. 【华为云技术分享】HDC.Cloud|华为云Stack大咖说:如何实现微服务架构下的分布式事务
  8. mac怎么查node版本_Node.js 微服务实践:基于容器的一站式命令行工具链
  9. 图片放大缩小旋转左移右移镜像倒影android
  10. CC2530的硬件功能及实例讲解
  11. MAC刻录iso到USB、U盘
  12. vue中请求到的数据赋值给data 对象
  13. 3的n次方在c语言中如何表示真和假,C程序作业答案
  14. 游戏黑客圣经GHB1学习笔记 part4(16-20)
  15. Cell Genomics封面|北大吴华君组利用空间多组学技术解析肿瘤内空间异质性(附招聘)...
  16. 实训1_获取产业数据并存储_预处理与简单分析
  17. HTML字母导航栏怎么做,如何用css做导航栏?
  18. NC文件的处理【netcdf】
  19. HBase Master is initializing的错误可能
  20. svn commit svn: E170001: Authorization failed

热门文章

  1. 通用计算机冯诺依曼,冯。诺依曼计算机
  2. zynq7000 创建fsbl工程,并打开log
  3. 关于ie浏览器的插件IEDevToolBar 安装问题
  4. bs结构socket(udp)通信
  5. 科普_10MB宽带上传下载速度达到多少才算达标
  6. php 混合开发框架,Spiral: 性能卓越的PHP/Golang混合开发框架
  7. H3C BGP MPLS实验
  8. 基于智能融合配变终端的数字化台区技术应用(转载)
  9. B2B常见名词以及英文缩写
  10. 软考初级程序员上午单选题(20)