MySQL表关联的几种常用方式

工作中我们经常会使用表与表关联来查询数据,如果对join 不熟悉,可能会得到我们不想要的节过,这里就来介绍下join的几种常用方法:
建表及插入数据,
CREATE TABLE school (
sch_id int(11) NOT NULL AUTO_INCREMENT,
sch_name varchar(50) NOT NULL,
sch_addr varchar(100) DEFAULT NULL,
PRIMARY KEY (sch_id)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

CREATE TABLE student (
st_id int(11) NOT NULL AUTO_INCREMENT,
st_name varchar(20) NOT NULL,
age smallint(6) DEFAULT NULL,
hight int(5) DEFAULT NULL,
sch_id int(11) DEFAULT NULL,
PRIMARY KEY (st_id),
KEY sch_id (sch_id)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 ;

INSERT INTO school VALUES (1,‘南开大学‘,‘南开‘),(2,‘中央财经大学‘,‘北京‘),(3,‘香港理工大学‘,‘香港‘),(4,‘西安交通大学‘,‘西安‘),(5,‘悉尼大学‘,‘悉尼‘),(6,‘曼彻斯特大学‘,‘曼彻斯特‘),(8,‘延安抗日军政大学‘,‘延安‘);

INSERT INTO student VALUES (1,‘王晓阳‘,26,168,6),(2,‘王楠‘,28,162,2),(3,‘杨振宇‘,30,178,1),(4,‘苗昕‘,28,162,3),(5,‘张诗雨‘,27,171,5),(8,‘李倩‘,28,162,4),(9,‘蒋结石‘,26,178,7);

1.左关联:以左表为中心,查出左表的全部数据,关联字段值不相等则右表查出的数据显示为空;
select * from school a left join student b on a.sch_id=b.sch_id;

2.右关联:以右表为中心,查出右表的全部数据,关联字段值不相等则左表查出的数据显示为空;
select * from school a right join student b on a.sch_id=b.sch_id;

3.内关联:查出两表关联字段等值的数据
select * from school a inner join student b on a.sch_id=b.sch_id;

4.查出只属于左表的数据
select * from school a left join student b on a.sch_id=b.sch_id where b.st_id is null;

5.查出只属于右表的数据
select * from school a right join student b on a.sch_id=b.sch_id where a.sch_id is null;

6.查出全部数据
select from school a left join student b on a.sch_id=b.sch_id union select from school a right join student b on a.sch_id=b.sch_id;

7.查出左表和右表关联不相等的数据
select from school a left join student b on a.sch_id=b.sch_id where b.st_id is null union select from school a right join student b on a.sch_id=b.sch_id where a.sch_id is null;

原文地址:http://blog.51cto.com/11103985/2330041

时间: 2025-01-15 01:55:44

MySQL表关联的几种常用方式的相关文章

ASP.NET MVC 表单的几种提交方式

下面是总结一下在ASP.NET MVC中表单的几种提交方式. 1.Ajax提交表单 需要引用 <script type="text/javascript" src="/Scripts/jquery-1.7.2.min.js"></script>    <script src="/Scripts/jquery.validate.min.js" type="text/javascript">&l

【方法整理】Oracle 获取trace跟踪文件名的几种常用方式

[方法整理]Oracle 获取trace跟踪文件名的几种常用方式 1  BLOG文档结构图     2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① trace跟踪文件的获取   Tips: ① 本文在itpub(http://blog.itpub.net/26736162).博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaimiaolhr)有同

Windows校验文件哈希hash的两种常用方式

大家经常都到哪儿去下载软件和应用程序呢?有没想过下载回来的软件.应用程序或资源是否安全呢?在 Windows 10 和 Office 2016 发布当初,很多没权限的朋友都使用第三方网站去下载安装映像.而大家如何保证自己下载回来的映像或软件就是官方版本,而没有被别人篡改过呢? 很多朋友会想到将下载回来的资源校验 MD5 或 SHA1 与官方版哈希值进行对比,如果无误则表示未被篡改.大家平常在 Windows 中都使用何种工具算校验值呢?本文向大家推荐 Windows 校验文件哈希的两种常用方式.

MySql数据库优化的八种经典方式

1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小. 例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了.同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段. 另外一个提高效率的方法

不停MySQL服务情况下增加从库两种常用方式

现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库.前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作. 一般在线增加从库有两种方式,一种是通过mysqldump备份主库,恢复到从库,mysqldump是逻辑备份,数据量大时,备份速度会很慢,锁表的时间也会很长.另一种是通过xtrabackup工具备份主库,恢复到从库,xtrabackup是物理备份,备份速度快,不锁表.为什么不锁表?因为自身会监控主库日

Selenium Webdriver元素定位的八种常用方式

在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下. 1. By.name() 假设我们要测试的页面源码如下: <button id="gbqfba" aria-label="Google Search" name="btnK" class="gbqfba"><

Selenium Webdriver元素定位的八种常用方式(转载)

转自:http://www.cnblogs.com/qingchunjun/p/4208159.html 在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下. 1. By.name() 假设我们要测试的页面源码如下: <button id="gbqfba" aria-label="Google Search" n

mysql 表关联

一.什么是连接查询:就是将二个或二个以上的表,"连接起来"当做一个数据源,并从中去取得所须要的数据.连接查询包括交叉连接查询.内连接查询.外连接查询 (一)  交叉连接:交叉连接不带WHERE子句,它返回被连接的两个表所有数据行的笛卡尔积,返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数. 1.  格式1:select  要查询的内容   from  表名1  cross  join  表名2: 2.  格式2:select  要查询的内

python里读写excel等数据文件的几种常用方式

python处理数据文件第一步是要读取数据,文件类型主要包括文本文件(csv.txt等).excel文件.数据库文件.api等. 下面整理下python有哪些方式可以读取数据文件. 1. python内置方法(read.readline.readlines) read() : 一次性读取整个文件内容.推荐使用read(size)方法,size越大运行时间越长 readline() :每次读取一行内容.内存不够时使用,一般不太用 readlines() :一次性读取整个文件内容,并按行返回到lis