MySQL中常见的连接查询方式都有哪些?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL中常见的连接查询方式都有哪些?相关的知识,希望对你有一定的参考价值。

参考技术A mysql中常见的连接查询有:等值连接,使用=连接两列数据,所有能够匹配的结果都会被显示出来;内连接,关键字INNER JOIN ON,连接效果等同于等值连接;左连接,关键字LEFT JOIN ON,关键字左侧的表的所有数据均显示,关键字右侧的表匹配内容显示,无对应内容使用NULL填充;右连接,关键字RIGHT JOIN ON,关键字右侧的表的所有数据均显示,关键字左侧的表匹配内容显示,无对应内容使用NULL填充;一般情况下,左连接和右连接可以实现相同的连接效果。如果对这部分内容感兴趣,可以从黑马程序员获取测试相关课程了解一下。本回答被提问者采纳 参考技术B -mysql数据库的十种查询方式

-- (1)查询时起别名
SELECT id AS '编号',NAME AS '姓名',age AS '年龄'
FROM student;

-- (2)查询时添加常量列
SELECT id AS '编号',NAME AS '姓名',age AS '年龄',
'软件工程' AS '班级' FROM student;

-- (3)查询时合并列
-- 注意:只能合并数值列
SELECT id,NAME,age,math,english,
(math+english) AS '总成绩' FROM student;

-- (4)查询时去除重复
SELECT DISTINCT(address) FROM student;
-- 另一种方式
SELECT DISTINCT address FROM student;

-- (5)条件查询
-- 1.逻辑条件(and与 or或)
-- 1.1查询id=1且age=18的学生信息
SELECT * FROM student WHERE id=1 AND age=18;
-- 1.2查询age=18或age=20的学生
SELECT * FROM student WHERE age=18 OR age=20;
-- 1.3查询(id=1且age=18)或者(age=20)的学生
SELECT * FROM student WHERE id=1 AND age=18 OR age = 20;

-- 2.比较条件(> < >= <= = <>(不等于))
-- 2.1查询年龄>=19的学生
SELECT * FROM student WHERE age >= 19;
-- 2.2查询年龄大于等于18且id不为2的学生
SELECT * FROM student WHERE age>=18 AND id<>2;
-- 2.3查询id大于1或者age小于等于19的学生
SELECT * FROM student WHERE id> 1 OR age <=19;
-- 2.4查询姓名不为''空字符串的学生
-- 注意:<>''将空字符串和null都去除了
SELECT * FROM student WHERE NAME <> '';

-- 3.判空条件(is not null不为空,is null为空)
-- 3.1查询姓名为null的学生
SELECT * FROM student WHERE NAME IS NULL;
-- 3.2查询姓名不为null的学生
-- 注意:''空字符串和null是不同的
SELECT * FROM student WHERE NAME IS NOT NULL;

-- 4.模糊查询(like)
-- %表示占位符或统配符,代表任意字符串或什么都不写
-- _表示占位符,代表任意单个字符
-- 4.1查询姓张的学生
SELECT * FROM student WHERE NAME LIKE '张%';
-- 4.2查询姓名中包含'三'的学生
SELECT * FROM student WHERE NAME LIKE '%三%';
-- 4.3查询名字中包含三的学生,且名字为3个字
SELECT * FROM student WHERE NAME LIKE '_三_';

-- (6)聚合函数
-- max()最大值 min()最小值 AVG()平均值
-- round()保留几位小数 count()统计记录数
-- 1.求出数学成绩的最高分
SELECT MAX(math) FROM student;
-- 2.查询数学成绩最高分的学生信息
-- 使用子查询(in),表示在某个范围
SELECT * FROM student WHERE math IN
(SELECT MAX(math) FROM student);
-- 3.求出英语成绩的最低分
SELECT MIN(english) FROM student;
-- 4.求数学成绩的平均成绩
SELECT AVG(math) FROM student;
-- 5.保留2位小数(四舍五入)
SELECT ROUND(math,2) FROM student;
-- 6.统计姓名字段有多少条记录
-- 注意:不包含null数据
SELECT COUNT(NAME) FROM student;
-- 7.查询student里共有多少条记录(数据)
-- *通配符,表示查询所有字段
SELECT COUNT(*) FROM student;

