博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL高级查询
阅读量:7126 次
发布时间:2019-06-28

本文共 1690 字,大约阅读时间需要 5 分钟。

hot3.png

连接查询

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

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

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

连接查询分类: SQL中将连接查询分成四类:

  • 内连接
  • 外连接
  • 自然连接
  • 交叉连接

交叉连接 cross join

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

基本语法:

左表 cross join 右表 或 from 左表,右表;

内连接: [inner] join,

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

基本语法:

左表 [inner] join 右表 on 左表.字段 = 右表.字段;

on表示连接条件: 条件字段就是代表相同的业务含义(如my_student.c_id和my_class.id)

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

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

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

外连接:

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

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

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

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

基本语法:

左表 left/right join 右表 on 左表.字段 = 右表.字段;

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

联合查询

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

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

Select 语句1

Union [union选项]

Select语句2...

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

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

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

联合查询的意义:

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

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

Order by使用

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

子查询

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

子查询分类

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

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

  • From子查询: 子查询跟在from之后
  • Where子查询: 子查询出现where条件中
  • Exists子查询: 子查询出现在exists里面

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

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

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

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

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

转载于:https://my.oschina.net/liujin521/blog/1559019

你可能感兴趣的文章
ubuntu安装命令总结
查看>>
convirt管理节点安装
查看>>
unix编程之文件和目录
查看>>
COFF文件的格式
查看>>
CentOS linux启动时发现sendmail和sm-client启动特别慢
查看>>
Erlang中使用Thrift
查看>>
Java之23种设计模式解析(三)
查看>>
使用HttpClient上传文件,断点调试卡住,无法往下进行的问题
查看>>
lighttpd 集成 golang
查看>>
crontabs使用
查看>>
PostgreSQL【表的继承和分区表】
查看>>
高性能WEB开发应用指南
查看>>
cygwin 安装 php
查看>>
读达内学员陈泽就业心得有感
查看>>
codewas038: 摩斯密码之解码
查看>>
Spring Cloud Config
查看>>
Angular.js 与script.js 异步加载
查看>>
在linux中安装php错误zend_parse_parameter
查看>>
Android动画
查看>>
Android 百度地图开发之MyLocationOverlay,PopupOverlay的使用
查看>>