Mysql表连接

当需要同时显示多个表中的字段时,就可以用表连接来实现这样的功能。

  • 从大类上分,表连接分为内连接和外连接,它们之间的最主要区别是內连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。我们最常用的是内连接。

    • 例如:查询出所有雇员的名字和所在部门名称,因为雇员名称和部门分别存放在表emp 和dept 中,因此,需要使用表连接来进行查询:

      • select ename,deptname from emp,dept where emp.deptno=dept.deptno; ename是表emp里的字段 deptname是表dept里的字段 条件表示查出表emp和表dept里deptno相同的记录 再连接成一条记录,从这记录里查出ename和deptname字段
  • 外连接有分为左连接和右连接,具体定义如下: 左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录 右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录
    • 左连接:select ename,deptname from emp left join dept on emp.deptno=dept.deptno;右连接:select ename,deptname from dept right join emp on dept.deptno=emp.deptno;
    • 这两个查出来是一模一样的记录 都是包含所有emp表中的记录甚至是dept表中没有和它匹配的记录
  • 某些情况下,当我们查询的时候,需要的条件是另外一个select 语句的结果,这个时候,就要用到子查询
  • 用于子查询的关键字主要包括in、not in、=、!=、exists、not exists 等。
  • select * from emp where deptno in(select deptno from dept);
    如果子查询记录数唯一,还可以用=代替in:
    select * from emp where deptno = (select deptno from dept); ERROR 1242 (21000): Subquery returns more than 1 row
    select * from emp where deptno = (select deptno from dept limit 1); OK
  • 某些情况下,子查询可以转化为表连接,例如:select * from emp where deptno in(select deptno from dept); select emp.* from emp ,dept where emp.deptno=dept.deptno;

注意:子查询和表连接之间的转换主要应用在两个方面:MySQL 4.1 以前的版本不支持子查询,需要用表连接来实现子查询的功能 表连接在很多情况下用于优化子查询

  • 我们经常会碰到这样的应用,将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来,这个时候,就需要用union 和union all 关键字来实现这样的功能,具体语法如下:SELECT * FROM t1
  • UNION|UNION ALL
  • SELECT * FROM t2……
  • UNION|UNION ALL
  • SELECT * FROM tn;
  • UNION 和UNION ALL 的主要区别是UNION ALL 是把结果集直接合并在一起,而UNION 是将UNION ALL 后的结果进行一次DISTINCT,去除重复记录后的结果。
    • 例如:将emp 和dept 表中的部门编号的集合显示出来:
    • select deptno from emp
    • -> union all
    • -> select deptno from dept;
时间: 2024-08-02 06:59:10

Mysql表连接的相关文章

MySQL Study之--MySQL 表连接

MySQL Study之--MySQL 表连接 一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON condition table1:左表:table2:右表. JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录. LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录

Mysql 表连接查询

1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行.       2.外联接.外联接可以是左向外联接.右向外联接或完整外部联接.     在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     1)LEFT  JOIN或LEFT OUTER JOIN     左向外联接的结果集包括  LEF

Mysql表连接查询

原文地址: https://www.cnblogs.com/qiuqiuqiu/p/6442791.html 1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行. 2.外联接.外联接可以是左向外联接.右向外联接或完整外部联接. 在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定: 1)LEFT JOIN或L

mysql表连接,子查询以及if判断

创建表: CREATE TABLE emp ( ename varchar(10) DEFAULT NULL, hiredate date DEFAULT NULL, sal decimal(10,2) DEFAULT NULL, deptno int(2) DEFAULT NULL, age int(3) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 CREATE TABLE dept ( deptno int(2) DEFAULT NUL

实操-mysql表连接笛卡尔积(join、left join)

1.为什么两张表连接会出现重复数据 2.表的连接过程是怎样的? 举例: 表A: 1 0 表B: 1 0 0 2 执行语句:select * from A join B on A.id = B.id; 顺序如下: join形成的表: 1 1 1 0 1 0 1 2 0 1 0 0 0 0 0 2 on之后: 1 1 0 0 0 0 所以表连接后出现了重复数据 两张表的关系存在一对多的关系,所以就会出现重复情况 什么是笛卡尔积呢? 就是两张表连接的时候,是通过笛卡尔积的方式连接. 笛卡尔(Desca

MySQL 表连接

MySQL数据库表有4种连接方式: 左连接(左外连接) 右连接(右外连接) 等值连接(内连接) 全连接(全外连接) 以下,小编将依次简要介绍,希望能对初学的小伙伴们有所裨益. 首先先介绍下将要使用的两张数据库表 表a 表b 表b中的uid字段,与表a中id字段相对应. 表a中id为6的记录,在表b中没有体现,表b中id为9,uid为7的记录在表a中没有体现. 建表语句如下: 1 SET NAMES utf8mb4; 2 SET FOREIGN_KEY_CHECKS = 0; 3 4 -- ---

mysql表连接的时候注意事项

1. null值与null值是不可以连接的 2. 如果希望像null与null进行连接可以有如下方式 select * from ceview LEFT JOIN caview on IFNULL(ceview.ce, -1) = IFNULL(caview.ce,-1) and ceview.ca = caview.ca 3. 在postgresql中使用 select * from ceview LEFT JOIN caview on coalesce(ceview.ce, -1) = co

EF连接Mysql 表&#39;TableDetails&#39;中的列&#39;IsPrimaryKey&#39;的值为DBNull

无法生成模型,因为存在以下异常:'System.Data.StrongTypingException:表'TableDetails'中的列'IsPrimaryKey'的值为DBNull.---> System.InvalidCastException:指定的转换无效. 原文链接http://stackoverflow.com/questions/33575109/mysql-entity-the-value-for-column-isprimarykey-in-table-tabledetail

MySQL多表查询之外键、表连接、子查询、索引

一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 上面有两张表:部门表(dept).员工表(emp).Id=Dept_id,而Dept_id就是员工表中的外键:因为员工表中的员工需要知道自己属于哪个部门,就可以通过外键Dep