一、mysql自连接

mysql有时在信息查询时需要进行对自身连接(自连接),所以我们需要为表定义别名。我们举例说明,下面是商品采购表,我们需要找到采购价格比惠惠高的所有信息。

一般情况我们看到这张表我们第一时间用语句进行操作:

SELECT * FROM shoping WHERE price>27

可想而知,这是有多么简单,假设你并不知道数据库表详细数据或者数据量相当庞大呢?作为一个数据库管理员,我们就要用别的方式迅速找出所需要的数据。

分步查询

最简单的一种方式,也是最容易想到操作:

SELECT price FROM shopping WHERE name='惠惠' //得出price查询结果为27

SELECT * FROM shopping WHERE price>27

与采用自连接的方式相比,这种方法需要对中间结果进行人工干预,显然不利于程序中的自动处理操作。

自连接方式:

SELECT b.*

from shopping as a,shopping as b

where a.name='惠惠'

and a.price

order by b.id

我们可以获取到如下表信息:

注意点:

别名 a,b虽然名称不同,但是同一个表,定义别名的目的是更方便在自身进行删选。

执行select通过(中间表)所得到的b.*,,就是最终结果。

子查询

子查询也是常用的一种方式,就是在select里嵌套select。

实现代码如下:

SELECT * FROM shopping

WHERE price>(select price from 'shopping' where name='惠惠')

所得结果如下所示,可见两种方式所得结果相同:

二、JOIN

INNER JOIN

内关联的主要作用是在表中存在至少一个匹配时,就返回结果集,这里的inner join和join作用相同,所以一起介绍。

下面给出两张表,分别为goods和category表:

SELECT * FROM goods INNER JOIN category

ON goods.id=category.goods_id

ORDER BY gods.id

结果如下所示:

LEFT JOIN

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。做项目时建议使用左关联。但是存在很多表关联的,一个表对a是左连接,但同时对b是右连接,这时加上右连接,写起来可能方便一些。

套用一开始的两张表,进行左关联查询:

SELECT goods.*,category.cate_name

FROM goods LEFT JOIN category

ON goods.id=category.goods_id

ORDER BY goods.id

RIGHT JOIN

RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。套用一开始的两张表进行右关联查询:

SELECT a.goods_name,a.price,b.*

FROM goods as a

RIGHT JOIN category as b

ON a.id=b.goods_id

ORDER BY b.id

对于多表关联的情况,就是多加几条关联语句。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

mysql自连接_深入理解mysql的自连接和join关联相关推荐

  1. 深入理解mysql系列_深入理解MySQL系列之锁

    按锁思想分类 悲观锁 优点:适合在写多读少的并发环境中使用,虽然无法维持非常高的性能,但是在乐观锁无法提更好的性能前提下,可以做到数据的安全性 缺点:加锁会增加系统开销,虽然能保证数据的安全,但数据处 ...

  2. mysql核心技术分析_深入理解MySQL核心技术

    前言 第1章 MySQL的历史与架构 MySQL的历史 MySQL的架构 第2章 MySQL源代码基本要点 Unix Shell BitKeeper 准备系统:从BitKeeper树构建MySQL 从 ...

  3. mysql bdb版本_深入理解mysql之BDB系列(1)---BDB相关基础知识

    深入理解mysql之BDB系列(1) ---BDB相关基础知识 作者:杨万富 一:BDB体系结构 1.1.BDB体系结构 BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1中相关数). ...

  4. mysql用help查看帮助_深入理解mysql帮助命令(help)

    在安装.管理和使用mysql过程中,你是不是需要记忆很多的mysql命令.而且对于新手来说,很不多的命令不知道该如何应用,对于老手来说很多命令时间长了忘记具体的用法. 其实mysql的帮助信息,已经给 ...

  5. mysql猎豹_猎豹网校MySQL数据库

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 猎豹网校MySQL数据库 链接:http://pan.baidu.com/s/1i3wyPjn 密码:qxhm 教程目录 第1章 了解SQL 1.1 数据 ...

  6. 国开mysql答案_国开MySQL数据库应用形考任务.doc

    <国开MySQL数据库应用形考任务.doc>由会员分享,可在线阅读,更多相关<国开MySQL数据库应用形考任务.doc(13页珍藏版)>请在装配图网上搜索. 1.国开MySQL ...

  7. Alibaba之MySQL宝典_阿里巴巴内部 MySQL宝典 意外流出!极致经典,堪称数据库的天花板...

    MySQL 是一个关系型数据库,使用 SQL 语言进行增删改查操作,目前属于 Oracle 旗下的产品. MySQL 数据库开源免费,能够跨平台,支持分布式,性能也不错,可以和 PHP.Java 等 ...

  8. .net连接mysql数据_.net连接MYSQL数据库的方法及示例!

    连接MYSQL数据库的方法及示例 方法一: 使用MYSQL推出的MySQL Connector/Net is an ADO.NET driver for MySQL 该组件为MYSQL为ADO.NET ...

  9. 怎么重启网站mysql数据库_如何重启MySQL数据库服务

    服务器的启动和停止 停止:net stop mysql 启动:net start mysql -------------------------mysql mode相关问题-------------- ...

  10. linux c mysql 封装_本人对MYSQL C API做的一个封装,希望对linux C++程序员有点帮助,同时欢迎拍砖!...

    本人对MYSQL  C API做的一个封装,使用很简单,构造一个对象,就可直接执行SQL,但对于需返回结果的查询语句,对其数据集没做封装,仍需直接调用mysql c api对其进行处理,本人将下次完成 ...

最新文章

  1. bitShark对Android版本的支持
  2. Assert(断言) 的用法
  3. dds设计信号发生器
  4. ***必学的DOS命令
  5. 无线传感器网络技术原理及应用 知识点
  6. 最大熵模型中的数学推导
  7. 火影忍者 动漫 全集目录 分章节 精彩打斗剧集 思维导图整理
  8. 2018年百度算法与标准汇总
  9. 计算机磁盘分为硬盘和什么,win10磁盘分区合并的方法是什么_win10电脑分盘怎么合并...
  10. dede后台系统基本参数空白怎么办?
  11. ζ(2)的夹逼代数证明
  12. 数据分析报告结构规范设计
  13. android 修改已建工程的api版本,更改API级Android Studio
  14. mysql数据库表的编辑器,SqliteLobEditor(数据库编辑工具)
  15. java在浏览器闪退_Edge浏览器闪退怎么办,Edge浏览器闪退如何修复
  16. 中科红旗假竟拍与国有资产真流失
  17. 什么人工智能、云计算和大数据?发展趋势怎么样
  18. 互联网下半场,具备这个技能的产品经理将越来越值钱!
  19. MT6735简介,联发科6735处理器
  20. 超详细宝塔面板搭建和安装wordpress网站图文教程(附案例)

热门文章

  1. Autolayout代码实现举例-02-使用VFL
  2. Web项目中时间格式化的方法
  3. 好程序员大数据入门学习之Hadoop技术优缺点 1
  4. CF1106F Lunar New Year and a Recursive Sequence(矩阵快速幂+bsgs+exgcd)
  5. 在GeoServer里设置图层的默认自定义样式,出现不显示预览图的情况(不起作用)...
  6. 13. 使用类 【连载 13】
  7. 堆排序(C语言实现)
  8. jQuery 5 条件选择器
  9. NIS 病毒库 更新 地址
  10. eigrp 非等值负载均衡