-- (7)查询后排序(order by)
-- 注意:order by必须写在where条件的后面
-- asc升序:按照字典序a-z从小到大排序
-- desc降序:按照字典序从大到小排序
-- 1.对英语成绩降序排序
SELECT * FROM student ORDER BY english DESC;
-- 2.对英语成绩降序排序,对数学成绩升序排序
-- 注意:先按照英语成绩降序排序,
-- 当英语成绩相同时按数学成绩升序排序
SELECT * FROM student ORDER BY english DESC,math ASC;
-- 3.对数学成绩进行排序
-- 没有写排序方式,默认按升序排序
-- 默认升序可以省略不写
SELECT *FROM student ORDER BY english,math;

-- (8)分页查询(limit m,n)
-- limit m,n m表示从哪个下标开始,选取n条数据
-- 这里n表示每页显示的条数
-- 对student表里的6条数据分页,每页显示2条,共3页
-- 第一页: 0~1
SELECT * FROM student LIMIT 0,2;
-- limit (1-1)*2,2 limit 0,2
-- 第二页: 2~3
SELECT * FROM student LIMIT 2,2;
-- limit (2-1)*2,2 limit 2,2
-- 第三页: 4~5
SELECT * FROM student LIMIT 4,2;
-- limit (3-1)*2,2 limit 4,2
-- 需求:假如表里有1000条数据,每页显示20条
-- 请问第34页显示的那些数据?
-- 推理分页公式:limit (第几页-1)*n,n
-- limit (34-1)*20,20

-- (9)分组查询(group by)
-- 1.需求:查询每个地区的学生有多少人
-- 显示结果:地区 人数
SELECT address AS '地区',COUNT(*) AS '人数'
FROM student GROUP BY address;

-- (10)分组查询后筛选(having)
-- 2.需求:查询地区人数>=2人的地区
SELECT address AS '地区',COUNT(*) AS '人数'
FROM student GROUP BY address HAVING COUNT(*)>2;

DDOS攻击方式都有哪些?

ddos攻击主要有以下3种方式。

大流量攻击

大流量攻击通过海量流量使得网络的带宽和基础设施达到饱和,将其消耗殆尽,从而实现淹没网络的目的。一旦流量超过网络的容量,或网络与互联网其他部分的连接能力,网络将无法访问。大流量攻击实例包括ICMP、碎片和UDP洪水。

TCP状态耗尽攻击

TCP状态耗尽攻击试图消耗许多基础设施组件(例如负载均衡器、防火墙和应用服务器本身)中存在的连接状态表。例如,防火墙必须分析每个数据包来确定数据包是离散连接,现有连接的存续,还是现有连接的完结。同样,入侵防御系统必须跟踪状态以实施基于签名的数据包检测和有状态的协议分析。这些设备和其他有状态的设备—包括负责均衡器—被会话洪水或连接攻击频繁攻陷。例如,Sockstress攻击可通过打开套接字来填充连接表以便快速淹没防火墙的状态表。

应用层攻击

应用层攻击使用更加尖端的机制来实现黑客的目标。应用层攻击并非使用流量或会话来淹没网络,它针对特定的应用/服务缓慢地耗尽应用层上的资源。应用层攻击在低流量速率下十分有效,从协议角度看,攻击中涉及的流量可能是合法的。这使得应用层攻击比其他类型的DDoS攻击更加难以检测。HTTP洪水、DNS词典、Slowloris等都是应用层攻击的实例。

参考技术A DOS的表现形式

DDOS的表现形式主要有两种,一种为流量攻击,主要是针对网络带宽的攻击,即大量攻击包导致网络带宽被阻塞,合法网络包被虚假的攻击包淹没而无法到达主机;另一种为资源耗尽攻击,主要是针对服务器主机的攻击,即通过大量攻击包导致主机的内存被耗尽或CPU被内核及应用程序占完而造成无法提供网络服务。

如何判断网站是否遭受了流量攻击呢?可通过Ping命令来测试,若发现Ping超时或丢包严重(假定平时是正常的),则可能遭受了流量攻击,此时若发现和你的主机接在同一交换机上的服务器也访问不了了,基本可以确定是遭受了流量攻击。当然,这样测试的前提是你到服务器主机之间的ICMP协议没有被路由器和防火墙等设备屏蔽,否则可采取Telnet主机服务器的网络服务端口来测试,效果是一样的。不过有一

点可以肯定,假如平时Ping你的主机服务器和接在同一交换机上的主机服务器都是正常的,突然都Ping不通了或者是严重丢包,那么假如可以排除网络故障因素的话则肯定是遭受了流量攻击,再一个流量攻击的典型现象是,一旦遭受流量攻击,会发现用远程终端连接网站服务器会失败。

