




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.net面试题目汇总Abstructclass与Interface的区别相同点:1)都不能被初始化;2)都支持抽象方法;不同点:1)abstractclass的成员函数允许有函数体,interface不能2)abstractclass允许有成员变量,interface不能(interface只能含有事件,委托,函数,属性,索引器);3)abstractclass的方法允许含有可见性修饰符,interface不能(默认为public)4)abstractclass不能被多重继承,interface可以被多重继承(实现)5)abstractclass可以拥有构造函数/静态构造函数,interface不可以class与Struct的区别相同点:1)它们都是创建对象的模板,用以抽象某类具有统统特征的对象;他们都包含数据和方法;2)它们在使用上没有太大的区别,除了关键字class和struct不同;不同点:1)Struct是值类型,它在内存中的存储方式是存储于堆(heap)上2)Class是引用类型,它在内存中的存储方式是存储于栈(stack)上Ref,Out,Params的区别params关键字可以指定在参数数目可变处采用参数的方法参数。在方法声明中的params关键字之后不允许任何其他参数,并且在方法声明中只允许一个params关键字。Out这是一个引用传递L。原则一:当一个方法(函数)在使用out作为参数时,在方法中(函数)对out参数所做的任何更改都将反映在该变量中。原则二:当希望方法返回多个值时,声明out方法非常有用。使用out参数的方法仍然可以返回一个值。一个方法可以有一个以上的out参数。原则三:若要使用out参数,必须将参数作为out参数显式传递到方法。out参数的值不会传递到out参数。原则四:不必初始化作为out参数传递的变量,因为out参数在进入方法(函数)时后清空自己,使自己变成一个干净的参数,也因为这个原因必须在方法返回之前为out参数赋值(只有地址没有值的参数是不能被.net接受的)。原则五:属性不是变量,不能作为out参数传递。原则六:如果两个方法的声明仅在out的使用方面不同,则会发生重载。不过,无法定义仅在ref和out方面不同的重载。ref仅仅是一个地址!!!原则一:当一个方法(函数)在使用ref作为参数时,在方法中(函数)对ref参数所做的任何更改都将反映在该变量中。原则二:调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。原则三:若要使用ref参数,必须将参数作为ref参数显式传递到方法。ref参数的值可以被传递到ref参数。原则四:ref参数传递的变量必须初始化,因为ref参数在进入方法(函数)时后还是它自己,它这个地址指向的还是原来的值,也因为这个原因ref参数也可以在使用它的方法内部不操作。原则六:如果两种方法的声明仅在它们对ref的使用方面不同,则将出现重载。但是,无法定义仅在ref和out方面不同的重载。经常会被问到的二个算法:冒泡排序和二分法。以下是两个比较经典的实现。冒泡排序算法:publicvoidBubbleSort(int[]arr){for(inti=1;i<arr.Length;i++)for(intj=0;j<arr.Length-i;j++){if(arr[j]>arr[j+1]){inttmp=arr[j];arr[j]=arr[j+1];arr[j+1]=tmp;}}}二分法查找:publicintHalfSearch(intkey,int[]arr){intleft=0;intright=arr.Length-1;while(left<=right){intmiddle=(left+right)/2;if(key==arr[middle])returnmiddle;elseif(key>arr[middle]){left=middle+1;}else{right=middle-1;return-1;面试时有相当大的可能会被问到面向对像的特点:继承,封装,多态。封装:每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其他对象来完成自己的操作。继承:对象的继承代表了一种“is-a”的关系,如果两个对象A和B,可以描述为“B是A”,则表明B可以继承A。多态:表示不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。集合ArrayList是命名空间System.Collections下的一部分,它是使用大小可以按需要动态增加的数组实现IList接口。泛型泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作它所存储的对象的类型占位符;类型参数作为其字段的类型和其方法的参数类型出现。IList<A>arrA=newList<A>();通常情况下,都建议使用泛型集合,因为这样可以获得得类型安全的直接优点而不需要从基集合类型派生并实现类型的特定成员。此外,如果集合元素为值类型,泛型集合的性能通常优于对应的非泛型集合类型(并优于从非泛基集合型类型派生的类型),因为使用泛型时不必对元素进行装箱。委托和事件委托是对函数的封装,可以当作给方法的特征指定一个名称。而事件则是委托的一种特殊形式,当发生有意义的事情时,事件对象处理通知过程。委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。事件是在发生其他类或对象关注的事情时,类或对象可通过事件通知它们。publicdelegatevoidCatShoutEventHandler();publiceventCatShoutEventHandlerCatShout;EventArges是包含事件数据的类的基类。一、Remoting和WebService面试的时候有时候会被问到Remoting和Webservice技术的区别:1.Remoting是MarshByReference的,可以传变量的引用,直接对服务器对象操作。速度快,适合intranet(企业内部互联网)。Webservice是MarshByValue的,必须传对象的值。速度慢,可以过FIREWALL配置比较简单,适合internet(因特网)。一般来说,Remoting是和平台相关的,需要客户和服务器都是.NET,但可配置特性比较好,可以自定义协议,可以使用Http或Tcp协议。Webservice可以做到跨平台通信,但必须采用SOAP协议。soap消息有rpc和文档两种样式。文档样式的body元素中包含一个或多个元素,可以是任何内容,只要接受者理解就行了。rpc样式的的body元素中包含调用的方法或远程过程的名称,以及代表方法参数的元素。.net对这两种样式的实现就是Webservice和RemotingRemoting不仅能传输XML格式的SOAP包(HTTP),还能传输二进制的数据流(TCP)。Webservice只能传输SOAP包。Remoting可以用于有状态的情况,Webservice是基于Http无状态的。在Windows操作系统中,Webservice是基于.netframework和IIS框架之上的,而Remoting则是不依赖于IIS的,使用者可以开发和部署自己的宿主服务器。这里还有两个重点:1.Remoting的SingleTon和SingleCall模式SingleTon模式:此为有状态模式。如果设置为SingleTon激活方式,则Remoting将为所有客户端建立同一个对象实例。当对象处于活动状态时,SingleTon实例会处理所有后来的客户端访问请求,而不管它们是同一个客户端,还是其他客户端。SingleTon实例将在方法调用中一直维持其状态。举例来说,如果一个远程对象有一个累加方法(i=0;++i),被多个客户端(例如两个)调用。如果设置为SingleTon方式,则第一个客户获得值为1,第二个客户获得值为2,因为他们获得的对象实例是相同的。如果熟悉Asp.Net的状态管理,我们可以认为它是一种Application状态。SingleCall模式:SingleCall是一种无状态模式。一旦设置为SingleCall模式,则当客户端调用远程对象的方法时,Remoting会为每一个客户端建立一个远程对象实例,至于对象实例的销毁则是由GC自动管理的。同上一个例子而言,则访问远程对象的两个客户获得的都是1。我们仍然可以借鉴Asp.Net的状态管理,认为它是一种Session状态。WebService和SOAP支持处理的数据类型不知道大家有没有遇到这种情况:在调用WebService并给一个方法传递了一个DataRow参数时,运行时会抛出异常:”没法将参数序列化!”,如果把DataRow加入到DataSet中,并将DataSet作为参数传递再运行就OK了。这是因为:XMLWebService只能对数据集DataSet对象类型进行XML序列化,不能对DataRow对象类型进行XML序列化造成的错误.所以了解一下XMLWebService支持序列化的基本数据类型是比较重要的.它支持的数据类型如下:1).基本数据类型.标准类型,如:intfloatboolDateTimestring等基本数据类型2).枚举.支持枚举Enum定义的类型3).自定义对象.可以传递任意基于自定义类或结构创建的对象。但要注意一点:它只能传输数据成员(变量和属性).如果定义了方法,则方法不能进行序列化传输,序列化后只剩下数据成员..DataSet对象支持DataSet,切记:不支持DataTable和DataRow,DataSet已经是Webservice能够支持的最小的可序列化对象..XmlNode对象基于XmlNode的对象可以表示XML文档的一部分..数组和集合可以使用任何被支持的类型的数组和简单集合,包括:DataSet对象/XmlNode对象和自定义对象.顺便说明一下序列化的概念:序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。要使一个类可序列化,最简单的方法是使用Serializable属性对它进行标记。给个例子:[Serializable]classMyUser{publicstringsUserName;publicintiAage;publicoverridestringToString(){returnstring.Format("姓名:{0},年龄:{1}”,sUserName,iAage);}}///////1、CTS、CLS和CLR分别是什么意思?什么是装箱和拆箱?答:CTS是公共类型系统,CLS是公共语言规范,CLR公共语言运行库。装箱和拆箱:是把值类型转换为引用类型的过程,是隐式的,相反的过程就是拆箱,是显式的。2、C#、JavaC++特点,有什么相同地方,不同的。C#从C++和Java吸取了什么优点?答:C#大部分的特性来源于Java,例如编译机制,运行机制,中间语言,虚拟机等等。但是C#拓展了Java,支持了更多优良的语法,比如事件编程机制。并且dotnetframework的支持多种编程语言(java,C#,C++,VB.NET等),不同于java虚拟机单一的支持java语言。C#继承于C++的特性是指针,通过unsafe关键字,C#可以使用底层的指针直接操作内存,但是一个有争议的特性。3、C#可否对内存直接操作。答:可以,通过unsafe语法,C#可以使用类似于C++的指针,直接操作内存。但是最好不要使用!4、维护数据库的完整性,你喜欢用触发器还是自写业务逻辑?为什么?答:尽可能用约束(包括CHECK、主键、唯一键、外键、非空字段)实现,这种方式的效率最好;其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策5、C#中的委托是什么?事件是不是委托?答:1,委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。例子:publicdelegateintPerformCalculation(intx,inty);2,事件不是委托,但是事件的底层实确实是基于委托的。所以某种意义上可以把事件理解为加上的event关键字的委托变量。6、简述以下你对分布式程序设计的理解,你对COM、DCOM、remoting、webservice了解吗?简单描述其特点作用7、自定义控件和一般控件的异同。如果用过两者之一你选什么?为什么?答:自定控件可以加到VS工具栏里用,一般控件做不到,自定义控件可以继承其它控件,也可以被继承.8、大概描述一下ASP.NET服务器控件的生命周期?答:初始化---加载视图状态---处理回发数据---加载---发送回发更改通知---处理同发事件---预呈现---保存状态---呈现---处置---卸载9、colloction和collections区别?答:Collection是集合类的上级接口,Collections是针对集合类的一个帮助类,它提供一系列静态方法来实现对各种集合的搜索,排序,线程安全化操作。10、ASP、ASP.NET实现报表显示打印的方案?答:应用XML技术实现报表打印的方案。11、math.roand(11.5)等于多少?,mathround(-11.5)等于多少?答:12、-1112、overload和override区别overloaded的方法是否可以改变返回值、类型?答:Override是重写的意思,它表示重写基类的方法,而且方法的名称,返回类型,参数类型,参数个数要与基类相同。Overload是重载是意思,它也表示重写基类的方法,但是只要方法名相同,别的可以不同。是可以改变返回值、类型13、set里的元素是不能重复的,那么用什么方法区分复与否呢?用==还是equas(),他们有什么区别?答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值14、List、Set、Map是否继承自colloction接口?答:List,Set是Map不是15、两个对象值相同((X・EAUSCY)==TURE)fi却可有不同的hashcode这句话对吗?答:不对,有相同的hashcode。16.SonSurtion能不能作用在byte.string.long上?不能存储过程和函数区别?答:函数有且只有一个返回值,就像普通的函数一样,可以直接在表达式中嵌入调用存储过程可以没有返回值,也可以有任意个输出参数,必须单独调用事务是什么?答:事务是指一个工作单元,它包含了一组数据操作命令,并且所有的命令作为一个整体一起向系统提交或撤消请求操作,这组命令要么都执行,要么都不执行。游标作用,如何知道游标已到了最后?答:游标用于定位结果集的行,通过判断全局变量@@fetch_status砍断是否到了最后,通常变量不等于0表示出错或到了最后触发器分事前触发的事后触发区别是什么?语句级触发和行级触发区别?事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。分析下SQLServer,Excharge.Server.Share,Porint,PortfalServerBiaTalkserve各自的功能及其作用?ApplicafionBlock说明其作用?ApplicationBlock将工作流代码从用户界面层抽象出来放到用户界面处理层。UIPApplicationBlock将UIP状态从用户界面中抽象出来并且存储在一个通用状态对象中,这个对象通过block类来访问ASP中怎么连接数据库?用javascript连接什么是AppheafionPool?应用程序池是将一个或多个应用程序链接到一个或多个工作进程集合的配置。因为应用程序池中的应用程序与其他应用程序被工作进程边界分隔,所以某个应用程序池中的应用程序不会受到其他应用程序池中应用程序所产生的问题的影响。Remoting在客户端服务怎么实现?COM、DCOM、REMOTING、WEBSERVICE了解多少?com是一个很好的组键说说你的项目经验及心得?你在三年内的职业规划是什么?swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?答:switch(exprl)中,exprl是一个整数表达式。因此传递给switch和case语句的参数应该是int、short、char或者byte。long,string都不能作用于swtich。ADO.NET的对象分别有什么?答:1,Connection//标识一个数据库的连接2,Command//可以通过该对象向数据库服务器发送Sql命令,并且得到返回结果。3,Transaction//表示一个数据库的事务,通过SqlConnection的BeginTransaction方法启动事务,它包含Commit提交和Rollback回滚两个操作。4,DataReader//返回游标读取类5,DataAdapter//数据配置器,配合DataSet使用,提供离线的数据集合访问支持。6,SqlCommandBuilder//SqlDataAdapter类的辅助类,可以通过查询命令生成增,删,改的命令。什么时候用到虚方法?虚方法和接口有什么区别?什么是“虚方法"?当实例方法声明包含virtual修饰符时,称该方法为虚拟方法。不存在virtual修饰符时,称该方法为非虚拟方法。非虚拟方法的实现是不变的:无论是在声明它的类的实例上调用该方法还是在派生类的实例上调用,实现都是相同的。与此相反,虚拟方法的实现可以由派生类取代。取代所继承的虚拟方法之实现的过程称为重写方法在虚拟方法调用中,为其进行调用的实例的运行时类型确定要调用的实际方法实现。在非虚拟方法调用中,实例的编译时类型是决定性因素。准确地说,当在具有编译时类型C和运行时类型R的实例(其中R为C或者从C派生的类)上用参数列表A调用名为N的方法时,调用按下面这样处理:首先,将重载决策应用于C、N和A,以从在C中声明和由C继承的方法集中选择一个特定方法M。然后,如果M为非虚拟方法,则调用M。否则,M为虚拟方法,调用就R而言M的派生程度最大的实现。32.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?答:foreach(System.Windows.Forms.Controlcontrolinthis.Controls){if(controlisSystem.Windows.Forms.TextBox){System.Windows.Forms.TextBoxtb=(System.Windows.Forms.TextBox)control;tb.Text=String.Empty;}}SQL基本语句SQL中有四种基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。INSERT语句用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员JohnSmith的记录插入到本例的表中,可以使用如下语句:INSERTINTOEMPLOYEESVALUES('Smith','John','1980-06-10','LosAngles',16,45000);通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。当然,2000年临近,请你最好还是使用四位来表示年份。既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分:INSERTINTOEMPLOYEESVALUES('Bunyan','Paul','1970-07-04','Boston',12,70000);INSERTINTOEMPLOYEESVALUES('John','Adams','1992-01-21','Boston',20,100000);INSERTINTOEMPLOYEESVALUES('Smith','Pocahontas','1976-04-06','LosAngles',12,100000);INSERTINTOEMPLOYEESVALUES('Smith','Bessie','1940-05-02','Boston',5,200000);INSERTINTOEMPLOYEESVALUES('Jones','Davy','1970-10-10','Boston',8,45000);INSERTINTOEMPLOYEESVALUES('Jones','Indiana','1992-02-01','Chicago',NULL,NULL);在最后一项中,我们不知道Jones先生的工薪级别和年薪,所以我们输入NULL(不要引号)。NULL是SQL中的一种特殊情况,我们以后将进行详细的讨论。现在我们只需认为NULL表示一种未知的值。有时,像我们刚才所讨论的情况,我们可能希望对某一些而不是全部的列进行赋值。除了对要省略的列输入NULL外,还可以采用另外一种INSERT语句,如下:INSERTINTOEMPLOYEES(FIRST_NAME,LAST_NAME,HIRE_DATE,BRANCH_OFFICE)VALUE('Indiana','Jones','1992-02-01','Indianapolis');这样,我们先在表名之后列出一系列列名。未列出的列中将自动填入缺省值,如果没有设置缺省值则填入NULL。请注意我们改变了列的顺序,而值的顺序要对应新的列的顺序。如果该语句中省略了FIRST_NAME和LAST_NAME项(这两项规定不能为空),SQL操作将失败。让我们来看一看上述INSERT语句的语法图:INSERTINTOtable[(column{,column})]VALUES(columnvalue[{,columnvalue}]);和前一篇文章中一样,我们用方括号来表示可选项,大括号表示可以重复任意次数的项(不能在实际的SQL语句中使用这些特殊字符)。VALUE子句和可选的列名列表中必须使用圆括号。SELECT语句SELECT语句可以从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。实际上,仅仅是访问数据库来分析数据并生成报表的人可以对其他SQL语句一窍不通。SELECT语句的结果通常是生成另外一个表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中。在直接SQL(directSQL)中,它将结果显示在终端的显示屏上,或者将结果送到打印机或文件中。也可以结合其他SQL语句来将结果放到一个已知名称的表中。SELECT语句功能强大。虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选择”(或称“限制”),但实际上它也可以完成其他两种关系运算一“投影”和“连接”,SELECT语句还可以完成聚合计算并对数据进行排序。SELECT语句最简单的语法如下:SELECTcolumnsFROMtables;当我们以这种形式执行一条SELECT语句时,系统返回由所选择的列以及用户选择的表中所有指定的行组成的一个结果表。这就是实现关系投影运算的一个形式。让我们看一下使用图1中EMPLOYEES表的一些例子(这个表是我们以后所有SELECT语句实例都要使用的。而我们在图2和图3中给出了查询的实际结果。我们将在其他的例子中使用这些结果)。假设你想查看雇员工作部门的列表。那下面就是你所需要编写的SQL查询:SELECTBRANCH_OFFICEFROMEMPLOYEES;以上SELECT语句的执行将产生如图2中表2所示的结果。由于我们在SELECT语句中只指定了一个列,所以我们的结果表中也只有一个列。注意结果表中具有重复的行,这是因为有多个雇员在同一部门工作(记住SQL从所选的所有行中将值返回)。要消除结果中的重复行,只要在SELECT语句中加上DISTINCT子句:SELECTDISTINCTBRANCH_OFFICEFROMEMPLOYEES;这次查询的结果如表3所示。现在已经消除了重复的行,但结果并不是按照顺序排列的。如果你希望以字母表顺序将结果列出又该怎么做呢?只要使用ORDERBY子句就可以按照升序或降序来排列结果:SELECTDISTINCTBRANCH_OFFICEFROMEMPLOYEESORDERBYBRANCH_OFFICEASC;这一查询的结果如表4所示。请注意在ORDERBY之后是如何放置列名BRANCH_OFFICE的,这就是我们想要对其进行排序的列。为什么即使是结果表中只有一个列时我们也必须指出列名呢?这是因为我们还能够按照表中其他列进行排序,即使它们并不显示出来。列名BRANCH_OFFICE之后的关键字ASC表示按照升序排列。如果你希望以降序排列,那么可以用关键字DESC。同样我们应该指出ORDERBY子句只将临时表中的结果进行排序;并不影响原来的表。假设我们希望得到按部门排序并从工资最高的雇员到工资最低的雇员排列的列表。除了工资括号中的内容,我们还希望看到按照聘用时间从最近聘用的雇员开始列出的列表。以下是你将要用到的语句:SELECTBRANCH_OFFICE,FIRST_NAME,LAST_NAME,SALARYHIRE_DATEFROMEMPLOYEESORDERBYSALARYDESC,HIRE_DATEDESC;这里我们进行了多列的选择和排序。排序的优先级由语句中的列名顺序所决定。SQL将先对列出的第一个列进行排序。如果在第一个列中出现了重复的行时,这些行将被按照第二列进行排序,如果在第二列中又出现了重复的行时,这些行又将被按照第三列进行排序……如此类推。这次查询的结果如表5所示。将一个很长的表中的所有列名写出来是一件相当麻烦的事,所以SQL允许在选择表中所有的列时使用*号:SELECT*FROMEMPLOYEES;这次查询返回整个EMPLOYEES表,如表1所示。下面我们对开始时给出的SELECT语句的语法进行一下更新(竖直线表示一个可选项,允许在其中选择一项。):SELECT[DISTINCT](column[{,columns}])!*FROMtable[{,table}][ORDERBYcolumn[ASC]IDESC[{,column[ASC]IDESC}]];定义选择标准在我们目前所介绍的SELECT语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行:SELECTcolumnsFROMtables[WHEREpredicates];WHERE子句对条件进行了设置,只有满足条件的行才被包括到结果表中。这些条件由断言(predicate)进行指定(断言指出了关于某件事情的一种可能的事实)。如果该断言对于某个给定的行成立,该行将被包括到结果表中,否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如,假如你需要查询所有姓为Jones的职员,则可以使用以下SELECT语句:SELECT*FROMEMPLOYEESWHERELAST_NAME='Jones';LAST_NAME='Jones部分就是断言。在执行该语句时,SQL将每一行的LAST_NAME列与“Jones”进行比较。如果某一职员的姓为Jones”,即断言成立,该职员的信息将被包括到结果表中(见表6)。使用最多的六种比较我们上例中的断言包括一种基于“等值”的比较(LAST_NAME='Jones'),但是SQL断言还可以包含其他几种类型的比较。其中最常用的为:格工等于=不等于<>小于<大于>小于或等于<=大于或等于>=下面给出了不是基于等值比较的一个例子:SELECT*FROMEMPLOYEESWHERESALARY>50000;这一查询将返回年薪高于$50,000.00的职员(参见表7)。逻辑连接符有时我们需要定义一条不止一种断言的SELECT语句。举例来说,如果你仅仅想查看DavyJones的信息的话,表6中的结果将是不正确的。为了进一步定义一个WHERE子句,用户可以使用逻辑连接符AND,OR和NOT。为了只得到职员DavyJones的记录,用户可以输入如下语句:SELECT*FROMEMPLOYEESWHERELAST_NAME='Jones'ANDFIRST_NAME='Davy';在本例中,我们通过逻辑连接符AND将两个断言连接起来。只有两个断言都满足时整个表达式才会满足。如果用户需要定义一个SELECT语句来使得当其中任何一项成立就满足条件时,可以使用OR连接符:SELECT*FROMEMPLOYEESWHERELAST_NAME='Jones'ORLAST_NAME='Smith';有时定义一个断言的最好方法是通过相反的描述来说明。如果你想要查看除了Boston办事处的职员以外的其他所有职员的信息时,你可以进行如下的查询:SELECT*FROMEMPLOYEESWHERENOT(BRANCH_OFFICE='Boston');关键字NOT后面跟着用圆括号括起来的比较表达式。其结果是对结果取否定。如果某一职员所在部门的办事处在Boston,括号内的表达式返回true,但是NOT操作符将该值取反,所以该行将不被选中。断言可以与其他的断言嵌套使用。为了保证它们以正确的顺序进行求值,可以用括号将它们括起来:SELECT*FROMEMPLOYEESWHERE(LAST_NAME='Jones'ANDFIRST_NAME='Indiana')OR(LAST_NAME='Smith'ANDFIRST_NAME='Bessie');SQL沿用数学上标准的表达式求值的约定一圆括号内的表达式将最先进行求值,其他表达式将从左到右进行求值。以上对逻辑连接符进行了说明,在对下面的内容进行说明之前,我们再一次对SELECT语句的语法进行更新:SELECT[DISTINCT](column[{,column}])|*FROMtable[{,table}][ORDERBYcolumn[ASC]|[DESC[{,column[ASC]|[DESC}]]WHEREpredicate[{logical-connectorpredicate}];NULL和三值逻辑在SQL中NULL是一个复杂的话题,关于NULL的详细描述更适合于在SQL的高级教程而不是现在的入门教程中进行介绍。但由于NULL需要进行特殊处理,并且你也很可能会遇到它,所以我们还是简略地进行一下说明。首先,在断言中进行NULL判断时需要特殊的语法。例如,如果用户需要显示所有年薪未知的职员的全部信息,用户可以使用如下SELECT语句:SELECT*FROMEMPLOYEESWHERESALARYISNULL;相反,如果用户需要所有已知年薪数据的职员的信息,你可以使用以下语句:SELECT*FROMEMPLOYEESWHERESALARYISNOTNULL;请注意我们在列名之后使用了关键字ISNULL或ISNOTNULL,而不是标准的比较形式:COLUMN=NULL、COLUMN<>NULL或是逻辑操作符NOT(NULL)。这种形式相当简单。但当你不明确地测试NULL(而它们确实存在)时,事情会变得很混乱。例如,回过头来看我
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025网络版自建房买卖合同书
- 保姆三方合同样本
- led灯珠合同样本
- 个体商合伙合同样本
- 企业电缆出售合同标准文本
- 业务员用工合同样本
- 农村水管收购合同样本
- 农民工法律援助合同样本
- 冰糖代加工合同样本
- 2025年蔬菜采购合同范本
- 2025年全球及中国包裹接收和追踪软件行业头部企业市场占有率及排名调研报告
- 小学校长学校管理讲座
- 河道水毁清理维护施工合同
- DB32T 4355-2022 建筑施工附着式升降设施安全技术规程(修)
- 农村初级电工培训
- 2025年国家粮食和物资储备局垂直管理系统事业单位招聘(869人)历年管理单位笔试遴选500模拟题附带答案详解
- 电力拖动自动控制系统试卷带答案
- 肌肉注射护理讲课课件
- 车辆油箱盖产品入市调查研究报告
- 工业大数据采集处理与应用
- 皮肤科(规培)练习题库与答案
评论
0/150
提交评论