iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql连接查询、联合查询、子查询原理与用法实例详解
  • 568
分享到

mysql连接查询、联合查询、子查询原理与用法实例详解

mysql连接查询联合查询子查询 2022-05-12 21:05:18 568人浏览 八月长安
摘要

本文实例讲述了Mysql连接查询、联合查询、子查询原理与用法。分享给大家供大家参考,具体如下: 本文内容: 连接查询 联合查询 子查询 from子查询 where子查询

本文实例讲述了Mysql连接查询、联合查询、子查询原理与用法。分享给大家供大家参考,具体如下:

本文内容:

  • 连接查询
  • 联合查询
  • 子查询
    • from子查询
    • where子查询
    • exists子查询

首发日期:2018-04-11


连接查询:

  • 连接查询就是将多个表联合起来查询,连接查询方式有内连接、外连接、自然连接、交叉连接。连接查询使得可以同时查看多张表中数据。
    • 内连接:有条件连接,多个表之间依据指定条件连接,匹配结果是保留符合匹配结果的记录。
    • 外连接:与内连接不同的是不管匹配符不符合都保留,根据外连接连接方式来决定保留哪张表,比如保留左表的话,那么左表无法匹配右表时,保留左表数据,然后置右表字段数据为null.
    • 自然连接:有条件连接,自动依据“同名字段”连接(多个同名字段就都作为条件)。
    • 交叉连接cross join:无条件连接,将每一条记录与另外一个表的每一条记录连接(笛卡尔积),结果是字段数等于原来字段数之和,记录数等于之前各个表记录数之乘积。

-- 实验表结构
create table student(
id int,
name varchar(15),
gender varchar(15),
cid int
);
create table class(
cid int,
cname varchar(15)
);
drop table student,class;
-- 实验表数据:
insert into student values(1,"lilei","male",1),(2,"hanmeimei","male",2),(3,"jack","male",1),(4,"alice","female",4); --这里特意创建了一个class中没有的4
insert into class values(1,"linux"),(2,"python"),(3,"java"),(5,"HTML5");--这里特意创建了一个student中没有的5
select * from student;
select * from class;

imageimage

内连接:

  • 从左表中取出每一条记录,去右表中与所有的记录进行匹配,保留匹配成功的记录,并将两份记录拼接。
  • 语法:select 字段列表 from 左表 [inner] join 右表 on 左表.字段 = 右表.字段;
    • 不使用on条件的时候,结果与交叉连接相同
    
    -- 内连接
    -- select * from student inner join class; --结果与交叉连接相同
    select * from student join class on student.cid = class.cid;
    select * from student inner join class on student.cid = class.cid;
    image

外连接:

  • 与内连接不同的是主表记录不管匹配符不符合都保留,方式有左外连接、右外连接,左外连接是保留左表,右外连接是保留右表
  • 语法:
    • 左外连接:select 字段列表 from 左表 left join 右表 on 左表.字段 = 右表.字段;
    • 右外连接:select 字段列表 from 左表 right join 右表 on 左表.字段 = 右表.字段;
    
    select * from student left join class on student.cid = class.cid;
    image
    
    select * from student right join class on student.cid = class.cid;
    image

自然连接:

  • 自动匹配连接条件,系统以字段名字作为匹配模式(同名字段就作为条件,多个同名字段就都作为条件)
    • 自然内连接:类似内连接,但不提供连接条件。
    • 自然外连接:类似外连接,但不提供连接条件。
  • 语法:
    • 自然内连接:select 字段列表 from 表名 natural join 表名;
    • 自然外连接:select 字段列表 from 表名 natural left\right join 表名;
    
    select * from student natural join class;
    image
    
    select * from student natural left join class;
    image

交叉连接:

  • 将每一条记录与另外一个表的每一条记录连接
  • 语法:
    • select 字段列表 from 表名 cross join 表名;
    • select 字段列表 from 表名 ,表名;
    
    select * from student cross join class;
    select * from student,class;
    image

补充:

  • 在多个表中,为了区分每个表,以及简便使用,可以使用表别名。
      
      select * from student inner join class on student.cid = class.cid;-- 原本结果
      select id,name,gender,c.cid,cname from student as s inner join class as c on s.cid = c.cid;-- 使用表别名
  • 可以多重连接。
  • 外连接可以模拟自然连接,只需要将连接条件on 左表.字段 = 右表.字段变成"using 字段名"即可。


