mysql表deptno,MySQL:多表查询
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:多表查询相关推荐
- MySQL的约束、多表查询、子查询
一.约束之主键约束 约束:约束是添加在列上的,用来约束列的. 1.主键约束(唯一标识):非空.唯一.被引用 当表的某一列被指定为主键后,该类就不能为空,不能有重复值出现 创建表时指定主键的两种方式: ...
- mysql外连接基准表_4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)...
mysql数据库创建,表创建模等模板脚本 --用root用户登录系统,执行脚本 --创建数据库 create database mydb61 character set utf8 ; --选择数 ...
- mysql年月分表_MySQL之按月拆分主表并按月分表写入数据提高数据查询速度
使用场景: 主表数据量特别大,为了提高查询的速度,可以考虑按月进行分表,要求就是当月的数据到当月表查询,上月的数据到上月表查询,当天的数据到主表来查询.这样在一定程度上也是提高了数据的查询速度 过程演 ...
- Linux命令:MySQL系列之五--SELECT单表查询、多表查询升级及删除,插入
SELECT:查询 SELECT select-list FROM tb WHERE qualification 根据标准qualification查找对应的行 查询语句类型: qualifica ...
- 面试官:为什么mysql不建议执行超过3表以上的多表关联查询?
概述 前段时间在跟其他公司DBA交流时谈到了mysql跟PG之间在多表关联查询上的一些区别,相比之下mysql只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort ...
- mysql中一个表怎么查询多以上的信息,MySQL怎么样实现多个表的或查询?
我想要像上图那样在两个表里面查询username,只有其中一个表有这个数据就返回true,但是MySQL判断必须两个表都有才返回true. 请问有什么办法可以实现这样的查询呢?(两个表中任何一个表有数 ...
- 03 mysql数据查询_MySql学习day03:数据表之间的连接、查询详解
主键: 关键字:primary key 特点:不能为null,并且唯一. 主键分类: 逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐) 业务主键:例如username,参与实 ...
- mysql多表 性能_Mysql 多表联合查询效率分析及优化
1. 多表连接类型 1. 笛卡尔积(交叉连接)在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如: SELECT*FROMtable1CROSSJOINtabl ...
- MySQL数据库在众多表中对表名的查询及预处理存储过程(变量做表名)
以下的文章主要介绍的是MySQL数据库在众多表中进行表名与字段名的查询的实际操作步骤,以及对实现其查询所要用到的SQL 语句的介绍,还有两个实际解决方案的描述,以下就是文章的主要内容描述. 在MySQ ...
最新文章
- 如何利用Tensorflow和OpenCV构建实时对象识别程序?
- SAP PM 入门系列14 – PM模块与其它模块的集成
- 与两位主席复盘IJCAI,今年得失几何?
- JZOJ 3853. 【NOIP2014八校联考第2场第2试9.28】帮助Bsny(help)
- 魅蓝s6启动android密码_魅蓝s6怎么恢复出厂设置?忘记密码怎么办
- 面包房算法 java_java处理买面包事件
- 【华为云技术分享】HDC.Cloud|华为云Stack大咖说:如何实现微服务架构下的分布式事务
- mac怎么查node版本_Node.js 微服务实践:基于容器的一站式命令行工具链
- 图片放大缩小旋转左移右移镜像倒影android
- CC2530的硬件功能及实例讲解
- MAC刻录iso到USB、U盘
- vue中请求到的数据赋值给data 对象
- 3的n次方在c语言中如何表示真和假,C程序作业答案
- 游戏黑客圣经GHB1学习笔记 part4(16-20)
- Cell Genomics封面|北大吴华君组利用空间多组学技术解析肿瘤内空间异质性(附招聘)...
- 实训1_获取产业数据并存储_预处理与简单分析
- HTML字母导航栏怎么做,如何用css做导航栏?
- NC文件的处理【netcdf】
- HBase Master is initializing的错误可能
- svn commit svn: E170001: Authorization failed