脚本之家(jb51.cc)运维面试题栏目主要收集运维工程师面试题,运维人员面试专属面试题。
无论对Spark集群,还是Hadoop集群等大数据相关的集群进行调优,对linux系统层面的调优都是必不可少的,这里主要介绍3种常用的调优和linux常见面试题
北京朗途融通信息科技有限公司 1、用_________创建一个隐藏的共享文件夹 2、常用的三种解析计算机命的方法有______,______,______。
1.ARP的中文名称及作用? 地址解析协议将IP转化为MAC地址 2.MAC的广播地址? FF-FF-FF-FF-FF-FF
PS:这个iptables脚本不错,很实用,根据实际应用改一下就可以自己用。分享出来,供大家来参考。原作者佚名。源代码如下:#!/bin/sh#modprobe ipt_MASQUERADEmodprobe ip_conntrack_ftpmodprobe ip_nat_ftpiptables -Fiptables -t nat -Fiptables -Xiptables -t nat -X###########################INPUT键###################################iptables -P INPUT DROPiptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -p tcp -m multiport --dports 110,80,25 -j ACCEPTiptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 139 -j ACCEPT#允许内网samba,smtp,pop3,连接iptables -A INPUT -i eth1 -p udp -m multiport --dports 53 -j ACCEPT#允许dns连接iptables -A INPUT -p tcp --dport 1723 -j ACCEPTiptables -A INPUT -p gre -j ACCEPT#允许外网vpn连接iptables -A INPUT -s 192.186.0.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -i ppp0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP#为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃iptables -A INPUT -s 192.186.0.0/24 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP#为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃iptables -A INPUT -p icmp -m limit --limit 3/s -j LOG --log-level INFO --log-prefix "ICMP packet IN: "iptables -A INPUT -p icmp -j DROP#禁止icmp通信-ping 不通iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE#内网转发iptables -N syn-floodiptables -A INPUT -p tcp --syn -j syn-floodiptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURNiptables -A syn-flood -j REJECT#防止SYN攻击 轻量#######################FORWARD链###########################iptables -P FORWARD DROPiptables -A FORWARD -p tcp -s 192.168.0.0/24 -m multiport --dports 80,110,21,25,1723 -j ACCEPTiptables -A FORWARD -p udp -s 192.168.0.0/24 --dport 53 -j ACCEPTiptables -A FORWARD -p gre -s 192.168.0.0/24 -j ACCEPTiptables -A FORWARD -p icmp -s 192.168.0.0/24 -j ACCEPT#允许 vpn客户走vpn网络连接外网iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -mtime --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的8:00-12:30禁止qq通信iptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -mtime --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的8:00-12:30禁止qq通信iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -mtime --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROPiptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -mtime --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的13:30-20:30禁止QQ通信iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com" -mtime --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的8:00-12:30禁止qq网页iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com" -mtime --timestart 13:00 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的13:30-20:30禁止QQ网页iptables -I FORWARD -s 192.168.0.0/24 -m string --string "ay2000.net" -j DROPiptables -I FORWARD -d 192.168.0.0/24 -m string --string "宽频影院" -j DROPiptables -I FORWARD -s 192.168.0.0/24 -m string --string "色情" -j DROPiptables -I FORWARD -p tcp --sport 80 -m string --string "广告" -j DROP#禁止ay2000.net,宽频影院,色情,广告网页连接 !但中文 不是很理想iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROPiptables -A FORWARD -p tcp -m ipp2p --ares -j DROPiptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP#禁止BT连接iptables -A FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 24#######################################################################sysctl -w net.ipv4.ip_forward=1 &>/dev/null#打开转发#######################################################################sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null#打开 syncookie (轻量级预防 DOS 攻击)sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=3800 &>/dev/null#设置默认 TCP 连接痴呆时长为 3800 秒(此选项可以大大降低连接数)sysctl -w net.ipv4.ip_conntrack_max=300000 &>/dev/null#设置支持最大连接树为 30W(这个根据你的内存和 iptables 版本来,每个 connection 需要 300 多个字节)#######################################################################iptables -I INPUT -s 192.168.0.50 -j ACCEPTiptables -I FORWARD -s 192.168.0.50 -j ACCEPT#192.168.0.50是我的机子,全部放行!############################完#########################################
1、详述iptales工作流程以及规则过滤顺序?iptables过滤的规则顺序是由上至下,若出现相同的匹配规则则遵循由上至下的顺序 2、iptables有几个表以及每个表有几个链?Iptables有四表五链 3、iptables的几个表以及每个表对应链的作用,对应企业应用场景?    filter:INPUT  作用:for  packets destined  to  local  sockets                FORWARD 作用:for packets  being  routed  through  the box                OUTPUT 作用:for locally-generated packets    nat:PREROUTING 作用:for altering packets  as  soon as they come in            OUTPUT     作用:for altering locally-gener- ated packets before routing            POSTROUTING 作用:for altering packets as they are about to go out    mangle :PRE-ROUTING  (for  altering incoming packets before rout-ing) and OUTPUT (for altering locally-generated pack-ets  before  routing).   INPUT  (forpackets  coming  into  the  box itself), FORWARD (foraltering packets being routed through the  box),  and POSTROUTING  (for  altering packets as they are about to go out). 4、画图讲解iptables包过滤经过不同表和链简易流程图并阐述。5、请写出查看iptables当前所有规则的命令。     iptables -L -n --line-numbers 6、禁止来自10.0.0.188 ip地址访问80端口的请求     iptables -A INPUT -p tcp --dport 80 -j DROP 7、如何使在命令行执行的iptables规则永久生效?    /etc/init.d/iptables save    iptables save >>/etc/sysconfig/iptables 8、实现把访问10.0.0.3:80的请求转到172.16.1.17:80     iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.6:80 9、实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网。    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 124.32.54.26    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE10、描述tcp 3次握手及四次断开过程?11.详细描述HTTP工作原理?    1 ) 地址解析    2)封装HTTP请求数据包    3)封装成TCP包,建立TCP连接(TCP的三次握手)    4)客户机发送请求命令    5)服务器响应    6)服务器关闭TCP连接12.请描述iptables的常见生产应用场景。     端口映射企业应用场景:1) 把访问外网IP及端口的请求映射到内网某个服务器及端口(企业内部);2) 硬件防火墙,把访问LVS/nginx外网VIP及80端口的请求映射到IDC 负载均衡服务器内部IP及端口上(IDC机房的操作) ;    局域网共享上网    iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 120.43.61.124 13、请描述下面iptables命令的作用iptables -N syn-flood            iptables -A INPUT -i eth0 -syn -j syn-floodiptables -A syn-flood -m limit -limit 5000/s -limit-burst 200 -j RETURNiptables -A syn-flood -j DROP 防止syn-flood攻击的 14、企业WEB应用较大并发场景如何优化iptables?net.nf_conntrack_max = 25000000net.netfilter.nf_conntrack_max = 25000000net.netfilter.nf_conntrack_tcp_timeout_established = 180net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120  (二)企业运维经验面试题:15、写一个防火墙配置脚本,只允许远程主机访问本机的80端口(奇虎360面试题)   iptables -A INPUT -p tcp --dport 80 -j accept   iptables -A INPUT -p tcp  -j DROP 16、请描述如何配置一个linux上网网关?         route add -net 192.168.0.0/24 gw 10.0.0.253 dev eth1 17、请描述如何配置一个专业的安全的WEB服务器主机防火墙?先将默认的INPUT链和Forward链关闭,只开放允许进入的端口iptables -P OUTPUT ACCEPTiptables -P  FORWARD DROPiptables -P INPUT DROP 18、企业实战题6:请用至少两种方法实现!写一个脚本解决DOS攻击生产案例提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。防火墙命令为:iptables -I INPUT -s 10.0.1.10 -j DROP。方法一:netstat -na|grep EST|awk -F "[ :]+" '{print $6}'|sort|uniq -c >>/tmp/a.log while true    do    grep EST a.log|awk -F '[ :]+' '{print $6}'|sort|uniq -c >/tmp/tmp.log    exec </tmp/tmp.log    while read line    do        ip=`echo $line|awk "{print $2}"`        count=`echo $line|awk "{print $1}"`        if [  $count -gt 100 ] && [ `iptables -L -n|grep $ip|wc -l` -lt 1  ]        then            iptables -I INPUT -s $ip -j DROP     //-I 将其封杀在iptables显示在第一条            echo "$line is dropped" >>/tmp/dropip.log        fi    done    sleep 180    done     方法二:netstat -na|grep EST|awk -F "[ :]+" '{print $6}'|awk '{S[$1]++}END{for(i in S) print i,S[i]}'   19、/var/log/messages日志出现kernel: nf_conntrack: table full, dropping packet.请问是什么原因导致的?如何解决?优化内核参数net.nf_conntrack_max = 25000000net.netfilter.nf_conntrack_max = 25000000net.netfilter.nf_conntrack_tcp_timeout_established = 180net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120   20、压轴上机实战iptables考试题 iptables -t nat -A POSTROUTING -s 10.0.0.253 -j SNAT -o eth0 --to-source 120.43.61.124iptables -A INPUT -p tcp --dport 80 -j ACCEPT tcpdump ip host 10.0.0.253 and  10.0.0.6 或 tcpdump ip host 10.0.0.253 and  10.0.0.7iptables -t nat -A PREROUTING -d 120.43.61.124 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.6:80 
 1. 你听说过Linux下面的iptables和Firewalld么?知不知道它们是什么,是用来干什么的?答案 : iptables和Firewalld我都知道,并且我已经使用iptables好一段时间了。iptables主要由C语言写成,并且以GNU GPL许可证发布。它是从系统管理员的角度写的,最新的稳定版是iptables 1.4.21。iptables通常被用作类UNIX系统中的防火墙,更准确的说,可以称为iptables/netfilter。管理员通过终端/GUI工具与iptables打交道,来添加和定义防火墙规则到预定义的表中。Netfilter是内核中的一个模块,它执行包过滤的任务。Firewalld是RHEL/CentOS 7(也许还有其他发行版,但我不太清楚)中最新的过滤规则的实现。它已经取代了iptables接口,并与netfilter相连接。2. 你用过一些iptables的GUI或命令行工具么?答案 : 虽然我既用过GUI工具,比如与Webmin结合的Shorewall;以及直接通过终端访问iptables,但我必须承认通过Linux终端直接访问iptables能给予用户更高级的灵活性、以及对其背后工作更好的理解的能力。GUI适合初级管理员,而终端适合有经验的管理员。3. 那么iptables和firewalld的基本区别是什么呢?答案 : iptables和firewalld都有着同样的目的(包过滤),但它们使用不同的方式。iptables与firewalld不同,在每次发生更改时都刷新整个规则集。通常iptables配置文件位于‘/etc/sysconfig/iptables‘,而firewalld的配置文件位于‘/etc/firewalld/‘。firewalld的配置文件是一组XML文件。以XML为基础进行配置的firewalld比iptables的配置更加容易,但是两者都可以完成同样的任务。例如,firewalld可以在自己的命令行界面以及基于XML的配置文件下使用iptables。4. 如果有机会的话,你会在你所有的服务器上用firewalld替换iptables么?答案 : 我对iptables很熟悉,它也工作的很好。如果没有任何需求需要firewalld的动态特性,那么没有理由把所有的配置都从iptables移动到firewalld。通常情况下,目前为止,我还没有看到iptables造成什么麻烦。IT技术的通用准则也说道“为什么要修一件没有坏的东西呢?”。上面是我自己的想法,但如果组织愿意用firewalld替换iptables的话,我不介意。5. 你看上去对iptables很有信心,巧的是,我们的服务器也在使用iptables。iptables使用的表有哪些?请简要的描述iptables使用的表以及它们所支持的链。答案 : 谢谢您的赞赏。至于您问的问题,iptables使用的表有四个,它们是:Nat 表Mangle 表Filter 表Raw 表Nat表 : Nat表主要用于网络地址转换。根据表中的每一条规则修改网络包的IP地址。流中的包仅遍历一遍Nat表。例如,如果一个通过某个接口的包被修饰(修改了IP地址),该流中其余的包将不再遍历这个表。通常不建议在这个表中进行过滤,由NAT表支持的链称为PREROUTING 链,POSTROUTING 链和OUTPUT 链。Mangle表 : 正如它的名字一样,这个表用于校正网络包。它用来对特殊的包进行修改。它能够修改不同包的头部和内容。Mangle表不能用于地址伪装。支持的链包括PREROUTING 链,OUTPUT 链,Forward 链,Input 链和POSTROUTING 链。Filter表 : Filter表是iptables中使用的默认表,它用来过滤网络包。如果没有定义任何规则,Filter表则被当作默认的表,并且基于它来过滤。支持的链有INPUT 链,OUTPUT 链,FORWARD 链。Raw表 : Raw表在我们想要配置之前被豁免的包时被使用。它支持PREROUTING 链和OUTPUT 链。6. 简要谈谈什么是iptables中的目标值(能被指定为目标),他们有什么用答案 : 下面是在iptables中可以指定为目标的值:ACCEPT : 接受包QUEUE : 将包传递到用户空间 (应用程序和驱动所在的地方)DROP : 丢弃包RETURN : 将控制权交回调用的链并且为当前链中的包停止执行下一调用规则7. 让我们来谈谈iptables技术方面的东西,我的意思是说实际使用方面你怎么检测在CentOS中安装iptables时需要的iptables的rpm?答案 : iptables已经被默认安装在CentOS中,我们不需要单独安装它。但可以这样检测rpm:# rpm -qa iptablesiptables-1.4.21-13.el7.x86_64如果您需要安装它,您可以用yum来安装。# yum install iptables-services8. 怎样检测并且确保iptables服务正在运行?答案 : 您可以在终端中运行下面的命令来检测iptables的状态。# service status iptables [On CentOS 6/5]# systemctl status iptables [On CentOS 7]如果iptables没有在运行,可以使用下面的语句---------------- 在CentOS 6/5下 ----------------# chkconfig --level 35 iptables on# service iptables start---------------- 在CentOS 7下 ----------------# systemctl enable iptables# systemctl start iptables我们还可以检测iptables的模块是否被加载:# lsmod | grep ip_tables9. 你怎么检查iptables中当前定义的规则呢?答案 : 当前的规则可以简单的用下面的命令查看:# iptables -L示例输出Chain INPUT (policy ACCEPT)target prot opt source destinationACCEPT all -- anywhere anywhere state RELATED,ESTABLISHEDACCEPT icmp -- anywhere anywhereACCEPT all -- anywhere anywhereACCEPT tcp -- anywhere anywhere state NEW tcp dpt:sshREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT)target prot opt source destinationREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT)target prot opt source destination10. 你怎样刷新所有的iptables规则或者特定的链呢?答案 : 您可以使用下面的命令来刷新一个特定的链。# iptables --flush OUTPUT要刷新所有的规则,可以用:# iptables --flush11. 请在iptables中添加一条规则,接受所有从一个信任的IP地址(例如,192.168.0.7)过来的包。答案 : 上面的场景可以通过运行下面的命令来完成。# iptables -A INPUT -s 192.168.0.7 -j ACCEPT我们还可以在源IP中使用标准的斜线和子网掩码:# iptables -A INPUT -s 192.168.0.7/24 -j ACCEPT# iptables -A INPUT -s 192.168.0.7/255.255.255.0 -j ACCEPT12. 怎样在iptables中添加规则以ACCEPT,REJECT,DENY和DROP ssh的服务?答案 : 但愿ssh运行在22端口,那也是ssh的默认端口,我们可以在iptables中添加规则来ACCEPT ssh的tcp包(在22号端口上)。# iptables -A INPUT -p tcp --dport 22 -j ACCEPTREJECT ssh服务(22号端口)的tcp包。# iptables -A INPUT -p tcp --dport 22 -j REJECTDENY ssh服务(22号端口)的tcp包。# iptables -A INPUT -p tcp --dport 22 -j DENYDROP ssh服务(22号端口)的tcp包。# iptables -A INPUT -p tcp --dport 22 -j DROP13. 让我给你另一个场景,假如有一台电脑的本地IP地址是192.168.0.6。你需要封锁在21、22、23和80号端口上的连接,你会怎么做?答案 : 这时,我所需要的就是在iptables中使用‘multiport‘选项,并将要封锁的端口号跟在它后面。上面的场景可以用下面的一条语句搞定:# iptables -A INPUT -s 192.168.0.6 -p tcp -m multiport --dport 22,23,80,8080 -j DROP可以用下面的语句查看写入的规则。# iptables -LChain INPUT (policy ACCEPT)target prot opt source destinationACCEPT all -- anywhere anywhere state RELATED,ESTABLISHEDACCEPT icmp -- anywhere anywhereACCEPT all -- anywhere anywhereACCEPT tcp -- anywhere anywhere state NEW tcp dpt:sshREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedDROP tcp -- 192.168.0.6 anywhere multiport dports ssh,telnet,http,webcacheChain FORWARD (policy ACCEPT)target prot opt source destinationREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT)target prot opt source destination 