联合查询:

  • 联合查询是将多个查询结果在记录上进行拼接。(相当于将其他表的查询记录结果连接到第一个表的后面)【因为是拼接,所以多个查询结果的字段数必须相同】【拼接不在意数据类型,比如第一个表的第一个字段是int,但后面的表中的varchar依然可以拼接到第一列中】
  • 语法:select语句 uNIOn select语句…;
    
    select name,gender from student
    union 
    select * from class;
    -- 因为class就两个字段,所以第一个只选出两个字段
    image

补充:

  • union可以有选项,加在union 后面,all选项是不对相同去重,distinct是去重。
  • 联合查询一般用来处理同一表中以不同方法显示不同数据。(比如,想将学生各科成绩表中的两科(这里假设为Python 跟linux)同时查询出来)
  • union和order by同时使用报错时
    • 如果你想针对联合查询中的某个查询结果排序,需要将这个select语句用括号括起来。【另外,由于联合查询的拼接机制,需要在order by 后面加上limit子句才行,limit的数量可以是一个很大的值。】
    • 如果是针对最终的联合查询结果,就在最后一个select语句中使用order by 【建议给最后一个字段加上括号,再加ordery by,使用情况是有同名字段】


子查询:

  • 子查询是嵌套在查询语句中的查询。
  • 子查询按照出现的位置可以分为三类:
    • from子查询:子查询跟在from之后的;一般用在“先查出二维表,再处理”的情况。
      • 比如:
        
        -- 这是一个无意义的例子。仅为举例使用
        select cid,cname from (select * from class where cname="python") as c;
    • where子查询:子查询跟在where条件中;一般用在“先查询出指定条件再查询”的情况
      • 比如:
        
        select * from student where cid=(select cid from class where cname="python");
    • exist子查询:子查询在exist语句里面;一般用作“存在才做”的情况
      • 比如:
        
        -- 这是一个如果学生没有选择cid=1的课,那么不输出对应课程信息的例子
        select * from class where exists(select * from student where cid=1) and cid=1;
    • 事实上,有些人认为union之后跟着的也是子查询,不过这里不把这些当作子查询,只把上面几个与“查询”非常紧密相关的当作子查询。

补充:

  • 事实上,还可以根据结果来分类子查询:
    • 标量子查询,子查询得到的结果是一行一列,情况一般发生于where子查询只查询出一行一列的情况。
    • 列子查询,子查询得到的结果是一列多行,情况一般发生于where子查询查询出一列多行的情况。
    • 行子查询,子查询得到的结果是多列一行(或者多行多列) ,情况一般发生在where子查询查询出多列一行的情况。
    • 表子查询,子查询得到的结果是多行多列 ,情况一般发生在from子查询中
  • where子查询中有时候还使用一些其他关键字,如any,all,some,但对=来说,=基本可以实现他们的功能了。

更多关于mysql相关内容感兴趣的读者可查看本站专题:《Mysql查询技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库相关技巧汇总》及《MySQL常用函数大汇总》

希望本文所述对大家MySQL数据库计有所帮助。

您可能感兴趣的文档:

--结束END--

本文标题: mysql连接查询、联合查询、子查询原理与用法实例详解