相对于流量攻击而言,资源耗尽攻击要容易判断一些,假如平时Ping网站主机和访问网站都是正常的,发现突然网站访问非常缓慢或无法访问了,而Ping还可以Ping通,则很可能遭受了资源耗尽攻击,此时若在服务器上用Netstat -na命令观察到有大量的SYN_RECEIVED、TIME_WAIT、FIN_WAIT_1等状态存在,而ESTABLISHED很少,则可判定肯定是遭受了资源耗尽攻击。还有一种属于资源耗尽攻击的现象是,Ping自己的网站主机Ping不通或者是丢包严重,而Ping与自己的主机在同一交换机上的服务器则正常,造成这种原因是网站主机遭受攻击后导致系统内核或某些应用程序CPU利用率达到100%无法回应Ping命令,其实带宽还是有的,否则就Ping不通接在同一交换机上的主机了。

当前主要有三种流行的DDOS攻击:

1、SYN/ACK Flood攻击:这种攻击方法是经典最有效的DDOS方法,可通杀各种系统的网络服务,主要是通过向受害主机发送大量伪造源IP和源端口的SYN或ACK包,导致主机的缓存资源被耗尽或忙于发送回应包而造成拒绝服务,由于源都是伪造的故追踪起来比较困难,缺点是实施起来有一定难度,需要高带宽的僵尸主机支持。少量的这种攻击会导致主机服务器无法访问,但却可以Ping的通,在服务器上用Netstat -na

命令会观察到存在大量的SYN_RECEIVED状态,大量的这种攻击会导致Ping失败、TCP/IP栈失效,并会出现系统凝固现象,即不响应键盘和鼠标。普通防火墙大多无法抵御此种攻击。

2、TCP全连接攻击:这种攻击是为了绕过常规防火墙的检查而设计的,一般情况下,常规防火墙大多具备过滤TearDrop、Land等DOS攻击的能力,但对于正常的TCP连接是放过的,殊不知很多网络服务程序(如:IIS、Apache等Web服务器)能接受的TCP连接数是有限的,一旦有大量的TCP连接,即便是正常的,也会导致网站访问非常缓慢甚至无法访问,TCP全连接攻击就是通过许多僵尸主机不断地与受害服务器建立大量 的TCP连接,直到服务器的内存等资源被耗尽而被拖跨,从而造成拒绝服务,这种攻击的特点是可绕过一般防火墙的防护而达到攻击目的,缺点是需要找很多僵尸主机,并且由于僵尸主机的IP是暴露的,因此容易被追踪。

3、刷Script脚本攻击:这种攻击主要是针对存在ASP、JSP、PHP、CGI等脚本程序,并调用MSSQLServer、MySQLServer、Oracle等数据库的网站系统而设计的,特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用,典型的以小博大的攻击方法。一般来说,提交一个GET或POST指令对客户端的耗费和带宽的占用是几乎可以忽略的,而服务器为处理此请求却可能要从上万条记录中去查出某个记录,这种处理过程对资源的耗费是很大的,常见的数据库服务器很少能支持数百个查询指令同时执行,而这对于客户端来说却是轻而易举的,因此攻击者只需通过Proxy代理向主机服务器大量递交查询指令,只需数分钟就会把服务器资源消耗掉而导致拒绝服务,常见的现象就是网站慢如蜗牛、ASP程序失效、PHP连接数据库失败、数据库主程序占用CPU偏高。这种攻击的特点是可以完全绕过普通的防火墙防护,轻松找一些Proxy代理就可实施攻击,缺点是对付只有静态页面的网站效果会大打折扣,并且有些Proxy会暴露攻击者的IP地址。

完全抵御住DDOS攻击是不可能的

对付DDOS是一个系统工程,想仅仅依靠某种系统或产品防住DDOS是不现实的,可以肯定的是,完全杜绝DDOS目前是不可能的,但通过适当的措施抵御90%的DDOS攻击是可以做到的,基于攻击和防御都有成本开销的缘故,若通过适当的办法增强了抵御DDOS的能力,也就意味着加大了攻击者的攻击成本,那么绝大多数攻击者将无法继续下去而放弃,也就相当于成功的抵御了DDOS攻击。

以下几点是防御DDOS攻击几点:

1、采用高性能的网络设备

首先要保证网络设备不能成为瓶颈,因此选择路由器、交换机、硬件防火墙等设备的时候要尽量选用知名度高、口碑好的产品。再就是假如和网络提供商有特殊关系或协议的话就更好了,当大量攻击发生的时候请他们在网络接点处做一下流量限制来对抗某些种类的DDOS攻击是非常有效的。

2、充足的网络带宽保证

网络带宽直接决定了能抗受攻击的能力,假若仅仅有10M带宽的话,无论采取什么措施都很难对抗现在的SYNFlood攻击,当前至少要选择100M的共享带宽,最好的当然是挂在1000M的主干上了。

