MySQL数据高级查询之连接查询、联合查询、子查询

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、连接查询

连接查询: 将多张表(>=2)进行记录的连接(按照某个指定的条件进行数据拼接)。

连接查询的意义: 在用户查看数据的时候,需要显示的数据来自多张表.

连接查询: join, 使用方式: 左表 join 右表;左表: 在join关键字左边的表;右表: 在join关键字右边的表

连接查询分类:SQL中将连接查询分成四类: 内连接,外连接,自然连接和交叉连接

交叉连接:交叉连接: cross join, 从一张表中循环取出每一条记录, 每条记录都去另外一张表进行匹配: 匹配一定保留(没有条件匹配), 而连接本身字段就会增加(保留),最终形成的结果叫做: 笛卡尔积。但是基本不会用到(反正我是从没有用过)

基本语法: 左表 cross join 右表 或 from 左表,右表;

MySQL数据高级查询之连接查询、联合查询、子查询

MySQL数据高级查询之连接查询、联合查询、子查询

内连接: [inner] join, 从左表中取出每一条记录,去右表中与所有的记录进行匹配: 匹配必须是某个条件在左表中与右表中相同最终才会保留结果,否则不保留.

基本语法:左表 [inner] join 右表 on 左表.字段 = 右表.字段; on表示连接条件: 条件字段就是代表相同的业务含义(如my_student.c_id和my_class.id)

字段别名以及表别名的使用: 在查询数据的时候,不同表有同名字段,这个时候需要加上表名才能区分, 而表名太长, 通常可以使用别名.

内连接可以没有连接条件: 没有on之后的内容,这个时候系统会保留所有结果(笛卡尔积)

内连接还可以使用where代替on关键字,但效率差很多。

MySQL数据高级查询之连接查询、联合查询、子查询

MySQL数据高级查询之连接查询、联合查询、子查询

外连接: 以某张表为主,取出里面的所有记录, 然后每条与另外一张表进行连接: 不管能不能匹配上条件,最终都会保留: 能匹配,正确保留; 不能匹配,其他表的字段都置空NULL.

外连接分为两种: 是以某张表为主: 有主表

left join: 左外连接(左连接), 以左表为主表

right join: 右外连接(右连接), 以右表为主表

基本语法: 左表 left/right join 右表 on 左表.字段 = 右表.字段;

MySQL数据高级查询之连接查询、联合查询、子查询

MySQL数据高级查询之连接查询、联合查询、子查询

自然连接:略(基本不用自然连接)

二、联合查询

联合查询:将多次查询(多条select语句), 在记录上进行拼接(字段不会增加)

基本语法:多条select语句构成: 每一条select语句获取的字段数必须严格一致(但是字段类型无关)

Select 语句1

Union [union选项]

Select语句2...

Union选项: 与select选项一样有两个

All: 保留所有(不管重复)

Distinct: 去重(整个重复): 默认的

MySQL数据高级查询之连接查询、联合查询、子查询

MySQL数据高级查询之连接查询、联合查询、子查询

联合查询只要求字段一样, 跟数据类型无关

MySQL数据高级查询之连接查询、联合查询、子查询

联合查询的意义:

1. 查询同一张表,但是需求不同: 如查询学生信息, 男生身高升序, 女生身高降序.

2. 多表查询: 多张表的结构是完全一样的,保存的数据(结构)也是一样的.

Order by使用

在联合查询中: order by不能直接使用,需要对查询语句使用括号才行;另外,要orderby生效: 必须搭配limit: limit使用限定的最大数即可.

MySQL数据高级查询之连接查询、联合查询、子查询

三、子查询

子查询: 查询是在某个查询结果之上进行的.(一条select语句内部包含了另外一条select语句).

子查询分类

子查询有两种分类方式: 按位置分类;和按结果分类

  • 按位置分类: 子查询(select语句)在外部查询(select语句)中出现的位置

  1. From子查询: 子查询跟在from之后

  2. Where子查询: 子查询出现where条件中

  3. Exists子查询: 子查询出现在exists里面

  • 按结果分类: 根据子查询得到的数据进行分类(理论上讲任何一个查询得到的结果都可以理解为二维表)

  1. 标量子查询: 子查询得到的结果是一行一列

  2. 列子查询: 子查询得到的结果是一列多行

  3. 行子查询: 子查询得到的结果是多列一行(多行多列) (1,2,3出现的位置都是在where之后)

  4. 表子查询: 子查询得到的结果是多行多列(出现的位置是在from之后)

