博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL 左外连接,右外连接,内连接 | GRUP BY, HAVING
阅读量:6259 次
发布时间:2019-06-22

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

hot3.png

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 

right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录

inner join(等值连接) 只返回两个表中联结字段相等的行

假设有A,B两个表。   表A记录如下:  aID     aNum  1     a20050111  2     a20050112  3     a20050113  4     a20050114  5     a20050115   表B记录如下:  bID     bName  1     2006032401  2     2006032402  3     2006032403  4     2006032404  8     2006032408   --------------------------------------------  1.left join  sql语句如下:   select * from A  left join B   on A.aID = B.bID   结果如下:  aID     aNum     bID     bName  1     a20050111    1     2006032401  2     a20050112    2     2006032402  3     a20050113    3     2006032403  4     a20050114    4     2006032404  5     a20050115    NULL     NULL   (所影响的行数为 5 行)  结果说明:  left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.  换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).  B表记录不足的地方均为NULL.  --------------------------------------------  2.right join  sql语句如下:   select * from A  right join B   on A.aID = B.bID   结果如下:  aID     aNum     bID     bName  1     a20050111    1     2006032401  2     a20050112    2     2006032402  3     a20050113    3     2006032403  4     a20050114    4     2006032404  NULL     NULL     8     2006032408   (所影响的行数为 5 行)  结果说明:  仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.  --------------------------------------------  3.inner join  sql语句如下:   select * from A  innerjoin B   on A.aID = B.bID   结果如下:  aID     aNum     bID     bName  1     a20050111    1     2006032401  2     a20050112    2     2006032402  3     a20050113    3     2006032403  4     a20050114    4     2006032404   结果说明:  很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.  --------------------------------------------  PS:   LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。    语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2    说明:table1, table2参数用于指定要将记录组合的表的名称。  field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。  compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。  如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误    注:left和right是外连接,Inner是内连接。 多看看SQL的帮助就明白了

group .. by.. having

含有聚合函数分组时使用

group .. by.. 是分组, having是筛选 (此时不能用where,只能用having筛选, where用在group by之前)

select deptno, sum(sale) as total_sale from emp where sale > 1200 group by deptno having sum(sale) > 8500 order by deptno;

--含聚合函数 sum, 

-- group by deptno, 根据deptno分组, 安装deptno统计各deptno的总sale

-- having sum(sale)>8500, 只统总sale大于8500的deptno

-- order by deptno, 根据deptno升序

非聚集函数可以用where

create table tmp as select min(hisid) as hisid from tbl_abnormalep where addtime>'2014-04-02' group by epid;

distinct 可以和group by类似, 它的意思是过滤实现不重复

select distinct epid from ep;

转载于:https://my.oschina.net/1123581321/blog/208918

你可能感兴趣的文章
Elasticsearch之head插件安装之后的浏览详解
查看>>
zabbix监控-基本原理介绍
查看>>
循环神经网络(RNN)模型与前向反向传播算法
查看>>
使用bash编写Linux shell脚本--参数和子壳
查看>>
现代软件工程讲义 5 项目经理 Program Manager
查看>>
DotNet语音技术实现(实现电脑发音)
查看>>
Qt中用正則表達式来推断Text的语种,主要通过推断unicode的编码范围
查看>>
ASP.NET中 HyperLink(超链接)的使用
查看>>
Java异常
查看>>
[转载]全面深入了解电脑死机的原因
查看>>
html5-web本地存储
查看>>
CentOS 6.5 安装 Redis 执行 make #error &quot;Newer version of jemalloc required&quot;
查看>>
12.遍历二叉树与二叉树的建立
查看>>
Delphi 关键字详解[整理于 "橙子" 的帖子]
查看>>
Session的配置
查看>>
DropDownList中显示无限级树形结构
查看>>
光学字符识别引擎 Tesseract-ocr 安装过程
查看>>
定时备份windows机器上的文件到linux服务器上的操作梳理(rsync)
查看>>
MOSS程序中如何发Mail?
查看>>
错误:”未能加载文件或程序集“System.Web.Mvc, Version=2.0.0.0” 解决方法
查看>>