前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >你真的会玩SQL吗?和平大使 内连接、外连接

你真的会玩SQL吗?和平大使 内连接、外连接

作者头像
欢醉
发布于 2018-01-22 10:27:39
发布于 2018-01-22 10:27:39
1.4K00
代码可运行
举报
文章被收录于专栏:james大数据架构james大数据架构
运行总次数:0
代码可运行

你真的会玩SQL吗?系列目录

你真的会玩SQL吗?之逻辑查询处理阶段

你真的会玩SQL吗?和平大使 内连接、外连接

你真的会玩SQL吗?三范式、数据完整性

你真的会玩SQL吗?查询指定节点及其所有父节点的方法

你真的会玩SQL吗?让人晕头转向的三值逻辑

你真的会玩SQL吗?EXISTS和IN之间的区别

你真的会玩SQL吗?无处不在的子查询

你真的会玩SQL吗?Case也疯狂

你真的会玩SQL吗?表表达式,排名函数

你真的会玩SQL吗?简单的 数据修改

你真的会玩SQL吗?你所不知道的 数据聚合

你真的会玩SQL吗?透视转换的艺术

你真的会玩SQL吗?冷落的Top和Apply

你真的会玩SQL吗?实用函数方法汇总

你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(上)

你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(下)

大多数人一般写多表查询会这样写select * from tbA ,tbB  没有用到JOIN关键字,太Low了,官网标准建议是用JOIN明确表间的关系,下面具体来讲。

连接类型:

  1. 交叉联接 得到所连接表的所有组合 (笛卡儿集)cross join
  2. 内联接得到连接表的满足条件的记录组合inner join  on
  3. 外联接(左、右)得到一个表的所有行,及其余表满 足连接条件的行 full | left | right  outer join  on

交叉联接

  在这类联接的结果集内,两个表中每两个可能成对的行占一行。

    但是如果在交叉联接中加入where 子句就相当与是内联接

    例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT title, pub_name

       FROM titles Cross JOIN publishers

       Where titles.pub_id = publishers.pub_id

这就相当于我们一最开始的写法:SELECT title, pub_name  FROM titles , publishers Where titles.pub_id = publishers.pub_id

执行过程:

内联接

仅显示两个联接表中的匹配行的联接。(这是查询设计器中的默认联接类型。)

例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT title, pub_name

       FROM titles INNER JOIN publishers

       ON titles.pub_id = publishers.pub_id

   执行过程:

左向外联接

包括第一个命名表("左"表,出现在 JOIN 子句的最左边)中的所有行。不包括右表中的不匹配行。

例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT titles.title_id,titles.title,publishers.pub_name

        FROM titles LEFT OUTER JOIN publishers

        ON titles.pub_id = publishers.pub_id

右向外联接

包括第二个命名表("右"表,出现在 JOIN 子句的最右边)中的所有行。不包括左表中的不匹配行。

例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT titles.title_id, titles.title,publishers.pub_name

  FROM titles RIGHT OUTER JOIN publishers

        ON titles.pub_id = publishers.pub_id

 执行过程:

完整外部联接

包括所有联接表中的所有行,不论它们是否匹配。

例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT titles.title_id, titles.title,  publishers.pub_name

        FROM titles FULL OUTER JOIN publishers

        ON titles.pub_id = publishers.pub_id

练习:

此后用到的用例数据库是SQL2008里面的

用例数据库文件:链接:http://pan.baidu.com/s/1qW1QxA0 密码:dqxx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*返回值2007年2月12日下过订单的客户,以及他们的订单。同时也返回在2007年2月12日没有下过订单的客户。
涉及到表:Sales.Customers表和Sales.Orders表。
期望的输出(按简略格式显示):
*/
custid      companyname     orderid     orderdate
----------- --------------- ----------- -----------------------
72          Customer AHPOP  NULL        NULL
58          Customer AHXHT  NULL        NULL
25          Customer AZJED  NULL        NULL
18          Customer BSVAR  NULL        NULL
91          Customer CCFIZ  NULL        NULL
...
33          Customer FVXPQ  NULL        NULL
53          Customer GCJSG  NULL        NULL
39          Customer GLLAG  NULL        NULL
16          Customer GYBBY  NULL        NULL
4           Customer HFBZG  NULL        NULL
5           Customer HGVLZ  10444       2007-02-12 00:00:00.000
42          Customer IAIJK  NULL        NULL
34          Customer IBVRG  NULL        NULL
63          Customer IRRVL  NULL        NULL
73          Customer JMIKW  NULL        NULL
15          Customer JUWXK  NULL        NULL
...
21          Customer KIDPX  NULL        NULL
30          Customer KSLQF  NULL        NULL
55          Customer KZQZT  NULL        NULL
71          Customer LCOUJ  NULL        NULL
77          Customer LCYBZ  NULL        NULL
66          Customer LHANT  10443       2007-02-12 00:00:00.000
38          Customer LJUCA  NULL        NULL
59          Customer LOLJO  NULL        NULL
36          Customer LVJSO  NULL        NULL
64          Customer LWGMD  NULL        NULL
29          Customer MDLWA  NULL        NULL
...