本文链接: https://www.lsjlt.com/news/9554.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql连接查询、联合查询、子查询原理与用法实例详解
    本文实例讲述了mysql连接查询、联合查询、子查询原理与用法。分享给大家供大家参考,具体如下: 本文内容: 连接查询 联合查询 子查询 from子查询 where子查询 ...
    99+
    2022-05-12
    mysql 连接查询 联合查询 子查询
  • 如何使用mysql连接查询、联合查询、子查询
    这篇文章主要讲解了如何使用mysql连接查询、联合查询、子查询,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。连接查询:连接查询就是将多个表联合起来查询,连接查询方式有内连接、外...
    99+
    2022-10-18
  • 详解MySQL子查询(嵌套查询)、联结表、组合查询
    一、子查询 MySQL 4.1版本及以上支持子查询 子查询:嵌套在其他查询中的查询。 子查询的作用: 1、进行过滤: 实例1:检索订购物品TNT2的所有客户的ID = + 一般,在WHERE...
    99+
    2022-10-18
  • MySQL聚合查询与联合查询操作实例
    目录一. 聚合查询1.聚合函数(count,sum,avg...)2.GROUP BY子句3.HAVING二. 联合查询((重点)多表)1.内连接2.外连接3.自连接4.子查...
    99+
    2022-11-13
  • MySQL连接查询实例详解
    本文实例讲述了MySQL连接查询。分享给大家供大家参考,具体如下: 创建表suppliers: CREATE TABLE suppliers ( s_id int NOT NULL AUTO_...
    99+
    2022-10-18
  • mysql 子查询与连接表详情
    目录1、什么是子查询?2、自联接3、自然联接4、外部联结1、什么是子查询? 列出订购物品TNT2的所有客户: select cust_id from orders wh...
    99+
    2022-11-12
  • 实例详解mysql子查询
    子查询分类 按返回结果集分类 子查询按返回结果集的不同分为4种:表子查询,行子查询,列子查询和标量子查询。 表子查询:返回的结果集是一个行的集合,N行N列(N>=1)。表子查询经常用于父查询的FROM子句中。 ...
    99+
    2022-05-19
    MySQL 查询 MySQL 子查询
  • MySQL联合查询实现方法详解
    联合查询简单说 就是将两次查询合并在一起 例如 我们这里有一个用户表 我们先编写一段SQL select name from staff where age > 21; 查询年龄大于21的 输...
    99+
    2022-11-01
  • MySQL子查询操作实例详解
    本文实例总结了MySQL子查询操作。分享给大家供大家参考,具体如下: 定义两个表tb1和tb2 CREATE table tbl1 ( num1 INT NOT NULL); CREATE table ...
    99+
    2022-10-18
  • mysql语句写法(左连与子查询结合)实战
    select c.card_number,c.card_name,t.type_name,c.card_discount,t.type_low,c.card_integral,(c.ca...
    99+
    2022-10-18
  • MySQL 连接查询的原理和应用
    概述 MySQL最强大的功能之一就是能在数据检索的执行中连接(join)表。大部分的单表数据查询并不能满足我们的需求,这时候我们就需要连接一个或者多个表,并通过一些条件过滤筛选出我们需要的数据。 了解MySQL连接查...
    99+
    2022-05-25
    MySQL 查询 MySQL 连接查询
  • MySQL实例讲解子查询的使用
    目录子查询-嵌套查询原始查询方法自连接子查询子查询分类单行子查询子查询的编写思路HAVING中的子查询CASE中的子查询子查询中的空值问题多行子查询多行比较操作符相关子查询EXISTS与NOT EXISTS 关键...
    99+
    2023-03-02
    MySQL子查询语句 MySQL子查询写法
  • MySQL关联查询优化实现方法详解
    目录左外连接内连接INNER JOIN我们准备如下两个表,并插入数据。 #分类 CREATE TABLE IF NOT EXISTS `type` ( `id` INT(10) UNSIGNED NOT NULL AUT...
    99+
    2022-11-01
  • mysql数据库子查询的实例用法
    本篇内容介绍了“mysql数据库子查询的实例用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!#查询和Zl...
    99+
    2022-10-18
  • MySQL数据库学习之去重与连接查询详解
    目录1.去重2.连接查询使用where进行多表连接查询内连接 - 等值连接内连接 - 非等值连接内连接 - 自连接外连接 - 左右外连接三表连接1.去重 示例表内容参考此文章 有些 mysql 数据表中可能存在...
    99+
    2022-07-24
    MySQL去重 MySQL连接查询 MySQL去重连接查询
  • mysql的JOIN用法详解-附带查询示例
    mysql的JOIN用法详解-附带查询示例 在 SQL 中,JOIN 是用于将多个表中的数据连接在一起的操作。它通过指定连接条件将两个或多个表中符合条件的行组合起来,产生一个新的结果集。 SQL...
    99+
    2023-09-23
    mysql android 数据库
  • MySQL使用集合函数进行查询操作实例详解
    本文实例讲述了MySQL使用集合函数进行查询操作。分享给大家供大家参考,具体如下: COUNT函数 SELECT COUNT(*) AS cust_num from customers; SEL...
    99+
    2022-10-18
  • MySQL系列多表连接查询92及99语法示例详解教程
    目录1.笛卡尔积现象2.连接查询知识点概括1)什么是连接查询?2)连接查询的分类3.内连接讲解1)等值连接:最大特点是,连接条件为等量关系。2)sql92语法和sql99语法的区别。...
    99+
    2022-11-12
  • **MySQL关联查询七种方式详解与应用实例**,你的掌握了吗
    当我们需要从多个表中查询数据时,就需要使用关联查询了。MySQL支持七种不同类型的关联查询:内连接、左连接、右连接、全外连接、交叉连接、自连接和自然连接。本文将讲解这七种关联查询的SQL语句、示例以及...
    99+
    2023-09-25
    mysql 数据库 sql
  • MySQL利用UNION连接2个查询排序失效详解
    概述 UNION 连接数据集关键字,可以将两个查询结果集拼接为一个,会过滤掉相同的记录 UNION ALL 连接数据集关键字,可以将两个查询结果集拼接为一个,不会过滤掉相同的记录 今天在接...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作