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以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值