参考SQL:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--answer:
select c.custid,c.companyname,o.orderid,o.orderdate
from Sales.Customers as c
left join Sales.Orders as o
on c.custid=o.custid 
and o.orderdate='2007-2-12'
/*
1.将表Sales.Customers别名为c和表Sales.Orders别名为o应用ON筛选器以custid和o.orderdate='2007-2-12'为条件左外连接,生成虚拟表VT1,
2.添加外部行,外部行中非保留表中的属性被赋值为NULL,生成虚拟表VT2
3.处理select列表,从虚拟表VT2中查找出c.custid,c.companyname,o.orderid,o.orderdate生成虚拟表VT3
*/

注意
and o.orderdate='2007-2-12' 改成 where  o.orderdate='2007-2-12',请注意这个结果又是什么呢?
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*返回没有下过订单的客户。
涉及的表:Sales.Customers表和Sales.Orders表。
期望的输出:
*/
custid      companyname
----------- ---------------
22          Customer DTDMN
57          Customer WVAXS

参考SQL:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--answer:
select c.custid,c.companyname
from Sales.Customers as c
left join Sales.Orders as o
on c.custid=o.custid 
where o.orderid is null
/*
1.将表Sales.Customers别名为c和表Sales.Orders别名为o应用ON筛选器以custid为条件左外连接,生成虚拟表VT1,
2.添加外部行,外部行中非保留表中的属性被赋值为NULL,生成虚拟表VT2
3.应用where筛选器选出o.orderid 为 null的数据生成虚拟表VT3
4.处理select列表,查找出c.custid,c.companyname生成虚拟表VT4
*/
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-10-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
windows提权看这一篇就够了
windows在日常的渗透中经常遇到,而在内网之前,经常会在所拿到的跳板机进行提权,这样后面横向,内网才能更好的展开(抓hash,必须得系统或管理员权限),所以这里做了一次window提权总结,建议收藏,反复看,熟能生巧!
Gamma实验室
2021/01/11
17.2K0
windows提权看这一篇就够了
Windows 提权
当我们通过webshell拿到一个普通用户的权限,由于是普通用户所以很多操作都会受限制。这就需要通过一定的方法将普通用户提权到更高权限的用户。
鸿鹄实验室
2022/11/02
2K0
Windows 提权
权限提升分析及防御
本篇继续阅读学习《内网安全攻防:渗透测试实战指南》,是第四章权限提升分析及防御,本章主要分析了系统的内核溢出漏洞提权、利用Windows操作系统错误配置提权、利用组策略首选项提权、绕过UAC提权、令牌窃取及无凭证条件下的权限获取,并提出了相应的安全防范措施
中龙技术
2022/09/29
1.6K0
Windows 权限提升
本篇内容是内网安全攻防:渗透测试实战指南时的阅读笔记,笔记大部分内容均来自此书,另外一部分来源于一些公开文档和非公开文档,参考链接中均有注明。
重生信息安全
2020/07/15
3.9K0
Windows 权限提升
[干货基础]域渗透学习
Kerberos是一种由MIT提出的一种计算机网络授权协议,旨在通过使用加密技术为客户端/服务端应用程序提供强大的认证服务。域内访问其他应用应遵循服务Kerberos协议。完整的域内应用访问流程如图所示,首先由客户端向域控发起认证请求,域控验证用户是否属于合法域用户,若合法则由域控响应主机请求分发TGT认证票据(黄金票据可伪造TGT),拿到证书后主机可以继续请求访问域内的应用服务,若权限符合域控会返回允许主机访问域内某应用服务的TGS票据,主机拿着TGS票据访问对应的应用服务,该应用服务器验证TGS通过后主机即可顺利访问应用服务
天钧
2020/11/03
1.7K0
[干货基础]域渗透学习
安全杂谈-Windows下的几种提权方式的粗略汇总
随着系统管理员的安全意识的普遍提高,提权越来越成为广大渗透测试者所面临共同问题。本人水平有限,粗浅地总结了下几种提权方式,以及一些个人看法,并配合相应的演示。可能对实战没什么太直接的帮助,算是帮大家温习下基础吧。 实验环境是kali和win2008,有时候用win10,毕竟个人用户还是win10多啊。
用户1631416
2019/09/24
1K0
安全杂谈-Windows下的几种提权方式的粗略汇总
红队测试之Windows提权小结
本节主要针对Windows操作系统下的权限提升进行介绍,提权是后渗透重要的一环节,在权限较低的情况下,站在攻击者的视角进行内部网络安全测试、系统安全测试、应用安全测试等方面会出现“束缚”,所测试出的质量与结果也会不同。本文基于Win操作系统下分别从内核漏洞、权限配置、DLL注入、注册表等方面展开介绍,其中包含漏洞本身的介绍、漏洞复现过程等内容的展现。该提权内容的阅读没有前后顺序,可根据读者自身所需进行全文阅读或某方向内容的阅读。
FB客服
2021/03/09
1.2K0
红队测试之Windows提权小结
我所了解的内网渗透 - 内网渗透知识大总结
一般想知道哪一台是域控知道自己内网的DNS就可以了,一般域控安装都有安装DNS有些不止一台,其次是通过扫描获取开放端口为389机器或者使用NLTEST命令查看。最后就是各种网络查看查看域控是哪台主机
HACK学习
2019/08/06
4.4K0
我所了解的内网渗透 - 内网渗透知识大总结
Window 提权基础
再加上个人的理解写出的关于 Windows 提权基础的文章,其中有些地方因为不太实用所以做了适当修改,感谢 @hl0rey 的帮助和建议。
信安之路
2018/08/08
8430
Window 提权基础
Windows提权的几种常用姿势
当获取主机权限时,我们总是希望可以将普通用户提升为管理员用户,以便获得高权限完全控制目标主机。Windows常用的提权方式有:内核提权、数据库提权、系统配置错误提权、组策略首选项提权、Bypass UAC提权、令牌窃取提权等姿势。
Bypass
2021/01/18
1.8K0
Windows提权的几种常用姿势
域安全篇:寻找SYSVOL里的密码和攻击GPP
在2015年的黑帽大会和DEFCON上,我曾谈过黑客会如何从域用户提权到域管理。 密码的难题 每台Windows主机有一个内置的Administrator账户以及相关联的密码。大多数组织机构为了安全,可能都会要求更改密码,虽然这种方法的效果并不尽如人意。标准的做法是利用组策略去批量设置工作站的本地Administrator密码。 但是这样又会出现另一个问题,那就是所有的电脑都会有相同的本地Administrator密码。也就是说,如果获取了一个系统的Administrator认证凭据,黑客就可以获取他们
FB客服
2018/02/07
2.3K0
域安全篇:寻找SYSVOL里的密码和攻击GPP
metasploit、powershell之Windows错误系统配置漏洞实战提权
我们在获得目标机一个普通的权限时,除了常规提权方法外,还可以通过查找目标主机错误的系统配置和漏洞来获取系统权限。本节所讲的“Trusted Service Paths(可信任服务路径)漏洞”和“系统服务的错误权限配置漏洞”绝对是你值得尝试的一个环节。
Ms08067安全实验室
2019/12/18
1.3K0
metasploit、powershell之Windows错误系统配置漏洞实战提权
Active Directory渗透测试典型案例(2) 特权提升和信息收集
本文转载自:https://www.cnblogs.com/backlion/p/10843067.html
用户1631416
2019/05/30
2.9K0
一篇文章精通PowerShell Empire 2.3(下)
Empire主要用于后渗透。所以信息收集是比较常用的一个模块,我们可以使用searchmodule命令搜索需要使用的模块,这里通过键入“usemodule collection”然后按Tab键来查看完整列表,如下图所示。
HACK学习
2019/08/07
1K0
Install Elevated权限提升
注册表键AlwaysInstallElevated是一个策略设置项,Window允许低权限用户以System权限运行安装文件,如果启用次策略设置项,那么任何权限的用户都能以NT AUTHORITY\SYSTEM权限来安装恶意的MSI文件,从安全的角度来看,攻击者可能会滥用这一点,以便将其权限升级到系统级别。
Al1ex
2021/07/21
6770
Install Elevated权限提升
windows提权系列上篇
在渗透测试中,提升自己的权限是经常遇到的问题,往往在渗透中最容易获取的权限就是一个webshell,如果网站是架设在Windows系统上的,这时就可能遇到这样的问题,还有一种情况是在做横向渗透的时候,收集到一些可以远程连接桌面的帐号,这是也需要,在实际的渗透中有很多的地方会需要这个操作,这个系列就主要介绍各种提权的方式。
信安之路
2018/08/08
9430
windows提权系列上篇
内网渗透 | 内网中的信息收集
下文仅限于域内的信息收集,均不会涉及域内认证原理等概念,后面会对windows认证方式单独写一篇总结。
HACK学习
2020/08/27
3.1K0
Windows提权方法汇总
Windows下服务的权限通常是SYSTEM。如果我们能够替换服务的启动程序为我们的恶意程序(如反弹shell),即相当于获得了SYSTEM权限,达到了提权的目的。 无引号服务路径有可能会导致这种情况的发生。 所谓无引号服务路径,就是服务启动程序的路径中包含了空格且未被引号包含起来。比如这样
ConsT27
2022/02/11
1.4K0
Windows提权方法汇总
Metasploit、powershell之Windows错误系统配置漏洞实战提权
01 引言 我们在获得目标机一个普通的权限时,除了常规提权方法外,还可以通过查找目标主机错误的系统配置和漏洞来获取系统权限。本节所讲的“Trusted Service Paths(可信任服务路径)漏洞
FB客服
2018/02/24
1.9K0
Metasploit、powershell之Windows错误系统配置漏洞实战提权
内网渗透 | 浅谈域渗透中的组策略及gpp运用
最近在实战过程中遇到了组策略,发现攻击面其实挺宽广的,这里记录下自己的分析和学习过程。
HACK学习
2021/06/24
3K0
内网渗透 | 浅谈域渗透中的组策略及gpp运用
相关推荐
windows提权看这一篇就够了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验