标量子查询

需求: 找到分类为科技的所有文章标题

MySQL数据高级查询之连接查询、联合查询、子查询

MySQL数据高级查询之连接查询、联合查询、子查询

MySQL数据高级查询之连接查询、联合查询、子查询

列子查询

这个时候我就想起以前面试的情形,当时有一道题,给我一个表,让我找出语文和数学都及格人的名字。表是这样的:

MySQL数据高级查询之连接查询、联合查询、子查询

MySQL数据高级查询之连接查询、联合查询、子查询

行子查询

行子查询: 返回的结果可以是多行多列(一行多列)

需求:找出年龄最大且身高最高的人

MySQL数据高级查询之连接查询、联合查询、子查询

方案一:

MySQL数据高级查询之连接查询、联合查询、子查询

方案二:

MySQL数据高级查询之连接查询、联合查询、子查询

表子查询

表子查询: 子查询返回的结果是多行多列的二维表: 子查询返回的结果是当做二维表来使用

需求:找出每个人最好的成绩

MySQL数据高级查询之连接查询、联合查询、子查询

MySQL数据高级查询之连接查询、联合查询、子查询

Exists子查询

Exists: 是否存在的意思, exists子查询就是用来判断某些条件是否满足(跨表), exists是接在where之后: exists返回的结果只有0和1.

需求:如果存在的话身高大于2米的人,列出表中所有数据

MySQL数据高级查询之连接查询、联合查询、子查询

MySQL数据高级查询之连接查询、联合查询、子查询

 

转载于:https://my.oschina.net/u/2391658/blog/831563

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle11g解锁报错SP2-0306-选项无效

