关于mysql:mysql多表连接查询

42次阅读

共计 1893 个字符,预计需要花费 5 分钟才能阅读完成。

1. 穿插连贯查问

穿插连贯返回的后果是被连贯的两个表中所有数据行的笛卡儿积;比方:汇合 A ={a,b},汇合 B ={0,1,2},则汇合 A 和 B 的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。所以,穿插连贯也被称为笛卡尔连贯,其语法格局如下:

SELECT * FROM 表 1 CROSS JOIN 表 2;

在该语法中:CROSS JOIN 用于连贯两个要查问的表,通过该语句能够查问两个表中所有的数据组合。

因为这个穿插连贯查问在理论使用中没有任何意义,所以只做为理解即可

2. 内连贯查问

内连贯(Inner Join) 又称简略连贯或天然连贯,是一种十分常见的连贯查问。内连贯应用比拟运算符对两个表中的数据进行比拟并列出与连贯条件匹配的数据行,组合成新的 记录。也就是说在内连贯查问中只有满足条件的记录能力呈现在查问后果中。其语法格局如下:

SELECT 查问字段 1, 查问字段 2, … FROM 表 1 [INNER] JOIN 表 2 ON 表 1. 关系字段 = 表 2. 关系字段

在该语法中:INNER JOIN 用于连贯两个表,ON 来指定连贯条件;其中 INNER 能够省略。
mysql 装置:http://mysql.cuohei.com/
筹备数据,代码如下:

– 若存在数据库 mydb 则删除

DROP DATABASE IF EXISTS mydb;

– 创立数据库 mydb

CREATE DATABASE mydb;

– 抉择数据库 mydb

USE mydb;

– 创立部门表

CREATE TABLE department(

did int (4) NOT NULL PRIMARY KEY,

dname varchar(20)

);

– 创立员工表

CREATE TABLE employee (

eid int (4) NOT NULL PRIMARY KEY,

ename varchar (20),

eage int (2),

departmentid int (4) NOT NULL

);

– 向部门表插入数据

INSERT INTO department VALUES(1001,’ 财务部 ’);

INSERT INTO department VALUES(1002,’ 技术部 ’);

INSERT INTO department VALUES(1003,’ 行政部 ’);

INSERT INTO department VALUES(1004,’ 生存部 ’);

– 向员工表插入数据

INSERT INTO employee VALUES(1,’ 张三 ’,19,1003);

INSERT INTO employee VALUES(2,’ 李四 ’,18,1002);

INSERT INTO employee VALUES(3,’ 王五 ’,20,1001);

INSERT INTO employee VALUES(4,’ 赵六 ’,20,1004);

查问员工姓名及其所属部门名称 MySQL 命令:

select employee.ename,department.dname from department inner join employee on department.did=employee.departmentid;

3. 外连贯查问

在应用内连贯查问时咱们发现:返回的后果只蕴含合乎查问条件和连贯条件的数据。然而,有时还须要在返回查问后果中不仅蕴含符合条件的数据,而且还包含左表、右表或两个表中的所有数据,此时咱们就须要应用外连贯查问。外连贯又分为左(外) 连贯和右 (外) 连贯。其语法格局如下:

SELECT 查问字段 1, 查问字段 2, … FROM 表 1 LEFT | RIGHT [OUTER] JOIN 表 2 ON 表 1. 关系字段 = 表 2. 关系字段 WHERE 条件

由此可见,外连贯的语法格局和内连贯十分类似,只不过应用的是 LEFT [OUTER] JOIN、RIGHT [OUTER] JOIN 关键字。其中,关键字右边的表被称为左表,关键字左边的表被称为右表;OUTER 能够省略。

在应用左(外) 连贯和右 (外) 连贯查问时,查问后果是不统一的,具体如下:

1、LEFT [OUTER] JOIN 左 (外) 连贯:返回包含左表中的所有记录和右表中合乎连贯条件的记录。

2、RIGHT [OUTER] JOIN 右 (外) 连贯:返回包含右表中的所有记录和左表中合乎连贯条件的记录。

正文完
 0