公司用bugfree在进行新建Bug指派抄送给同事的时候,总是有人不及时登录BugFree去查看指派给自己的,所以要加一个邮箱通知,这样可以及时通知到被指派的同事。百度上很多用的是QQ邮箱来实现的,QQ邮箱也可以,网易邮箱也行。我以网易邮箱为例 讲一下配置BugFree邮箱发送的实例。这里以163邮箱为例:首先登陆163邮箱:然后找到 设置->POP3/SMTP/IMAP;开启POP3/SMTP服务(如下图) 开启之后,打开项目找到php-ini文件进行一些配置。修改配置如下 [mail function]; For Win32 only.; http://php.net/smtpSMTP = smtp.163.com; http://php.net/smtp-portsmtp_port = 25; For Win32 only.; http://php.net/sendmail-from;sendmail_from = me@example.com修改好之后接下来配置BugFree里面的protected/config/main.php文件内容如下'mail' =>array ('on' => '1', //开启邮件'from_address' => 'XXXX@163.com',//发送邮件的邮箱地址。'from_name' => 'BugFree','send_method' => 'SMTP','send_params' =>array ('host' => 'smtp.163.com',// SMTP邮箱主机,这里以163为例'smtp_auth' => true, //这里要改成true'username' => 'XXXX',//发送邮箱账号'password' => 'XXXX',//发送邮箱密码),),配置好之后要重启服务器。然后登陆BugFree,找到‘编辑我的信息’’这个地方这样就OK了,BugFree可以实时和定时发送邮件通知。在新建Bug或Test Case并保存后,指派给和抄送给将收到实时邮件通知。可以在“抄送给”编辑框输入多个用户帐号或者邮件地址,地址之间用逗号分隔。本文属原创内容,为了尊重他人劳动,转载请注明本文地址:https://www.cnblogs.com/luokakale/p/9714867.html
SQL常见面试题1.用一条SQL 语句 查询出每门课都大于80 分的学生姓名name   kecheng   fenshu张三    语文       81张三     数学       75李四     语文       76李四     数学       90王五     语文       81王五     数学       100王五     英语       90A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)select name from table group by name having min(fenshu)>802. 学生表 如下:自动编号   学号   姓名 课程编号 课程名称 分数1        2005001 张三 0001     数学    692        2005002 李四 0001      数学    893        2005001 张三 0001      数学    69删除除了自动编号不同, 其他都相同的学生冗余信息A: delete tablename where 自动编号 not in(select min( 自动编号) from tablename group by学号, 姓名, 课程编号, 课程名称, 分数)3.一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.你先按你自己的想法做一下,看结果有我的这个简单吗?答:select a.name, b.namefrom team a, team b where a.name < b.name4.请用SQL 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。数据库名:JcyAudit ,数据集:Select * from TestDB答:select a.*from TestDB a ,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) bwhere a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur************************************************************************************5.面试题:怎么把这样一个表儿year   month amount1991   1     1.11991   2     1.21991   3     1.31991   4     1.41992   1     2.11992   2     2.21992   3     2.31992   4     2.4查成这样一个结果year m1   m2   m3   m41991 1.1 1.2 1.3 1.41992 2.1 2.2 2.3 2.4 答案一、select year, (select amount from   aaa m where month=1   and m.year=aaa.year) as m1,(select amount from   aaa m where month=2   and m.year=aaa.year) as m2,(select amount from   aaa m where month=3   and m.year=aaa.year) as m3,(select amount from   aaa m where month=4   and m.year=aaa.year) as m4from aaa   group by year*******************************************************************************6. 说明:复制表( 只复制结构, 源表名:a新表名:b) SQL: select * into b from a where 1<>1       (where1=1,拷贝表结构和数据内容)Oracle:create table bAsSelect * from a where 1=2 [<>(不等于)(SQL Server Compact)  比较两个表达式。 当使用此运算符比较非空表达式时,如果左操作数不等于右操作数,则结果为 TRUE。 否则,结果为 FALSE。] 7. 说明:拷贝表( 拷贝数据, 源表名:a目标表名:b) SQL: insert into b(a, b, c) select d,e,f from a; 8. 说明:显示文章、提交人和最后回复时间SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b9. 说明:外连接查询( 表名1 :a表名2 :b)SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUTER JOIN b ON a.a = b.cORACLE:select a.a, a.b, a.c, b.c, b.d, b.f from a ,bwhere a.a = b.c(+)10. 说明:日程安排提前五分钟提醒SQL: select * from 日程安排 where datediff('minute',f 开始时间,getdate())>511. 说明:两张关联表,删除主表中已经在副表中没有的信息SQL: Delete from info where not exists (select * from infobz where info.infid=infobz.infid )*******************************************************************************12.有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value这道题的SQL 语句怎么写?update b set b.value=(select a.value from a where a.key=b.key) where b.id in(select b.id from b,a where b.key=a.key);*************************************************************************** 13.高级sql 面试题原表:courseid coursename score-------------------------------------1 Java 702 oracle 903 xml 404 jsp 305 servlet 80-------------------------------------为了便于阅读, 查询此表后的结果显式如下( 及格分数为60):courseid coursename score mark---------------------------------------------------1 Java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 pass---------------------------------------------------写出此查询语句select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course完全正确SQL> desc course_vName Null? Type----------------------------------------- -------- ----------------------------COURSEID NUMBERCOURSENAME VARCHAR2(10)SCORE NUMBERSQL> select * from course_v;COURSEID COURSENAME SCORE---------- ---------- ----------1 java 702 oracle 903 xml 404 jsp 305 servlet 80SQL> select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course_v;COURSEID COURSENAME SCORE MARK---------- ---------- ---------- ----1 java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 passSQL面试题(1)create table testtable1(id int IDENTITY,department varchar(12) )select * from testtable1insert into testtable1 values('设计')insert into testtable1 values('市场')insert into testtable1 values('售后')/*结果id department1   设计2   市场3   售后 */create table testtable2(id int IDENTITY,dptID int,name varchar(12))insert into testtable2 values(1,'张三')insert into testtable2 values(1,'李四')insert into testtable2 values(2,'王五')insert into testtable2 values(3,'彭六')insert into testtable2 values(4,'陈七')/*用一条SQL语句,怎么显示如下结果id dptID department name1   1      设计        张三2   1      设计        李四3   2      市场        王五4   3      售后        彭六5   4      黑人        陈七*/答案:SELECT testtable2.* , ISNULL(department,'黑人')FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID也做出来了可比这方法稍复杂。sql面试题(2)有表A,结构如下: A: p_ID p_Num s_id 1 10 01 1
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注