普通用户登录isqlplus: (一)在浏览器中输入URL (http://localhost:5560/isqlplus)。显示登录界面 这里只能用普通用户进行登录,因为要用sys登录,必须用sys的DBA身份登录。所以用普通用户SCOTT,但是还未解锁 问题:SP2-0…

java web登录action_JavaWeb中登陆功能

首先我们要JavaWeb登陆的基本流程:JSP页面发送请求——>Servlet——>Servlet通过调用方法从数据库中得到数据并将结果返回页面我们先建立三个jsp页面,包括login.jsp(登陆页面)、index.jsp(显示登陆成功后的信息)、error.jsp(登录失败的页面)&#…

Android Download Manager用法大全

http://www.trinea.cn/android/android-downloadmanager/ http://www.trinea.cn/android/android-downloadmanager-pro/转载于:https://www.cnblogs.com/soaringEveryday/articles/4135204.html

Chrome浏览器无法观看视频,一直提示“adobe flash player 已过期” ?

很多新用户在安装了Chrome浏览器或者更新过的的时候,经常提示“ adobe flash player 已过期”的问题,反复提示,导致无法观看视频。于是从网上也找了很多办法都没有解决。这里给大家提供一个最完美的解决方案。经亲自测试,完美解决…

关于JVM的垃圾回收GC的一些记录

目录 一、JVM内存区域划分 二、从一个基本问题开始引入垃圾回收 三、GC作用的区域 三、如何确定一个对象是否可以被当成垃圾进行回收 (1)引用计数法 (2)可达性分析算法 (3)引用的类型 (3…

同步与互斥

有数据交互的进程之间的关系主要有两种,同步与互斥.所谓互斥,是指在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行.所谓同步,是指在不同进程之间的若干程序片断,它们的…

java 分号 转义_java – 正则表达式和转义和未转义的分隔符

你可以使用正则表达式(?:\\.|[^;\\])*匹配未转义分号之间的所有文本:List matchList new ArrayList();try {Pattern regex Pattern.compile("(?:\\\\.|[^;\\\\])*");Matcher regexMatcher regex.matcher(subjectString);while (regexMatcher.find())…

OpenCV cv::Mat类

using namespace cv; 1、Mat的声明: Mat mMat(rows, cols, type); Mat mMat(Size(width,height), type); type指矩阵中元素的类型,可以使CV_8U(无符号单字节像素),CV_8S(有符号单字节像素)&…

ubuntu-E:Encountered a section with no Package: header的解决办法

ubuntu 11.04 出现了如下错误: E:Encountered a section with no Package: header 终端中输入以下两条命令: sudo rm /var/lib/apt/lists/* -vfsudo apt-get update 执行完了命令之后,软件更新器应该会自动要求更新的,更新便是。 …

java new collection_使用Java 8新增的Predicate操作Collection集合

Java 8 起为 Collection 集合新增了一个 removeIf(Predicate filter) 方法,该方法将会批量删除符合 filter 条件的所有元素。该方法需要一个 Predicate 对象作为参数,Predicate 也是函数式接口,因此可使用 Lambda 表达式作为参数。如下程序示…

codevs1219 骑士遍历(棋盘DP)

题目描述 Description设有一个n*m的棋盘(2≤n≤50,2≤m≤50),如下图,在棋盘上有一个中国象棋马。 规定: 1)马只能走日字 2)马只能向右跳 问给定起点x1,y1和终点x2,y2,求出马从x1,y1出发到x2,y2的…

php显示错误

error_reporting(E_ALL);ini_set(display_errors, 1);//将出错信息输出到一个文本文件ini_set(error_log, dirname(__FILE__) . /error_log.txt);

java ssh免密登录_SSH公钥、私钥配置(SSH免密码登录方式)

1.首先使用想要发起ssh免密访问的用户A登录Linux(简称客户端Linux)2.进入该用户的家目录(cd ~),看是否有.ssh文件夹(linux中以.开头文件夹是隐藏的,使用ll -a进行查看),如果没有则创建(mkdir ~/.ssh),并修改访问权限(chmod 700 ~…

最近学到的一点东西

1 rpc 2 socket,工作很多年了,才明白这货的重要性,不过什么样的通信方式,最底层的连接得用它 3 sip协议 4调试,一定要确认异常出错位置,不能乱猜 5 某些诡异的问题,可以依靠在加一层解决&#x…

win8, VS2013 .NET 4.5在哪找svcutil.exe?

我这个纠结呀,公司用win8, .NET 4.5。想做一个很简单的项目,就是wcf宿主iis,项目根目录下有aspx文件和svc文件。于是参考了一个博客http://www.cnblogs.com/yjmyzz/archive/2008/08/19/1270961.html,[原创]WCF入门级使…

java tbase_使用Java从firebase获取数据

我在下面的代码中遇到了一个问题,该代码几乎逐字地从Firebase SDK Java文档中复制到了工作中.我是一个真正的语言的新手,比如来自PHP和JavaScript的webdev背景的Java.基本上,addListenerForSingleValueEvent没有触发以返回数据.我注意到了这一点,因为系统打印输出没有触发,因此…

错误内存【读书笔记】C程序中常见的内存操作有关的典型编程错误

题记:写这篇博客要主是加深自己对错误内存的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。 对C/C程序员来讲,内存管理是个不小的挑战,绝对值得慎之又慎,否则让由上万行代码构成的模块…

Spring_HelloWord

环境:IntelliJ 14 ; jdk1.8 Spring操作步骤 1.新建项目---Spring Batch2.IntelliJ会自动加载jar包3.现在就可以在src目录下写Java类文件了4.将相应的类部署在XML配置文件spring-config.xml中 (Eclipse需要手动创建,貌似名为bean.x…

java 按钮组_java中创建一个按钮组,有10个按钮,分别写着0,1,2,,3。。。。9

展开全部用Java创建按钮组32313133353236313431303231363533e59b9ee7ad9431333332643966的程序如下:import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;public class…

Starling 2D框架简介

本系列是对Introducing Starling pdf的翻译,下文是对adobe开发人员中心的一片日志的转载,地址为http://www.adobe.com/cn/devnet/flashplayer/articles/introducing_Starling.html Starling 是在 Stage3D APIs 基础上开发的一种 ActionScript 3 2D 框架&…