但需要注意的是,主机上的网卡是1000M的并不意味着它的网络带宽就是千兆的,若把它接在100M的交换机上,它的实际带宽不会超过100M,再就是接在100M的带宽上也不等于就有了百兆的带宽,因为网络服务商很可能会在交换机上限制实际带宽为10M,这点一定要搞清楚。

3、安装专业抗DDOS防火墙

专业抗DDOS防火墙采用内核提前过滤技术、反向探测技术、指纹识别技术等多项专利技术来发现和提前过滤DDoS非法数据包,做到了智能抵御用户的DoS攻击。但也不能100%阻止对DDoS非法数据包准确检查。
参考技术B

常见的DDoS攻击方式有以下几种:

01 SYN Flood

攻击以多个随机的源主机地址向目的主机发送SYN包,而在收到目的主机的SYN
ACK后并不回应,这样,目的主机就为这些源主机建立了大量的连接队列,而且由于没有收到ACK一直维护着这些队列,造成了资源的大量消耗,最终导致拒绝服务。

02 Smurf

该攻击向一个子网的广播地址发一个带有特定请求(如ICMP回应请求)的包,并且将源地址伪装成想要攻击的主机地址。子网上所有主机都回应广播包请求而向被攻击主机发包,使该主机受到攻击。

03 Land-based

攻击者将一个包的源地址和目的地址都设置为目标主机的地址,然后将该包通过IP欺骗的方式发送给被攻击主机,这种包可以造成被攻击主机因试图与自己建立连接而陷入死循环,从而很大程度地降低了系统性能。

04 Ping of Death

根据TCP/IP的规范,一个包的长度最大为65536字节。尽管一个包的长度不能超过65536字节,但是一个包分成的多个片段的叠加却能做到。当一个主机收到了长度大于65536字节的包时,就是受到了Ping
of Death攻击,该攻击会造成主机的宕机。

05 Teardrop

IP数据包在网络传递时,数据包可以分成更小的片段。攻击者可以通过发送两段(或者更多)数据包来实现TearDrop攻击。第一个包的偏移量为0,长度为N,第二个包的偏移量小于N。为了合并这些数据段,TCP/IP堆栈会分配超乎寻常的巨大资源,从而造成系统资源的缺乏甚至机器的重新启动。

06 PingSweep

使用ICMP Echo轮询多个主机。

07 Pingflood

该攻击在短时间内向目的主机发送大量ping包,造成网络堵塞或主机资源耗尽。

参考技术C DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。单一的DoS攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等等各项性能指标不高它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆、万兆、百级级别的网络,这使得DoS攻击的困难程度加大了-目标对恶意攻击包的"消化能力"加强了不少,例如你的攻击软件每秒钟可以发送3,000个攻击包,但我的主机与网络带宽每秒钟可以处理10,000个攻击包,这样一来攻击就不会产生什么效果。
这时侯分布式的拒绝服务攻击手段(DDoS)就应运而生了。理解了DoS攻击的话,它的原理就很简单。如果说计算机与网络的处理能力加大了10倍,用一台攻击机来攻击不再能起作用的话,攻击者使用10台攻击机同时攻击呢?用100台呢?DDoS就是利用更多的傀儡机来发起进攻,以比从前更大的规模来进攻受害者。
分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DoS攻击,从而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在Internet上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行
高速广泛连接的网络给大家带来了方便,也为DDoS攻击创造了极为有利的条件。在低速网络时代时,黑客占领攻击用的傀儡机时,总是会优先考虑离目标网络距离近的机器,因为经过路由器的跳数少,效果好。而现在电信骨干节点之间的连接都是以G为级别的,大城市之间更可以达到2.5G的连接,这使得攻击可以从更远的地方或者其他城市发起,攻击者的傀儡机位置可以在分布在更大的范围,选择起来更灵活了。
参考技术D 方式指的就是计算机协议,你要说的攻,肯定大部分是UDP,相对来说洪水一些,其次就是SYN比较流行。那些AKC也算。

以上是关于MySQL中常见的连接查询方式都有哪些?的主要内容,如果未能解决你的问题,请参考以下文章

Navicat与MYSQL自带的工具相比,都有哪些优势特点

MYSQL中的表的连接方式都有哪些,各有些啥特点?

列举sql优化都有哪些方式方法 博客园

MySQL都有哪些日志?分别都代表什么?

MySQL 表关系及多表操作(联合查询连接查询子查询)

DDOS攻击方式都有哪些?