《Java基础知识复习资料.pdf》由会员分享,可在线阅读,更多相关《Java基础知识复习资料.pdf(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java基础知识复习资料l.java语言是强类型还是弱类型语言?为什么?Java是强类语言,在使用变量时有如下规则:0 变量必须声明,并且初始化以后才能使用.E 变量必须有明确的类型(type)。0 变量不能重复定义。javascript是一种弱类型语言,即变量在声明时,不能明确声明其类型变量的类型是在运行时确定的,并且可以随时改变2JAVA的数据类型有哪些?(1)基本数据类型(八种):一 整型:byte 1 字节,short 2 字节,int 4 字节,long 8 字节浮点型:float 4 字节,double 8 字节flo at类 型 共 32位(不 int相同),其 中 1 位为符号
2、位,指 数 8 位,尾数2 3 位。一 1(double类型能表示64位,其 中 1 位符号位,11位指数,52位尾数】【浮点数的字面量默认是double字符型:char 2 字 节【unicode编码值】-boolean型:boolean 1 字节【值只有true和 false】隐式类型转换:正方向:char今byte今short int-long-float-double一 负方向:引用类型(自定义类型):对象:比如String数组:int 口接口:interface3JAVA中成员变量和局部变量的区别?成员变量:是在类范围内定义的(也叫成员属性)类属性:使用static修饰的就是类属性。
3、作用域:类属性的作用域与这个类的生存范围相同,它作为类的一个成员,与类共存亡。只要类存在,程序就可以访问该类的类属性。-实例属性:不被static修饰的就是实例属性。作用域:实例属性则从这个类的实例(对象)被创建开始存在,直到系统完全销毁这个实例,它作为实例(对象)的一个成员,与 实 例(对象)共存亡。只要实例存在,程序就可以访问该实例的实例属性。局部变量:在一个方法内定义的变量。(包括方法的形式参数)1.形参:作用域是整个方法体-2.方法局部变量:一个代码块中-3.代码块局部变量:一个代码块中注意:局部变量除了形式参数外,都必须显示初使化(必须显示指定初使值)。否则不可以访问它们。形式参数不
4、须显示初使化,它在被调用时由系统完成。4.前+和后+的区别?i+,后+,先 将 i 的值作为整个表达的值,然后将i 增 加 1。第 1 页 共 4 3 页0+i,先+,先 将 i 增 加 1,然 后 将 i 的值作为整个表达的值。5.短路运算符和非短路运算符的区别?_ 一短路运算符 条件1&条 件 2),如果条件1不成立,则条件2 不执行;一一非短路运算符 条件1&条 件 2,两个条件都会执行。6.怎样取得数组的长度?数组:arr.length 集合:list.size()字符串:str.length。7.实现数组拷贝(复制)的2 种方法?System.arraycopy(src,srcPos
5、,dest,destPos,length);src-疵 数 组。srcPos-源 数 组 中 的 起 始 位 置。_ dest-目标数 组。destPos-目标数据中的起始位置。-le n g th -要 复 制 的 数 组 元 素 的 数 量。Arrays.copyOf(src,length):是 JDK1.6 版本提供的方法,比起 System.arraycopy()使用更简便.(注:当然,可以用新建数组用for循环的方式进行复制)8.java中的4 种访问制权限有哪些?分别作用范围是什么?类 内 包 内 子 类 任 意public7 7 7 7protectedQ 2 Qdefaultp
6、rivate7-(1).public:最大访问控制权限,对所有的类都可见。(2).protect:修饰的,在类内部、同一个包、子类中能访问第2页 共4 3页(3).default:包访问权限,即同一个包中的类可以可见。默认不显式指定访问控制权限时就是default包访问控制权限。(4).private:最严格的访问控制权限,仅该类本身可见。(注:访问控制修饰符可以修饰类,成员变量,方法,但是修饰类只用public和 default)9JAVA5的新特性有哪些?(1)循环(F o r-e a c h 循环)f o r (t y p e va r i a b l e :a r r a y)b o
7、d y f o r (t y p e va r i a b l e :a r r a y L i st)b o d y)而1.4必须是:f o r (i n t i =0;i a r r a y,l e n g t h;i+)t y p e va r i a b l e =a r r a y i ;b o d y f o r (i n t i =0;i a r r a y L i st.si z e();i+)t y p e va r i a b l e =(t y p e)a r r a y L i st.g e t(i);b o d y)(2)泛型以A r r a y L i st为例,包
8、括创建一个容器对象和取得容器内对象操作:1.5 A r r a y L i st a r r a y L i st =n e w A r r a y L i st 0;a r r a y L i st.g e t(i)1.4 A r r a y L i st a r r a y L i st =n e w A r r a y L i st();(T y p e)a r r a y L i st.g e t(i)(3)自动装箱拆箱在JD K 5.0以前,在原始类型与相应的包装类之间的转化是不能自动完成的。要完成这种转化,需要手动调用包装类的构造函数,在JD K 5.0环境中,可以自动转化:1.5
9、 In t e g e r wr a p p e r =n;i n t n =wr a p p e r;1.4 In t e g e r wr a p p e r =n e w In t e g e r (n);i n t n 二 wr a p p e r.i n t V a l ue O ;自动装包/拆包大大方便了基本类型数据和它们包装类地使用。自动装包:基本类型自动转为包装类.(i n t In t e g e r);自动拆包:包装类自动转为基本类型.(In t e g e r i n t);静态导入静态导入功能对于JD K 5.0以前的版本是不支持的。i m p o r t st a t
10、 i c j a va.l a n g.M a t h;i m p o r t st a t i c j a va.l a n g.Sy st e m;1.5 o ut.p r i n t i n(sq r t (P I);1.4 Sy st e m.o ut.p r i n t i n(M a t h,sq r t(M a t h.P I);(5)可变参数(V a r a r g s)可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是函数声明中的最后一个参数。在JD K 1.5之前,可以用重载来实现,但是这样就需要写很多的重载函数。l i n e l p ub l i
11、c vo i d wr i t e(O b j e c t.o b j s)l i n e 2 f o r (O b j e c t o b j:o b j s)l i n e 3 Sy st e m.o ut.p r i n t l n(o b j);l i n e 4 第3页 共43页10.面向对象编程中几种对象组合方式-is-a Zhas-a/use-a:(1).is-a组合:一个类继承具有相似功能的另一个类,根据需要在所继承的类基础上进行扩展。优点:具有共同属性和方法的类可以将共享信息抽象到父类中,增强代码复用性,同时也是多态的基础。缺点:子类中扩展的部分对父类不可见,另外如果共性比较
12、少的时候使用继承会增加冗余代码。(2).has-a组合:has-a组合是在一个类中引用另一个类作为其成员变量。优点:可扩展性和灵活性高。在对象组合关系中应优先考虑has-a组合关系。缺点:具有共性的类之间看不到派生关系。一(3%use-a组合:是一个类中使用到了另外一个类,依赖关系11.构造方法(构造器)特点?0 Java中的构造器(构造方法)声明在类内部。0方法名与类名一致的方法叫构造方法0构造方法不能声明返回值类型。0构造方法可以包含参数,参数一般是创建对象实例必须依赖的条件(前提条件)。子类默认调用父类的无参构造器,如果父类没有无参构造器,那么子类必需显示的去调用父类的有参构造器如果一个
13、类没有提供无参构造器,那么编译器将会自动提供一个无参构造器。12JAVA中属性和方法的静态绑定和动态绑定?静态绑定:Java根据引用变量类型查找属性动态绑定:java根据实际的对象查找方法13.JavaBean 规范?1)必须有包(package)2)Java类,具有无参数构造器3)有 用getXxx()和setXxx()声明的Bean属性0如:getNamef)和setName(String n)声 明 的Bean属性为:name,不是否有实例变量name无关0 boolean类型的get方法可以有两种形式:getMarried()戒 者isMarried。4)必须实现序列化接口(注:在学习
14、1 0的时候具体学习)14.static关键字的特点?static静态关键字修饰:属性、方法、内部类、代码块static修饰的资源属于类级别,是全体对象实例共享的资源static变量在类加载期间初始化静态代码块是在类加载期间运行的代码块,由于类只加载一次,所以静态代码块只执第4页 共4 3页行一次!15.final关键字的特点?final可以修饰类,方法,变量final修饰的类,不能再被继承final修饰的方法,不能覆盖final方法final修饰的变量final的局部变量,只能初始化不能改final的方法参数,不能改fin al的引用,引用指向不能改,但是对象的属性可以改16.常见的fina
15、l类有哪些?Java的 String就 是 final类,不能被继承!M ath是 final类,不能被继承!Integer Long,Character等包装类是final类,不能被继承!17.抽象类和接口的区别?抽象类-不具体的类1 抽象方法,只有行为的概念,没有具体的行为实现。使用:abstract关键字修饰,并且没有方法体。2 包含抽象方法的类,就一定是抽象类。使用:abstract关键字修饰,包含抽象方法。如:平面图形一定可以计算面积。public abstract class CRMSystempublic abstract Client addClient(String name
16、,String qq);3 抽象方法和抽象类非常适合作为系统的分析和设计的工具。4 抽象类不能直接创建实例。可以定义引用变量。5 抽象类只能被继承,一个具体类继承一个抽象类,必须实现所有抽象方法。接口1.接口:全部的方法都是抽象方法,全部的属性都是常量。接口用来表示纯抽象概念,没有任何具体的方法和属性。2 .不能实例化,可以定义变量。3.接口变量可以引用具体实现类的实例。4 .接口只能被实现,一个具体类实现接口,必须使用全部的抽象方法。5 .接口之间可以继承。6 .一个具体类可以实现多个接口,实现多继承现象,表示:一个概念即是XXX也是XXX.7.接口中的属性,默认是常量public stat
17、ic final8.接中的方法一定是:public abstract9.实现一个接口,使用关键字implements,实现实际上是一种继承关系。接口和实现类是父子类型的关系第 5 页 共 4 3 页18.重载和重写的区别?重载:方法名相同,参数不同(参数类型或者长度)重载和修饰符和返回类型无关。一是方法的参数列表必须改变,包括参数的类型,参数的个数多少,参数顺序。二是重载对返回类型,访问修饰符,异常声明没有任何限制,可以作任意的修改。实质上,重载只是创建了一个方法而已,特殊的地方在于方法的名字。重写:两同两小一大(规则)两同:方法名相同参数类型相同两小:返回值类型(基本数据类型要一致,引用类型
18、可以是其子类)抛出的异常要小(也可以抛出父类型的异常的部分异常,或者不抛出异常)一大:访问控制修饰符大(1)重写方法必须和被重写方法具有相同的参数列表,返回类型必须和被重写方法的返回类型相同或者是返回类型的子类型。(2)重写方法的访问控制修饰符不能比被重写方法更严格(比如一个在父类中声明为public的方法重写成一个protected的方法)。(3)只有实例方法才能被重写,超类中的final方法不能被重写。(4)重写方法不能抛出新的检查异常,或者是抛出比被重写方法声明的检查异常更广泛的检查异常。19.=和 equal邪的区别?“=,比较引用值和基本数据类型是否相等。0 xxx.equals。方
19、法比较对象的内容是否相等。默认的比较规则是:比较引用20.为什么要同时覆盖hashcode()和 equals。?hashCode。方法要不equals方法一同覆盖(Sun公司规定)0当两个对象equals比较为tru e时,应具有相同的hashCode。值0当两个对象equals比较为false时,应具有.不相同的hashCode()值1 3 hashCode()值要稳定(一致性),一个对象创建以后就不应该再变化默认的hashCode。值是当前堆对象地址转换的一个整数,这个整数不是内存地址!在 java的中,判断两个对象是否相等的规则是:首先,判断两个对象的hashcode是否相等如果不相等
20、,认为两个对象也不相等如果相等,则判断两个对象用equals运算是否相等如果不相等,认为两个对象也不相等如果相等,认为两个对象相等21.String类有哪些常用的方法?charAt()length()trim()toLowerCase()toUpperCase()indexOf()lastlndexOf()endsWith()第 6 页 共 4 3 页startsWith()substring(int start,int end)substring(int start)toCharArrayf)22.String,StringBuilder,StringBuffer 的区别?String=ch
21、ar 口+操作(复制创建新对象)char 口 不可变StringBuilder=char+对 char操作(处理当前数组内容)char口可变1)StringBuilder是变长字符序列2)StringBuilder 方法:append,insert.都返回当前 StringBuilder 对象本身的引用StringBuffer 和 StringBuilder API 几乎一样!StringBuffer是 java早期提供的(JD K1.O),速度稍慢,线程安全StringBuilder是 Java5以后提供的(JD K5.0),速度快,非线程安全23.谈谈集合框架的理解?集合框架包括集合不映射
22、(Collection and Map)L is t 元素有先后次序的集合,元 素 有 in d e x位置,元素可以重复,继 承 自 Collection接口,实现类:ArrayList,Vector,Linked ListList表示有先后次序的对象集合ArrayList是使用变长数组算法实现的,ArrayList实 现 自 List1)ArrayList 和 Vector 的比较0 Vector(1.0版本提供的),线程安全的,效率稍低,也是使用变长数组算法实现的,继 承 自 List接口0 ArrayList,线程不安全的,效率高速度快(现在较常用)2)ArrayList 和 Link
23、edList 的比较0 LinkedList是采用双向循环链表实现的List0 ArrayList是采用变长数组算法实现的的List在 ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而 在 LinkedList的中间插入或删除一个元素的开销是固定的。ArrayList查询速度快,而 LinkedList增删速度快S e t元素无续,不能重复添加,是数学意义上的集合,继 承 自 Collection接口0 实现类:HashSet(是一个只有Key的 HashMap),使用Set时要重写hashcode,equals方法HashM ap以键-值对(关键字:值)的形
24、式存储对象,关 键 字 k e y 是唯一的、不重复的1)ke y可以是任何对象,Value可以任何对象2)(key:value)成对放置在集合中3)重 复 的 ke y算一个,重复添加是替换操作(会覆盖原来的元素)4)HashMap根 据 key检索查找value值HashMap 新,非线程安全,不检查锁,快Hashtable 旧(JDK1.2版本以前),线程安全,检查锁,慢一点(差的很小)第7页 共4 3页CQU0 G tiJOB 框架23.散列表的特点?散列表中存放的对象是不连续的,所以称为“散列表”散列表的优点:查找迅速在ArrayList中 查 找M a c,顺序查找,需要查找5次0
25、在HashMap中(底层实现原理是散列表)查 找M a c,经过散列运算,仅 需1次散列表原理05A rrayList|_ _ _ _ _ _ _ _ _ _ _按照name 找数值,如:name=Mac*端要直询1次|_ _ _ _ _ _ _ _ _ _24.java泛型的作用是什么?泛 型 是Java5以后提出的语法现象,作用是在编译期检查的类型约束(运行期不检查第8页 共4 3页泛型),泛型可以用来约束类中元素的类型2 5.Co l l e c t i o n 和 Co l l e c t i o n s 的区另!?Collection是集合接口,下面有子接口,List,Set集合的工
26、具类为Collections,同数组的工具类Arrays相同,其中提供了许多的方法,诸如排序、二分查找、打乱、填充等操作。2 6.内部类的分类?各有什么特点?1)根据位置的不同,Ja va中的内部类分为四种:0静态内部类0使 用 static修饰,声明在类体中0静态内部类中可以访问外部类的静态成员0成员内部类回声明在类体中,不使用static,具有类的成员特征,也就是,必须有类的实例才能创建内部类实例0内部类实例可以访问共享外部类的成员变量(很常用)0如:链表的节点就可以定义为内部类0局部内部类把类声明在方法中,就是局部内部类,作用域0类似局部变量(很少见)0匿名内部类匿名类,非常常见,可以写
27、在任何地方,就像一般的语句语法更象是创建对象:Date d=new Date()/.;匿名类是对原类的一个继承,同时创建了实例,就是继承以后的类体类体中可使用所有类的语法匿名类不能写构造器匿名类可以从抽象类或者接口继承,必须提供抽象方法的实现2)任何内部类都编译成独立的class文件3)最大的作用:封装!2 7.怎么将Da t e 和 S t r i n g 互相转换?第9页 共4 3页larena日期的揄入与揄出络 内 科 核new SimpleDateFormatCHH:mm:ss);fm t.format(date)DateFormat fmt=cal.getTimeO28.Java中的
28、异常理解?异常是程序运行过程过程出现的错误,在 Java中用类来描述,用对象来表示具体的异常。Java将其区分为Error与 Exception,Error是程序无力处理的错误,Exception是程序可以处理的错误。l)Error 与 ExceptionError是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些异常发生时,Java虚 拟 机(JVM)一般会选择线程终止。Error:一般指虚拟机相关问题,如虚拟机崩溃,虚拟机出错等这种错误无法恢复或不可捕获,将导致应用程序中断。对 于 Error 一般不编写针对性代码对齐进行处理。Exception是程
29、序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。程序中应当尽可能去处理这些异常。第1 0页 共4 3页2)运行时异常和非运行时异常检查异常:当代码中抛出了一个检查异常,那么编译器在编译代码时会检查代码是否有处理该异常的代码片段,没有则编译不通过。非检查异常:编译器不检查该类异常抛出是否有代码处理。(ClassNotFoundException 不是 RuntimeException 的子类)运行时异常都是RuntimeException类及其子类异常,如NullPointerException,IndexOutOfBoundsException,ArraylndexOutOfB
30、oundsException,ClassCastException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。自定义异常(自己定义异常表达错误)MyException extends Exception 检测(
31、check)异常MyException extends RuntimException 运行时(runtimeb异常29.JAVA中异常处理的方式有哪些?l)try.catch.finallytry(尝试运行的)程序代码catch(异常类型异常的变量名)异常处理代码finally/)注:子类异常的处理块必须在父类异常处理块的前面,否则会发生编译错误。finally块中一定会执行吗?2)throws,throwthrow关键字是用于方法体内部,用来抛出一个Throwable类型的异常。如果抛出了检查异常,则还应该在方法头部声明方法可能抛出的异常类型。throws关键字用于方法体外部的方法声明部分
32、,用来声明方法可能会抛出某些异常。仅当抛出了检查异常,该方法的调用者才必须处理或者重新抛出该异常。30.实现序列化的作用?(implements Serializable)序列化的作用是,将数据分解成字节流,以便存储在文件中或在网络上传输。31.10流的分类?以及常用流的写法?分为:字节流和字符流或者输入流和输出流Inputstream is=new FilelnputStream(gbk.txt);Reader in=new InputStreamReader(is);BufferedReader reader=new BufferedReader(in);第 1 1 页 共 4 3 页Pr
33、intwriter out=new PrintWtirer(new OutputStreamWriter(new FileOutputStream(filename);32.创建线程的两种方式?继承 Thread 类(extendsThread)或者实现 Runnable 接 口(implements Runnable)1)继 承 Thread类a实现步骤:0继 承 Thread类,覆盖run()方法,提供并发运程的过程0创建这个类的实例0使 用 start()方法启动线程2)实现 Runnable 接口0实现步骤:0实 现 Runnable接口,实现run()方法,提供并发运程的过程0创建这
34、个类的实例,用这个实例作为Thread构造器参数,创建Thread类0使 用 start()方法启动线程33.线程的5 中状态1)New 新建状态0 当程序使用new关键字创建了一个线程后,该线程就处于新建状态,此时线程还未启动,当线程对象调用start。方法时,线程启动,进 入 Runnable状态2)Runnable 可运行(就绪)状态回当线程处于Runnable状态时,表示线程准备就绪,等待获取CPU3)Running 运行(正在运行)状态0假如该线程获取了 C P U,则进入Running状态,开始执行线程体,即 run()方法中的内容0注意:如果系统另有1 个 C P U,那么在伏意
35、时间点则另有1 条线程处于Running状态:如果是双核系统,那么同一时间点会有2 条线程处于Running状态但是,当线程数大于处理器数时,依然会是多条线程在同一个C PU 上轮换执行当一条线程开始运行时,如果它不是一瞬间完成,那么它不可能一直处于Running状态,线程在执行过程中会被中断,目的是让其它线程获得执行的机会,像这样线程调度的策略取决于底层平台。对于抢占式策略的平台而言,系统系统会给每个可执行的线程一小段时间来处理伍务,当该时间段(时间片)用完,系统会剥夺该线程所占资源(CPU),让其他线程获得运行机会。0调用yield。方法,可以使线程由Running状态进入Runnable
36、状态4)Block 阻塞(挂起)状态0当如下情班下,线程会进入阻塞状态:0线程调用了 sleep。方法主动放弃所占C P U 资源0线程调用了一个阻塞式I。方法(比如控制台输入方法),在该方法返回前,该线程被阻塞0 第1 2页 共4 3页0当正在执行的线程被阻塞时,其它线程就获得执行机会了。需要注意的是,当阻塞结束时,该线程将进入Runnable状态,而非直接进入Running状态5)Dead 死亡状态回 当 线 程 的 run()方法执行结束,线程进入Dead状态0 需要注意的是,不要试图对一个已经死亡的线程调用start。方法,线程死亡后将不能再次作为线程执行,系统会抛出HlegalThr
37、eadStateException异常1)new运算创建线程后,线程进入New状 态(初始状态)2)调 用 start。方法后,线程从New状态进入Runnable状 态(就绪状态)0 start。方法是在main。方 法(Running状态)中调用的3)线程结束后,进 入 Dead状 态(死亡状态),被对象垃圾回收4)main()方法结束后,其它线程,比如上例中p l和 p 2 开始抢着进入Running状态0由谁抢到是底层操作系统决定(操作系统分配时间片)0单核处理器:在一个时间点上另有一个线程在Running状态;双核处理器:2 个0如果p l 进 入 Running状态,当操作系统分配
38、给它的时间片到期时,p l进 入 Runnable状态,p2进 入 Running状态0 在期间有可能其它的进程的线程获得时间片,那么p l和 p 2同时进入Runnable状态,等待操作系统分配时间片5)线程进入Dead状态后,另能被垃圾回收,不能再开始6)如果线程在运行过程中,自己调用了 yield。方法,则主动由 Running 状态进入Runnable 状态3 4.异步与同步的区别?第1 3页 共4 3页1)异步并发,各干自己的。如:一群人上卡车2)同步步调一致的处理。如:一群人上公交车35.数据库中,char和varchar类型的区别?char(n)表示定长字符串(方便查询)最长放入
39、n个 字 符,放入的数据如果不够n个字符则补空格,无论如何都占n个字符长度。varchar(n)表 示 变长字符串(节省空间)最长放入n个 字 符,放入的数据是几个长度就占多大空间。select decode(a2,A,AAAA,BBBB)FROM table;select decode(a l,A,AAAA,BBBB)FROM TT;此处是两个空格36.在数据库中怎么做表的复制?(一条语句完成)?create table emp_xxx as select*from emp_yyy;(注:如何将一个表中的数据复制到另外一个表中?insert into table(select*from ta
40、ble2);两个表结构一样insert into table(name,age)(select name,age from table2);复制指定的字段)37.分别简述一下 DDL,DML,DQL,TCL,DCL?1)数据定义语言DDL(Data Definition Language),是SQL语言集中负责数据结构定义不数据库对象定义的语言,主要有create、alter、d ro p和truncate四种常用语句。DDL对数据结构起作用。国create 数据库对象的创建回alter 修改数据库对象团drop 删除数据库对象团truncate 清空表数据2)数据操纵语言DML(Data M
41、anipulation Language),用户通过它可以实现对数据表的基本操作,即对表中数据的增、删、改。DML对数据起作用。0 insert 插入操作0 update 更新操作0 delete 删除操作3)数据查询语言DQL(Data Query Language),用户主要通过它实现对数据的查询操作。0 select 查询操作4)TCL事务控制语句是用来对DML操作进行确认的。commit 提交数据rollback 数据回滚savepoint 保存点5)数据控制语言(Data Control Language,DCL)用于对用户授权或撤销其权限,也可使用角色实现对用户的批量授权或撤销权限
42、,在应用开发层面较少用到。第 1 4 页 共 4 3 页grant(授予权限)/revoke(回收权限)38.0racle常用的单行函数有哪些?round(数 字,小数点后的位数)用于数字的四舍五入trunc(数 字,小数点后的位数)用于截取,如果没有第二个参数,默 认 是 0to_date()和 to_char()是时间处理的函数0 to _d ate将字符串数据按指定格式转换为日期数据0 to _ch ar将日期数据按指定格式转换为字符串数据coalesce(参 数 列 表)函数的作用:返回参数列表中第一个非空参数,参数列表中最后一个值通常为常量decode。函数是Oracle中等价于ca
43、se when语 句 的 函 数,作用同case语句相同。decode函数语法如下:decode(判 断 条 件,匹配1,值 1,匹配2,值 2,,默认值)nvl(bonus,0)空值转换函数39.常用的组函数有哪些?AVG求平均数COUNT求数量MAX求最大值MIN求最小值SUM求和注意:avg/sum操作数字max/min可以操作各种数据类型组函数默认忽略空值40.判断语句是否正确?select ename,count(*)from emp where ename=KING group by ename;select count(*),sum(sal)from emp group by e
44、name;在 SELECT列表中所有未包含在组函数中的列都应该包含在GROUP B Y 子句中。包含在GROUP B Y 子句中的列不必包含在SELECT列表中。41.研发部有哪些职位?select distinct job from emp_xxxwhere deptno=(select deptnofrom dept_xxxwhere dname=developer);42.ALL,Any,ln 的用法?ALL-大于最大值Any-大于最小值子查询的条件是单列还是多列没关系,关键是要分清返回的是单行还是多行。如 果 是 单 行,用单行比较运算符,=,all,any,all,(select a
45、vg(nvl(salary,O)第 1 5 页 共 4 3 页from emp_xxxwhere deptno=20);44.什么叫关联子查询?子查询中不再是独立的Sq|语 句,需要依赖主查询传来的参数,这种方式叫关联子查询哪些员工的薪水比本部门的平均薪水低?不再和整个部门的平均薪水比较。select ename,salary,deptnofrom emp_xxx awhere salary (select avg(nvl(salary,O)from emp_xxxwhere deptno=a.deptno);-子查询不再是独立的S q l语 句,需要依赖主查询传来的参数a.deptno4 5
46、.哪些人不是别人的经理?select ename from emp_xxx awhere not exists(select 1 from emp_xxxwhere mgr=a.empno);46.union 和 union all 的区别?union去 掉 重 复 记 录,union all不去重0 union排 序,union all不排序(当列的个数、列的顺序、列的数据类型一致时,我们称这两个结果集结构相同0只有结构相同的结果集才能做集合操作)47.0racle中表连接的方式有哪些?内连接(自然连接)等值连接、自然连接和不等值连接 内连接是jo in 关键字连接两个表,语法为tablel
47、 join table2 o n 条件。根据使用的比较方式不同,内连接又分为等值连接、自然连接和不等值连接。等值连接:所谓等值连接,是指在连接条件中使用等于(=)运算符比较被连接的值,也就是通过相等的列值连接起来的查询。例子:Select empno,ename,sal,emp.deptno,dname from emp,dept whereemp.deptno=dept.deptno;非等值连接:所谓不等连接,就是在连接条件中使用除等号(=)外的其他比较运算符,构成非等值连接查询。可以使用的比较运算符包括:(大于)、(小于)、=(大于等于)、=(小于等于)、(不等于)、!=(不等于)、LIK
48、E、IN 和 BETWEEN等。例子:select e.ename,e.sal,s.grade from emp e join salgrade s on e.sal between s.losalands.hisal;查询所有员工的薪水等级自然连接:自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件的结果。例子:select*from emp natural join dept;)外连接外 连 接 的 结 果 集=内 连 接 的 结 果 集+驱动表在匹配表中找不到匹配记录的数第1 6页 共4 3页据和空值使用一张表中的所有记录去和另一张表中的
49、记录按条件匹配(空值也会匹配),这个表中的所有记录都会显示。左外连接,右外连接,全外连接LEFT/RIGHT/FULL OUTER JOIN(1)左外连接(左边的表不加限制)【例】tl left outer join t 2-其中tl是驱动表,t2是匹配表等价于:t2 right outer join tl【例】查询每个员工的经理的名字?select worker,ename,manager,ename from emp worker leftouter join emp manager on worker.mgr=manager.empno;)(2)右外连接(右边的表不加限制)tl righ
50、t outer join t 2-12是驱动表,tl是匹配表等价于:t2 left outer join tl【例】一哪些员工没有下属(不是别人的领导)?外连接+匹配表PK is null表示否定问题,不是,不包括,等等。select manager,ename from emp workerright outer join emp manager on worker,mgr=manager,empno(首先找到所有经理下面的员工是哪些)where worker,empno is null;(然后将员工为空的过滤出来)(3)全外连接(左右两表都不加限制)full outer join(左表和右