2
select ssid ,ssname
from s,
(select sid,count(tid) from st where score<60 group by sid) st1
where ssid = st1sid
3
select st1sid
from
(select sid,score from st where tid='1') st1
,(select sid,score from st where tid='2') st2
where st1score > st2score
and st1sid = st2sid网络管理员面试题目及答案(二)
39、堆栈 *** 作中都是对栈顶单元进行的,访问堆栈的地址是由SP指定的。它在 *** 作过程中不需要用户指定。在下推堆栈中,写入堆栈的单元地址是(B)。
APC B(SP)+1 CSP D指令寄存器
解析堆栈是一个专门的存储区,其存取数据的顺序是先进后出,每次 *** 作都是对栈顶单元进行的。栈顶单元的地址,每次进出栈时都要自动修改。栈顶单元的地址放在堆栈指针SP中,写入堆栈时,栈顶单元已经存有数据,再写入新数据时,不能写入原来的SP中,必须写到栈顶单元的下一单元中,在堆栈地址是向下生长的下推式堆栈中,写入数据的堆栈单元的堆栈单元地址是(SP)+1。即进栈 *** 作把(SP)+1再把进栈的数据写入新的栈顶单元(SP)+1的单元中。出栈时,把栈顶单元内容d出,然后(SP)–1。
SP的修改是指令自动完成的,不需要用户参与。
40、计算机可以运行各种高级程序设计语言编写的程序,但是运行时必须经过编译程序等先把它们转换成(B),才能在计算机上执行。
A汇编语言 B二进制机器语言 C中间语言 D *** 作系统原语
解析计算机中各种设备是根据指令码的要求进行 *** 作的。指令的 *** 作码决定本指令完成什么 *** 作,指令的地址码决定 *** 作数存放的单元地址。计算的控制器通过 *** 作码译码器来分析指令的具体要求,发出各种控制命令控制各个部件成完指令规定的功能。
计算机只能识别二进制编码的机器指令,其他符号都不认识,使用各种高级语言编写的程序,最终必须通过编译程序等转换成机器能够识别的二进制机器指令才能执行。
41、接口是主机与外设通信的桥梁,接口接收主机送来的(1)(C)控制设备工作,接口反映设备的(2)(C),以便主机随时查询,决定下一步执行什么 *** 作。
(1)A地址 B数据 C控制命令 D应答信号
(2)A速度 B型号 C工作状态 D地址编号
解析接口是主机与外设通信的桥梁,接口的主要功能是接收主机发来的控制命令来控制外设工作,如启动外设传送数据、停止外设工作等。接口还要反映外设目前的状态,监视设备的工作情况,以便主机检测设备状态,根据设备不同的工作状态,发出不同的控制命令,决定下一步设备执行什么 *** 作。
当然接口中还包括数据缓冲寄存器和中断逻辑电路等。
42、计算机存储器的最大容量决定于(C)。
A指令中地址码位数
B指令字长
C寻址方式决定的储器有效地址位数
D存储单元的位数
解析关于主存容量问题。
主存的容量大小直接影响用户的应用范围,特别是 *** 作系统、系统软件功能越完善,主机运行时占用的主存的空间越大,因此主存的容量直接影响用户能否使用该计算机。
计算机的主存容量决定于主存的地址位数,但主存的地址位数再多,CPU的访问指令提供的地址位数较少也是没用的,因此主存最大可以使用的容量决定于访存指令访问地址的位数。
在只有直接寻址的指令中,主存容量直接决定于指令中地址码位数。
由于指令字长的限制,指令地址码的位数不可能太多,为了扩充CPU可访问的主存空间,现在都使用变址寻址、基地寻址等,以增加 *** 作数的地址位数。因此主存储器的最大容量决定于由指令寻址方式形成的 *** 作数有效地址的位数。
43、计算机存储系统中通常采用三级结构,其主要目的是(D)。
A提高存储器读写速度
B扩大存储器的容量
C便于系统升级
D解决存储器速度、容量、价格的矛盾
解析计算机对存储器的要求是速度快、容量大、价格低,这3个要求是互相矛盾的,实现起来非常困难。一般高速半导体存储器速度快,但容量小、价格贵;磁盘等磁表面存储器容量大、价格低,但速度较慢也不能作为主存使用。为了得到一个速度快、容量大、价格低的存储器,最好的办法也是最现实的办法是利用现有的存储设备构成一个三级存储系统。大容量、速度较快、价格不太贵的半导体存储器作为主存体(如常用的DRAM)。为了提高CPU访问主存取数的速度,在主存与CPU之间增加一级高速缓冲存储器cache,其特点是速度快,但价格贵、容量不大,用户还是可以接受的。CPU从cache中读出指令和数据比从主存中读取快的多,可有效地提高访存的速度。因为主存容量不够,在主存外面增加一个辅助存储器,如磁盘、磁带等。其特点是容量很大、价格很低,但速度很慢,存放CPU暂时不使用的程序和数据,等到CPU要访问这部分内容时,可成批调入主存,CPU从主存中再存取有关指令和数据,速度也不慢。三级存储结构有效地解决了存储器速度、容量和价格之间的矛盾,成为目前存储系统的主流方案
44、原码定点数乘除法运算中,乘积和商的符号是用(C)决定的。
A 二数符号位相减 B 二数符号位相与
C 二数符号位异或 D 用户来设定
解析原码定点数乘除运算时,因为其数值部分是该数值真值的绝对值,可直接对二数进行乘(除) *** 作求出积(商)即可。二数符号相同时,积(商)符号就可确定。如果二数符号不同时,根据同号二数相乘(除)结果为正,异号二数相乘(除)结果为负的原则,采用二个符号位进行异或运算求得1⊕1=0,0⊕0=1,1⊕0=1,0⊕1=0。
45、精简指令系统计算机RISC中,大量设置通用寄存器,且指令格式仅用R-R型寻址,目的是为了(B)。
A 简化指令格式 B 提高指令运算速度
C 用户使用方便 D 减少地址计算时间
解析大中型计算机的指令系统功能强,速度快,使用方便,但硬件代价太高。因此,IBM公司首先开展指令系统复杂性的研究工作,得出的结论并不是指令系统设计得很庞大的计算机最好,而是去掉那些复杂而又很少使用的指令,把经常大量使用的指令的处理速度尽可能提高。显然,R-R寻址指令的速度较快。因为
这种指令不需要访问存取 *** 作数, *** 作数在运算器的通用寄存器中存放。因此一个节拍即可得运算结果,节省大量的访问时间。为了能在运算器中存放一些 *** 作数据和中间结果,RISC计算机中设置了大量的通用寄存器。
46、文件系统中,文件按名字存取是为了(B)。
A 方便 *** 作系统对信息的管理 B 方便用户的使用
C 确定文件的存取权限 D 加强对文件内容的保密
解析早期计算机系统中没有文件管理机构,用户自行管理辅助存储器上的信息,按照物理地址安排信息,组织数据的输入输出,还要记住信息在存储介质上的分布情况,烦琐复杂、易于出错、可靠性差。 *** 作系统提供文件系统后,首先方便用户使用,使用者无须记住信息存放在辅助存储器中的物理位置,也无须考虑如何将信息存放在存储介质上,只要知道文件名,给出有关 *** 作要求便可存取信息,实现了“按名存取”。特别是当文件存放位置发生了改变,甚至更换了文件的存储设备,对文件的使用者也没有丝毫影响。其次,文件安全可靠,用户通过文件系统才能实现对文件的访问,而文件系统能提供各种安全、保密和保护 措施 ,因此可防止对文件信息有意或无意的破坏或窃用。此外,在文件使用过程中可能出现硬件故障,这时文件系统可组织重执,对于硬件失效而可能造成的文件信息破坏,可组织转储以提高文件的可靠性。最后,文件系统还能提供文件的共享功能,如不同的用户可以使用同名或异名的同一文件。这样,既节省了文件存放空间,又减少了传递文件的交换时间,进一步提高了文件和文件空间的利用率。
47、能使系统中多台计算机相互协作完成一件任务的 *** 作系统是(D)。
A 批处理 *** 作系统 B 分时 *** 作系统
C 网络 *** 作系统 D 分布式 *** 作系统
解析常见的 *** 作系统类型及其作用说明如下。
批处理 *** 作系统:是一种早期的大型机用 *** 作系统,其主要特征是用户脱机使用计算机,成批处理,多道程序运行。
分时系统:分时 *** 作系统是一个联机的(on-line)多用户(multi-user)交互式(interactive)的 *** 作系统,具有交互性、同时性和独立性。
实时系统:其主要特点是提供及时响应和高可靠性。
个人计算机上的 *** 作系统:是联机的交互式的单用户 *** 作系统。
网络 *** 作系统:在原来各自计算机 *** 作系统的基础上按照网络体系结构的各个协议标准开发的网络管理、通信、资源共享、 系统安全 和多种网络应用服务。 分布式 *** 作系统:通过通信网络将物理上分布的具有自治功能的数据处理系统或计算机系统连接起来,实现信息交换和资源共享,协作完成任务。
48、 *** 作系统中不支持程序浮动的地址变换机制是(C)。
A 页式地址转换 B 段式地址转换 C 静态重定位 D 动态重定位
解析本题考查存储管理的地址变换技术。
实现地址重定位或地址映射的方法有两种:静态地址重定位和动态地址重定位。 静态地址重定位是在虚拟空间程序执行之前由装配程序完成地址映射工作。优点是不需要硬件支持,缺点是程序一旦装入内存之后就不能再移动,并且必须在程序执行之前将有关部分全部装入,因而无法实现虚拟存储。
动态地址重定位是在程序执行过程中,CPU访问内存之前,将要访问的程序或数据地址转换成内存地址。动态地址重定位依靠硬件地址变换机构完成,其主要优点有可对内存进行非连续分配,可实现虚拟存储,有利于程序段的共享。页式和段式存储管理均采用动态地址重定位技术。
49、不属于存储管理功能的是(C)。
A 主存空间的分配和回收 B 主存空间的共享和保护
C 辅存空间的管理 D 实现地址转换
解析存储管理是 *** 作系统的重要组成部分,它负责管理计算机系统的重要资源主存储器。存储管理的主要功能包括:虚拟存储器、地址变换、内外存数据传输的控制、内存的分配与回收、内存信息的共享与保护。
50、在请求页式存储管理中,当查找的页不在(C)中时会产生缺页中断。
A 外存 B 虚存 C 内存 D 地址空间
解析请求页式管理所采取的页面调入方式是当需要执行某条指令而又发现它不在内存时或当执行某条指令需要访问其他的数据或指令时,这些指令和数据不在内存中,就会发生缺页中断,系统将外存中相应的页面调入内存。
51、现实世界中事物的一般特性在信息世界中称为(C)。
A 实体 B 关系 C 属性 D 关系键
解析概念模型,也称信息模型,它是按照用户观点来对数据和信息建模,是现实世界到机器世界的一个中间层次,是数据库设计人员和用户之间进行交流的语言。概念模型涉及的基本概念有以下几个。
实体(Entity):客观存在的并可相互区别的事物称为实体。
属性(Attribute):实体所具有的某一特性称为属性。一个实体可以由若干个属性来描述。
码(Key):唯一标识实体的属性集称为码。
域(Domain):属性的取值范围称为该属性的域。
实体型(Entity Type):用实体名及其属性名集合来抽象和刻画的同类实体,称为实体型。
实体集(Entity Set):同型实体的集合称为实体集。
联系(Relationship):包括实体的各属性之间的联系和不同实体集之间的联系。
52、SQL的Select语句中From Q应理解为(D)。
A Q中的元组序号 B 关系Q的元组变量
C 基本表Q的结构定义 D Q中的全部元组
解析 数据库查询是数据库的核心 *** 作。SQL语言提供了Select语句进行数据库的查询,该语句具有灵活的使用方式和丰富的功能,其一般格式为: Select [all | distinct]<目标列表达式>[,<目标列表达式>]
From <表名或视图名>[,<表名或视图名>]
[Where <条件表达式>]
[Group By <列名1> [Having <条件表达式>]]
[Order By <列名2> [Asc | Desc]]
Select语句的含义是:如有Where子句,则根据Where子句的条件表达式,从From子句指定的基本表或视图中找到满足条件的元组,再按Select子句中的目标表达式,选出元组中的属性值形成结果表。如果有Group子句,则将结果<列名1>的值进行分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数,如果Group子句带Having短句,则只有满足指定条件的组才能输出。如果有Order子句,则结果表还要按<列名2>的值升序或降序排序
53、关系代数中的θ连接 *** 作由(B) *** 作组合而成。
A 和 B 和× C 、和× D 和×
解析本题考查关系运算。
连接也称θ连接,它是从两个关系的笛卡儿积中选取属性间满足一定条件的元组。而笛卡尔积用符号“×”来表示,选择用符号“”来表示,所以答案为B。
54、元组比较 *** 作(c1, c2), <=(d1, d2),其意义等价于(D)。
A (c1<=d1) OR (c2<=d2)
B (c1<=d1) OR ((c1=d1) AND (c2<=d2))
C (c1<=d1) AND (c2<=d2)
D (c1
解析两个元组进行比较时,首先比较第一个分量,根据比较结果的不同执行不同的后续 *** 作,说明如下。
不满足给定的条件,则返回“假”, *** 作结束。
如果不相等且满足给定的条件,返回“真”, *** 作结束。
如果相等,则继续比较其他的分量。
按照上述规则,(c1, c2)和(d1, d2)进行比较时,首先比较c1和d1,如果c1
网络管理员面试题目及答案(三)
55、关系数据库的数据和更新 *** 作必须遵循的完整性规则包括(D)。
A 实体完整性和参照完整性
B 参照完整性和用户定义的完整性
C 实体完整性和用户定义的完整性
D 实体完整性、参照完整性和用户定义的完整性
解析关系模型的完整性规则是对关系的某种约束条件。关系模型有3类完整性约束:实体完整性、参照完整性和用户定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称为是关系的两个不变性,应该由关系系统自动支持。
实体完整性规则规定基本关系的所有主属性都不能取空值,对于实体完整性规则
说明如下。
实体完整性规则是针对基本关系而言的。
现实世界中的实体是可区分的,即它们具有某种唯一性标识,相应的关系模型中以主码作为唯一性标识。
主码中的属性即主属性不能取空值。
参照完整性是对关系间引用数据的一种限制。若属性组A是基本关系R1的外码,它与基本关系R2的主码K相对应,则R1中每个元组在A上的值要么取空值,要么等于R2中某元组的主码值。
用户定义的完整性是针对某一具体关系数据库的约束条件。它反映某一应用所涉及的数据必须满足的语义要求,例如某个属性必须取唯一值,某些属性之间应满足一定的函数关系、某个属性的取值范围在0~100之间等。
56、ATM采用的复用方式是(C)
A 异步复用 B 时分复用 C 统计时分复用 D 同步时分复用
解析ATM是异步传输模式。所谓异步就是指各个不同来源的信元,只要准备好就可进入信道,信元的排列不是固定的,也叫统计时分复用。
57、对于同步传输,描述正确的是(29)。
A 数据块之间不需要同步码
B 数据字节之间需要同步码
C 数据位之间需要同步码
D 数据块之间需要同步码
58、TCP/IP层次模型中,IP层相当于OSI/RM中的(30)。
A 物理层 B 链路层 C 网络层 D 传输层
59、计算机网络的3个主要组成部分是(31)。
A 通信软件、通信子网和通信协议
B 一组主机、一个通信子网和一组通信协议
C 一组服务器、一组终端和一组通信协议
D 一组主机、若干通信线路和一组通信协议
60、(C适合于高速网络系统和中远距离数据传输。
A 双绞线 B 同轴电缆 C 光纤 D 无线介质
解析同轴电缆不适合高速传输,双绞线随着传输速度的提高,距离变得很短,无线介质也不适合高速网络系统和中远距离数据传输,只有光纤适合高速网络系统和中远距离数据传输
61介质的最大利用率取决于帧的长度和传播时间,当帧的(C时,介质的利用率越高。
A 长度越长,传播时间越长
B 长度越短,传播时间越短
C 长度越长,传播时间越短
D 长度越短,传播时间越长
解析传输介质利用率是指有效传输数据的时间和总时间之比,传播延迟占用的时间越短,利用率越高。另外,帧的长度越长,即得到发送权后,传输的数据越多,有效时间就越多,介质的利用率就越高。
62、CSMA/CD 中一旦某个站点检测到冲突,它就立即停止发送,其他站点(C)
A 都处于发送状态 B 都会相继竞争发送权
C 都会收到阻塞信号 D 仍有可能继续发送帧
解析IEEE 8023标准中对CSMA/CD工作方式约定,一旦某个站点检测到冲突,它就立即停止发送,并发送一强的阻塞信号,便于其他站点迅速接收到,马上停止数据发送
63、在一个主干为1000Mbps交换式以太网的结构中(B)。
A 只能包括1000Mbps交换机
B 可以包括1000Mbps、100Mbps和10Mbps交换机
C 应包括 1000Mbps和100Mbps交换机
D 可以包括1000Mbps和10Mbps交换机
解析主干为1000Mbps的网络,一般主交换机为1000Mbps,二级交换机和三级交换机可以降低层次,用100Mbps或10Mbps的交换机。
64、在(A)方式的交换机部署中,交换机的位置比较灵活。
A 级联 B 模块 C 菊花链堆叠 D 矩阵堆叠
解析交换机的部署可以分为堆叠式和级联式,堆叠式又分为菊花链堆叠和矩阵堆叠,差别在于后备的连接方式不同,但从位置上,都是集中式的。级联式中,交换机可以部署在不同的位置,之间的距离可以扩大,部署起来比较灵活
65、VLAN和的关系是(A)。
A 两者的应用场合和目的不同
B 两者使用的技术相同
C 两者的目的相同
D 两者的用户不同
解析VLAN和,一个称为虚拟局域网,一个称为虚拟专网,虽都有虚拟的意思,但概念不一样,两者的应用场合和目的也不同。VLAN是将局域网中连接在同一交换机或不同交换机的计算机按部门分组划分,就像不同的子网一样。而是指通过公共网络,将远程的用户或一个网络与本地网络连接,通过安全措施,达到像在内部网络使用一样
66、在下面设备中,(38)不是工作在数据链路层的。
A 网桥 B 集线器 C 网卡 D 交换机
解析网桥、集线器和交换机属于联网设备,网桥工作在数据链路层,交换机也工作在数据链路层,集线器(Hub)是工作在物理层的设备,不具备交换功能。网卡是接到计算机上的属于外围设备,完成物理层和数据链路层的功能
67、在计算机网络中,能将异种网络互联起来,实现不同网络协议相互转换的网络互联设备是(D)。
A 网桥 B 集线器 C 路由器 D 网关
解析实现异种网络互联,是指运行不同网络协议的网络互联,要解决的一个主要问题是网络协议相互转换,这是传输层以上层的转换任务,需要网关来实现
68、以无碎片直通方式工作的交换机对于以太网的帧,(C)内容不去读它。
A 原地址 B 目的地址 C 大于64B的部分 D小于64B的部分
解析交换机的工作方式可以分为存储转发式、直通式和无碎片直通式。无碎片 直通式是指交换机读取部分数据,然后转发出去,由于IEEE 8023规定的以太网的最 小帧的长度为64B,其中包含了源地址和目的地址,后面的不再读入缓存,而是直接 转发出去,这样小于最小帧的数据就被认为是碎片,过滤掉了,称为无碎片直通工作方式
69、网桥的功能不包括(C)。
A 互联不同MAC协议的局域网
B 存储帧
C 处理网络分组
D 转发帧
解析网桥处理的是数据链路层的功能,可以实现不同MAC帧的转化,如IEEE 8023和IEEE 8025帧格式的转换,进行帧的接收存储和转发,但不能处理网络分组,处理分组是网络层设备的功能,如路由器
70、帧中继网络的弱点是(C)。
A 速度慢 B 线路利用率低
C 差错处理能力差 D 误码率高
解析帧中继是在克服X25缺点的基础上发展起来的,由于采用光缆作为传输介质,帧中继认为帧在传输过程中基本不出错,因而在得到帧的目的地址后马上转发,减少了帧在每个结点的时延。这就造成了它的弱点是差错处理能力差,要等到帧传送到目的点完全接收下来,才知道错误。惠普招聘常考的笔试题目主要考数据库相关知识:
1Hashtable和HashMap有什么区别
2你怎么理解MVC模式
3SQLServer中左联接查询用left join,Oracle中用什么
4SQLServer中的数据库,在Oracle中对应的是什么
5如果SQLServer中有两个数据库,那么让你把这两个数据库对应到Oracle中,你应该怎么做
6有两个页面ajsp和bjsp,要从ajsp传值到bjsp有几种方法分别是什么
7有三个页面,ajsp,bjsp和cjsp,流程是:ajsp->bjsp->cjsp,其中ajsp中提交的数据要在cjsp中访问,用最简单的方法怎么做注意不能放在session里
7jsp和servlet有什么区别
8映射是什么你怎么理解映射
9Hibernate中:不看数据库,不看XML文件,不看查询语句,怎么样能知道表结构
10SQLServer支持集群吗
11为什么要用MVC我从JSP页面直接访问数据库不是更简单吗,为什么非要先提交到控制器再做处理
12在struts中,假设有一个对数据库中一张表的增删改查的 *** 作,你是写一个action还是写多个action为什么
13struts中的actionform有什么好处
14用过Hibernate吗,用它有什么好处
15通常所说的web应用程序分3层,即MVC,如果我想分4层,应该怎么分1--就拿你问题2的数据举例,邮箱和name同时重复,只保留其中一条
delete from 表名 where id not in (select min(id) from 表名 group by name,email)
2--
select t1 from 表名 t1,
(select name,max(lastlogon) lastlogon from 表名 group by name) t2
where t1name=t2name and t1lastlogon=t2lastlogon
一、简述一下MongoDB的应用场景
mongodb 支持副本集、索引、自动分片,可以保证较高的性能和可用性。
更高的写入负载
默认情况下,MongoDB 更侧重高数据写入性能,而非事务安全,MongoDB 很适合业务系统中有大量 “低价值” 数据的场景。但是应当避免在高事务安全性的系统中使用 MongoDB,除非能从架构设计上保证事务安全。
高可用性
MongoDB 的复副集 (Master-Slave) 配置非常简洁方便,此外,MongoDB 可以快速响应的处理单节点故障,自动、安全地完成故障转移。这些特性使得 MongoDB 能在一个相对不稳定(如云主机)的环境中,保持高可用性。
数据量很大或者未来会变得很大
依赖数据库 (MySQL) 自身的特性,完成数据的扩展是较困难的事,在 MySQL 中,当一个单达表到 5-10GB 时会出现明显的性能降级,此时需要通过数据的水平和垂直拆分、库的拆分完成扩展,使用 MySQL 通常需要借助驱动层或代理层完成这类需求。而 MongoDB 内建了多种数据分片的特性,可以很好地适应大数据量的需求。
基于位置的数据查询
MongoDB 支持二维空间索引,因此可以快速及精确地从指定位置获取数据。
表结构不明确
在一些传统 RDBMS 中,增加一个字段会锁住整个数据库 / 表,或者在执行一个重负载的请求时会明显造成其它请求的性能降级。通常发生在数据表大于 1G 的时候(当大于 1TB 时更甚)。 因 MongoDB 是文档型数据库,为非结构货的文档增加一个新字段是很快速的 *** 作,并且不会影响到已有数据。另外一个好处当业务数据发生变化时,是将不再需要由 DBA 修改表结构。
二、数据库设计经验,为什么进行分表?分库?一般多少数据量开始分表?分库?分库分表的目的?
1、为什么要分表
当一张表的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕。
分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率。数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据 *** 作,增删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO 等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。
2、分表的方案
做 mysql 集群,有人会问 mysql 集群,根分表有什么关系吗?虽然它不是实际意义上的分表,但是它启到了分表的作用,做集群的意义是什么呢?为一个数据库减轻负担,说白了就是减少 sql 排队队列中的 sql 的数量,举个例子:有 10 个 sql 请求,如果放在一个数据库服务器的排队队列中,他要等很长时间,如果把这 10 个 sql 请求,分配到 5 个数据库服务器的排队队列中,一个数据库服务器的队列中只有 2 个,这样等待时间是不是大大的缩短了呢?
linux mysql proxy 的安装,配置,以及读写分离
mysql replication 互为主从的安装及配置,以及数据同步
优点:扩展性好,没有多个分表后的复杂 *** 作(php 代码)
缺点:单个表的数据量还是没有变,一次 *** 作所花的时间还是那么多,硬件开销大。
三、简述一下数据库主从复制,读写分离
什么是主从复制
主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;
主从复制的原理:
1数据库有个bin-log二进制文件,记录了所有的sql语句。
2只需要把主数据库的bin-log文件中的sql语句复制。
3让其从数据的relay-log重做日志文件中再执行一次这些sql语句即可。
主从复制的作用
1做数据的热备份,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
2架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问频率,提高单机的I/O性能
3主从复制是读写分离的基础,使数据库能制成更大 的并发。例如子报表中,由于部署报表的sql语句十分慢,导致锁表,影响前台的服务。如果前台服务使用master,报表使用slave,那么报表sql将不会造成前台所,保证了前台的访问速度。
主从复制的几种方式:
1同步复制:所谓的同步复制,意思是master的变化,必须等待slave-1,slave-2,…,slave-n完成后才能返回。
2异步复制:如同AJAX请求一样。master只需要完成自己的数据库 *** 作即可。至于slaves是否收到二进制日志,是否完成 *** 作,不用关心。MYSQL的默认设置。
3半同步复制:master只保证slaves中的一个 *** 作成功,就返回,其他slave不管。
这个功能,是由google为MYSQL引入的。
关于读写分离
在完成主从复制时,由于slave是需要同步master的。所以对于insert/delete/update这些更新数据库的 *** 作,应该在master中完成。而select的查询 *** 作,则落下到slave中。
--插入学生表测试数据
insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
insert into Student values('02' , '钱电' , '1990-12-21' , '男');
insert into Student values('03' , '孙风' , '1990-05-20' , '男');
insert into Student values('04' , '李云' , '1990-08-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '女');
insert into Student values('06' , '吴兰' , '1992-03-01' , '女');
insert into Student values('07' , '郑竹' , '1989-07-01' , '女');
insert into Student values('08' , '王菊' , '1990-01-20' , '女');
--课程表测试数据
insert into Course values('01' , '语文' , '02');
insert into Course values('02' , '数学' , '01');
insert into Course values('03' , '英语' , '03');
--教师表测试数据
insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');
--成绩表测试数据
insert into Score values('01' , '01' , 80);
insert into Score values('01' , '02' , 90);
insert into Score values('01' , '03' , 99);
insert into Score values('02' , '01' , 70);
insert into Score values('02' , '02' , 60);
insert into Score values('02' , '03' , 80);
insert into Score values('03' , '01' , 80);
insert into Score values('03' , '02' , 80);
insert into Score values('03' , '03' , 80);
insert into Score values('04' , '01' , 50);
insert into Score values('04' , '02' , 30);
insert into Score values('04' , '03' , 20);
insert into Score values('05' , '01' , 76);
insert into Score values('05' , '02' , 87);
insert into Score values('06' , '01' , 31);
insert into Score values('06' , '03' , 34);
insert into Score values('07' , '02' , 89);
insert into Score values('07' , '03' , 98);
-- 1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数
select c,as_score as 01课程score,bs_score as 02课程score from
score a,score b
left join student c
on bs_id = cs_id
where as_id = bs_id and ac_id = '01' and bc_id = '02' and as_score > bs_score;
-- 2、查询"01"课程比"02"课程成绩低的学生的信息及课程分数
select a ,bs_score as 01课程,cs_score as 02课程 from student a
join score b
on as_id=bs_id and bc_id = '01'
left join score c
on bs_id = cs_id and cc_id = '02'
where bs_score < cs_score ;
-- 3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
select as_id,as_name,round(avg(bs_score),2) as 平均成绩 from student a
join score b
on as_id = bs_id
group by bs_id having 平均成绩 >= 60;
备注:round[avg(成绩),1]里,round是四舍五入函数,1代表保留1位小数
-- 4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩
-- (包括有成绩的和无成绩的)
select b ,round(avg(as_score),2) as 平均成绩 from
student b
left join score a on bs_id = as_id group by as_id having 平均成绩 < 60
union
select b ,0 as 平衡成绩 from student b where bs_id not in (select s_id from score);
-- 5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
select as_id,as_name,count(bc_id) as 选课总数 ,sum(bs_score) as 总分 from student a
left join score b
on as_id = bs_id group by s_id ;
-- 6、查询"李"姓老师的数量
select count() as 李姓老师数量 from teacher where t_name like '李%';
-- 7、查询学过"张三"老师授课的同学的信息
select a from student a join score b
on as_id = bs_id
where bc_id in (select cc_id from course c
join teacher d on ct_id = dt_id where dt_name = '张三');
-- 8、查询没学过"张三"老师授课的同学的信息
select a from student a left join score b on as_id = bs_id where as_id not in
(select s_id from score where c_id =
(select c_id from course where t_id =
(select t_id from teacher where t_name = '张
三'))) group by as_id;
-- 9、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息
select from student where s_id in
(select as_id from score a join score b on as_id = bs_id
where ac_id = '01' and bc_id = '02');
-- 10、查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息
select from student where s_id in
(select s_id from score where c_id = '01' )
and s_id not in (select s_id from score where c_id = '02' );
-- 11、查询没有学全所有课程的同学的信息
select from student where s_id not in
(select s_id from score group by s_id having count(c_id) = 3);
-- 12、查询至少有一门课与学号为"01"的同学所学相同的同学的信息
select distinct a from student a left join score b
on as_id = bs_id where bc_id in
(select c_id from score where s_id = '01') and as_id != '01' ;
注意:distinct是去重的
-- 13、查询和"01"号的同学学习的课程完全相同的其他同学的信息
select from student where s_id in
(select s_id from score group by s_id having count(c_id) =
(select count(c_id) from score where s_id = '01') and s_id not in
(select s_id from score where c_id not in
(select c_id from score where s_id = '01')) and s_id != '01');
-- 14、查询没学过"张三"老师讲授的任一门课程的学生姓名
select s_name from student where s_id not in
(select s_id from score where c_id in
(select c_id from course where t_id in
(select t_id from teacher where t_name ='张三')));
-- 15、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
select as_id ,bs_name,round(avg(as_score),2) as 平均成绩 from score a
left join student b on as_id = bs_id
where s_score < 60 group by s_id having count(1) >=2;
或者试试
select as_id ,bs_name,round(avg(as_score),2) as 平均成绩 from score a
left join student b on as_id = bs_id
where as_score < 60 group by as_id having count() >=2;
-- 16、检索"01"课程分数小于60,按分数降序排列的学生信息
select a ,bc_id ,bs_score from student a
left join score b on as_id = bs_id
where bc_id = '01' and bs_score < 60
order by bs_score desc;
-- 17、按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
select as_name ,
sum(case when bc_id = '01' then s_score else null end ) as 语文,
sum(case when bc_id = '02' then s_score else null end ) as 数学,
sum(case when bc_id = '03' then s_score else null end ) as 英语,
round(avg(s_score),2) as 平均成绩
from student a left join score b on as_id = bs_id group by as_name
order by 平均成绩 desc;
-- 18查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
--及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
select bc_id,bc_name,
max(as_score) as 最高分,
min(as_score) as 最低分,
round(avg(as_score),2) as 平均分,
round(sum(case when as_score>= 60 then 1 else 0 end)/count(s_id),2) as 及格率 ,
round(sum(case when as_score>= 70 and as_score <80 then 1 else 0 end)/count(s_id),2) as 中等率,
round(sum(case when as_score>= 80 and as_score <90 then 1 else 0 end)/count(s_id),2) as 优良率,
round(sum(case when as_score>= 90 then 1 else 0 end)/count(s_id),2) as 优秀率
from score a
left join course b
on ac_id = bc_id group by bc_id;
-- 19、按各科成绩进行排序,并显示排名
第一种:
set @pre_c_id:= '01';
set @rank:=0;
select tb2s_id ,tb2c_id,tb2s_score,tb2排名 from
(select ,(case when tb1c_id = @pre_c_id then @rank:=@rank+1 else @rank:=1 end) as 排名,
(case when @pre_c_id = tb1c_id then @pre_c_id else @pre_c_id:=tb1c_id end ) as pre_c_id
from
(select from score order by c_id,s_score desc) tb1 )tb2;
如果看不懂用第二种方法:
SELECT ac_id,as_id,as_score,COUNT(bs_score)+1 AS 排名
FROM score a LEFT JOIN score b ON as_score<bs_score AND ac_id = bc_id
GROUP BY ac_id,as_id,as_score ORDER BY ac_id,排名,as_id ASC
-- 20、查询学生的总成绩并进行排名
set @rank:=0;
select ,(@rank:=@rank+1) as rank from
(select s_id ,sum(s_score) as 总成绩 from score
group by s_id order by 总成绩 desc) tb1;
-- 21、查询不同老师所教不同课程平均分从高到低显示
select ac_id, dt_name,round(avg(as_score)) as 平均分 from score a
left join student b on as_id = bs_id
left join course c on ac_id = cc_id
left join teacher d on ct_id = dt_id group by ac_id
order by 平均分 desc;
-- 22、查询所有课程的成绩第2名到第3名的学生信息及该课程成绩
set @pre_c_id:= '01';
set @rank:=0;
select bs_name,tb2s_id ,tb2c_id,tb2s_score,tb2排名 from
(select ,(case when tb1c_id = @pre_c_id then @rank:=@rank+1 else @rank:=1 end) as 排名,
(case when @pre_c_id = tb1c_id then @pre_c_id else @pre_c_id:=tb1c_id end ) as pre_c_id
from
(select from score order by c_id,s_score desc) tb1 )tb2 join student b on tb2s_id = bs_id where 排名 = 2 or 排名 =3;
-- 23、统计各科成绩各分数段人数:课程编号,课程名称,[100-85],(85-70],(70-60],(0-60]及所占百分比
select bc_id,bc_name ,
sum(case when as_score >=85 then 1 else 0 end) as 100-85 ,
concat(round(100 sum(case when as_score >=85 then 1 else 0 end)/count( ),2), '%') as 百分比,
sum(case when as_score <85 and as_score >=70 then 1 else 0 end) as 85-70 ,
concat(round(100 sum(case when as_score <85 and as_score >=70 then 1 else 0 end)/count( ),2),'%') as 百分比,
sum(case when as_score <70 and as_score >=60 then 1 else 0 end) as 70-60 ,
concat(round(100 sum(case when as_score <70 and as_score >=60 then 1 else 0 end)/count( ),2) ,'%')as 百分比,
sum(case when as_score <60 and as_score >=0 then 1 else 0 end) as 60-0 ,
concat(round(100 sum(case when as_score <60 and as_score >=0 then 1
else 0 end)/count( ),2),'%') as 百分比
from score a left join course b on ac_id = bc_id group by bc_id;
-- 24、查询学生平均成绩及其名次
select tb1,(@rank:=@rank +1 ) as rank from
(select s_id ,round(avg(s_score),2) as 平均成绩 from score
group by s_id order by 平均成绩 desc) tb1,(select @rank:=0) b;
-- 25、查询各科成绩前三名的记录
set @pre_c_id:= '01';
set @rank:=0;
select bs_name,tb2s_id ,tb2c_id,tb2s_score,tb2排名 from
(select ,(case when tb1c_id = @pre_c_id then @rank:=@rank+1 else @rank:=1 end) as 排名,
(case when @pre_c_id = tb1c_id then @pre_c_id else @pre_c_id:=tb1c_id end ) as pre_c_id
from
(select from score order by c_id,s_score desc) tb1 )tb2 join student b on tb2s_id = bs_id where 排名 <4;
-- 26、查询每门课程被选修的学生数
select c_id ,count(s_id) as 选修人数 from score group by c_id;
-- 27、查询出只有两门课程的全部学生的学号和姓名
select as_id ,bs_name from score a left join student b on as_id = bs_id group by s_id having count() = 2;
-- 28、查询男生、女生人数
select sum(case s_sex when '男' then 1 else 0 end) as 男生人数,
sum(case s_sex when '女' then 1 else 0 end) as 女生人数 from student;
-- 29、查询名字中含有"风"字的学生信息
select from student where s_name like '%风%';
-- 30、查询同名同性学生名单,并统计同名人数
--略,不想写
-- 31、查询1990年出生的学生名单
select from student where s_birth like '1990%';
-- 32、查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列
select c_id ,round(avg(s_score),2) as 平均成绩 from score group by c_id order by 平均成绩 desc, c_id asc;
-- 33、查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩
select as_id,bs_name ,round(avg(s_score),2) as 平均成绩 from score a
left join student b on as_id = bs_id group by as_id having 平均成绩>=85;
-- 34、查询课程名称为"数学",且分数低于60的学生姓名和分数
select bs_name ,as_score from score a
left join student b on as_id = bs_id
where ac_id=(select c_id from course where c_name = '数学')and as_score < 60;
-- 35、查询所有学生的课程及分数情况;
select bs_name,
sum(case when ac_id = '01' then as_score else null end) as 语文,
sum(case when ac_id = '02' then as_score else null end) as 数学,
sum(case when ac_id = '03' then as_score else null end) as 英语
from score a right join student b on as_id = bs_id group by bs_name
-- 36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;
select bs_name,
sum(case when ac_id = '01' then as_score else null end) as 语文,
sum(case when ac_id = '02' then as_score else null end) as 数学,
sum(case when ac_id = '03' then as_score else null end) as 英语
from score a right join student b on as_id = bs_id group by bs_name having 语文>= 70 or 数学>= 70 or 英语>= 70 ;
-- 37、查询不及格的课程
select as_id,ac_id,bc_name,as_score from score a
left join course b on ac_id = bc_id where as_score<60;
--38、查询课程编号为01且课程成绩在80分以上的学生的学号和姓名;
select as_id,bs_name from score a left join student b on as_id = bs_id where ac_id = '01' and as_score>=80;
-- 39、求每门课程的学生人数
select c_id,count() as 学生人数 from score group by c_id ;
-- 40、查询选修"张三"老师所授课程的学生中,成绩最高的学生信息及其成绩
select a,bc_id,max(bs_score) as 最高成绩 from student a
right join score b on as_id = bs_id
group by bc_id
having bc_id = (select c_id from course
where t_id = (select t_id from teacher where t_name = '张三'));
-- 41、查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩
--(这题我搞不清题目是什么意思,是指查找学生个体参加了的所有课程的成绩各不相同的那个学生信息呢?还是所有课程之间做对比呢,我更倾向于理解为前者)
--理解为前者的写法
select from
(select from score group by s_id,s_score) tb1
group by s_id having count() = 1;
--理解为后者的写法
select distinct as_id,ac_id,bs_score from score a,score b where ac_id != bc_id and as_score = bs_score;
-- 42、查询每门课程成绩最好的前两名
set @pre_c_id:= '01';
set @rank:=0;
select tb2s_id ,tb2c_id,tb2s_score from
(select ,(case when tb1c_id = @pre_c_id then @rank:=@rank+1 else @rank:=1 end) as 排名,
(case when @pre_c_id = tb1c_id then @pre_c_id else @pre_c_id:=tb1c_id end ) as pre_c_id
from
(select from score order by c_id,s_score desc) tb1 )tb2
join student b on tb2s_id = bs_id where 排名 <3;
-- 43、统计每门课程的学生选修人数(超过5人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人相同,按课程号升序排列
select c_id ,count() as 选修人数 from score group by c_id having 选修人数>5 order by 选修人数 desc , c_id asc;
-- 44、检索至少选修两门课程的学生学号
select s_id from score group by s_id having count() >= 2;
-- 45、查询选修了全部课程的学生信息
select from student where s_id in
(select s_id from score group by s_id having count() = 3)
--46、查询各学生的年龄
select s_name ,(date_format(now(),'%Y')-date_format(s_birth,'%Y') + (CASE when date_format(now(),'%m%d')>=date_format(s_birth,'%m%d') then 0 else 1 end)) as age
from student
-- 47、查询本周过生日的学生
---(实现得并不完全,因为例如出生月日为‘01-01’在每一年可能会输入不同周)
select from student where week(date_format(s_birth,'%m%d'))=week(date_format(now(),'%m%d')) ;
-- 48、查询下周过生日的学生
select from student
where week(date_format(s_birth,'%m%d'))=week(date_format(date_add(now(),interval 7-dayofweek(now())+1 day),'%m%d'));
-- 49、查询本月过生日的学生
select from student where date_format(s_birth,'%m') = date_format(now(),'%m')
-- 50、查询下月过生日的学生
select from student where date_format(s_birth,'%m') = date_format(date_add(now(),interval 1 month),'%m')
SQL(结构化查询语言)是一种设计用于检索和 *** 作数据的数据库。它是美国国家标准协会(ANSI)的标准。此语言用于执行选择,更新,删除和插入等数据任务。
表是在具有列和行的模型中设计的数据集合。在表中,指定了列数,称为字段,但未定义行数,称为记录。
数据库是有序形式的一组信息,用于访问,存储和检索数据。
DBMS是一个控制数据维护和使用的程序。它被认为是管理数据的文件管理器。有四种类型的DBMS:
最有用的DBMS是Relational DBMS。它为数据提供了一个关系运算符。
SQL命令分为以下类型:
它包含来自一个或多个表的行和列,可以定义为虚拟表。它消耗的内存较少。
句法:
Join用于从相关的行和列中检索数据。它在两个或多个表之间工作,并且它从两个表返回至少一个匹配。
连接类型是:
数据库查询是数据库表中的数据请求。查询可以是选择查询或任何其他类型的查询。
子查询是查询的一部分。外部查询已知主查询,内部查询识别子查询。始终首先执行子查询,并将结果传递给主查询。
Autoincrement是一个关键字,用于在表中插入新记录时生成数字。
它可用于设置表中数据类型的限制。在创建或更新表语句时,可以使用约束。一些限制是:
SQL中有不同类型的键:
规范化是一种设计技术,它以减少数据依赖性的方式排列表。它将表分成小模块并按关系链接。
非规范化是一种优化方法,我们将多余的数据增加到表中,并在规范化后应用。
存储过程是一组SQL语句,用作访问数据库的函数。为了减少网络流量并提高性能,我们使用存储过程。
句法:
索引用于加速查询的性能。它可以更快地从表中检索数据。可以在一组列上创建索引。
聚簇索引 - 它有助于轻松检索数据,并且只有一个聚簇索引与一个表一起分配。它会更改记录在数据库中的保存方式。
非聚集索引 - 与聚簇索引相比,非聚簇索引很慢。并且在非集群索引的情况下,该表可以具有多个索引。它为表创建一个对象,该表是搜索后指向表的一个点。
触发器 被 用来执行对表中的特定动作,诸如插入,更新或删除 。它是一种 存储过程 。动作和事件是触发器的主要组成部分。执行Action时,事件响应该 *** 作而出现。
通常,这些属性称为ACID。它们有助于数据库事务。
A tomicity -在一个事务中连接两个或更多个单独的数据块,或者所有的块都致力于,或者一个都不。
C onsistency - 事务或者生成新的有效数据状态,或者如果发生任何失望,则在事务启动之前将所有数据返回到其状态。
I solation - 正在进行且尚未提交的事务必须继续与任何其他 *** 作隔离。
D urability -在此 *** 作中,系统保存提交的数据,每当事件发生故障和系统启动后,所有的数据是可用的正确的位置。
SQL语句分为几类:
它被定义为通过为查询提供条件来设置结果集的限制。他们从整个记录中过滤掉一些行。
一些SQL CLAUSES是WHERE和HAVING。
它是一个返回单个值的数学函数。
SQL中的聚合函数是:
为了 *** 作字符串,我们使用String Function。其中一些是:
排序规则 是一 组规则,用于确定数据如何通过比较进行排序 。例如使用一组规则存储的字符数据,这些规则定义了正确字符的序列以及类型,重音和区分大小写。
在系统内存中执行SQL语句时,会创建一个临时工作区,称为Cursor。在select语句中,游标存储了信息。游标可以使用多行,但一次只能处理一行。这组行称为活动集。
游标有两种类型:
SQL服务器是Microsoft关系数据库管理系统(RDBMS)的一种类型或示例。它在IT氛围中提供广泛的事务处理和商业智能。
运算符是一个保留字,主要用于SQL语句的WHERE子句中以进行 *** 作。
空值是没有值的字段。它与Zero不同。假设有一个表,并且在表中有一个字段,可以在不添加值的情况下将记录插入字段,然后该字段将以NULL值保存。
空白是我们提供的价值。
零只是一个数字。
数据仓库被称为来自多个信息源的中央数据中心。这些数据可用于在线处理和挖掘。
在表中,应该只有一个PRIMARY KEY,但在另一种情况下,UNIQUE KEY可以是任意数量的。
PRIMARY KEYS不允许NULL值,但UNIQUE KEY允许NULL值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)