【笔试题】Java笔试题知识点

时间:2022-10-04 17:25:42

Java高概率笔试题知识点

Java语法基础部分

【解析】java命令程序执行字节码文件是,不能跟文件的后缀名!

1.包的名字都应该是由小写单词组成,它们全都是小写字母,即便中间的单词亦是如此

2.类名的第一个字母一定要大写

3.变量名第一个字母应该为小写

4.与属性对应的get, set方法为: set(get)+属性名, 属性名第一个字母为大写.

存储一个24*24点阵的汉字(每个点1bit)需要多少字节? (72)

【解析】24*24/8=72。意思是:24*24的结果是二进制位,而八个二进制位等于 一个字节,所以再除以八是所得的字节数。

【知识点】Java中char类型的取值范围是0-65535

【知识点】在java中char是一个无符号的16位类型,取值范围为0—65535.

【知识点】隐式类型转换规则是:byte – short(char) – int – long – float – double

【知识点】三目运算符中,第二个表达式和第三个表达式中如果都为基本数据类型,整个表达式的运算结果由容量高的决定。

【知识点】java中对“+”进行了拓展,不仅可以连接字符串,而且还能将字符串与其他类型的数据进行连接,结果是字符串。若“+”的第一个操作数是字符串,Java会自动将后面操作类型转换成字符串类型。

【知识点】“/=” 运算符名字叫做除等于,two/=one,等价于 two = two/one。

若定义int a = 2,b = 2,下列表达式中值不为4的是?

A:a*(b++)           B:a*(++b)

【A选项中b是后++,先运算,后+1,不形象表达式

B选项里b是前++,先+1,后运算,所以B选项输出的结果是6】

【知识点】数组下标访问越界,只会影响到运行错误,编译时不会发生错误

【知识点】插入排序,从数组中第一个开始,和左侧的内容比大小,如果左侧内容小,两者就交换位置,然后继续向后取出数值,进行对比,如果比较过程中,左边的小,就继续往左比较,直到到头或者是达到比不过。

【知识点】数组.length 方法,没有括号,就是array.length;

【知识点】形参与实参的区别

形参:全称为“形式参数”是在定义函数名和函数体的时候使用的参数,目的是用来接收该函数时传入的参数

形参是局部变量,作用域在方法体内,离开该函数则不能使用

实参:全称为“实际参数”是在调用时传递该方法的参数。

实参出现在主方法中,进入被调用的方法后,实参也不能使用

形参和实参的功能是作为数据的传送,发生方法的调用时,主方法把实参的值传送给被调方法的形参,从而实现主调方法向被调方法的数据传送。

 

【知识点】方法重载必须是相同的方法名!

面向对象部分

 

【知识点】对于顶层类(外部类)来说,只有两种修饰符,public和 默认(default),因为外部类的上单元是包,所以外部类只有两个作用域,同包,任何位置,因此,只需要两种控制权限:包控制权限(default),和公开访问权限(public),只不过该类不能是顶层类,可以是内部类,内部类的上一级是外部类,那么对应的有4中访问修饰符,本类(private),同包(default),父子类(protected),任何位置(public)当一个内部类使用了private修饰后,只能在该类的外部类内部使用。

【知识点】Java中先使用package关键字,其次使用import关键字,最后使用calss关键字

【知识点】静态变量是所有对象所共享的,静态变量可以通过类名调用。

【知识点】类方法和实例方法的区别?

类方法:类方法有static修饰,为静态方法,是类的方法,在类文件加载到内存时就已经创建

实例方法:实例方法是对象的方法,只有对象创建后才起作用

区别:类方法中不能调用实例方法,但是实例方法中可以调用类方法,而且实例方法可以互相调用。

实例方法可以访问类变量,

类方法只能访问类变量

类方法可以通过类名调用,也可以通过对象调用

【知识点】静态执行顺序是按照在类中出现的先后顺序执行。

【知识点】类中的属性包括 数据成员和方法成员,方法成员可以调用类中的偶有数据成员(不论共有,私有)

实例化对象只能调用类总的共有数据成员或共有的方法成员

【知识点】由static修饰的变量称为类变量或是静态变量,局部变量作用域只在局部范围内部。

【知识点】import是写在package下。

【知识点】类方法中不能使用this关键字。

类方法中可以调用其他类中的类方法。

类方法中可以通过实例化对象调用实例方法。

【知识点】垃圾收集器在一个Java程序中的执行是自动的,不能强制执行,及时程序员能明确的判断有一块内存已经无用了,是应该回收的,程序员也不能轻质垃圾收集器回收该内存块,程序员唯一能做的就是通过调用

System.gc()方法来“建议”垃圾收集器去进行回收处理,但其是否可以执行,什么时候执行却都是不可知的。

【知识点】栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表(可以看做弹夹)。

【知识点】在子类构造方法的开始默认情况下,有一句super()来调用父类的构造方法。

【知识点】方法签名:方法名称+参数列表

【知识点】super关键字,我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。

this关键字,指向自己的引用。

【知识点】方法重写,重载的问题,重写要求方法签名完全相同返回值类型如果是基本类型或无返回值是必须一致

重载要求方法名相同,且参数名必须不同,与返回值类型无关。

【知识点】向上造型后,子类将不再具备其自定义的方法,只有父类的方法,但若重写了父类的方法,向上造型的对象的方法为重写后的新方法。

【知识点】方法重写返回值类型值如果是基本类型应与父类的一致

【知识点】子类重写父类方法,访问权限不能降低。

【知识点】父类中的私有方法,子类是不可以对其进行重写的。

【知识点】抽象方法不能有方法体

【知识点】局部变量不能使用类成员变量修饰符

【知识点】不通包的子类关系,可以访问到父类 protected成员

【知识点】属性的可见性有4种:公有的(public),保护的(protected),默认的(default),私有的(private)

【知识点】接口中的属性都是常量,默认由public static fianl同时修饰,可以省略,abstract不能修饰变量

【知识点】instanceof是java中的一个二元操作符,它的作用是测试它左边的对象是否是它右边的类的实例

返回boolean类型的数据

【知识点】实现Runnable接口,接口中有一个抽象方法run,实现类中重写该方法,而且方法是public修饰的。

【知识点】将父类引用赋值给子列型变量上需要强制类型转换

【知识点】抽象方法不可以是静态的,不能有方法体,不可以普通类中定义,可以在接口和抽象类中定义。

【知识点】接口中不可以有private的方法,

接口中不可以有final的方法,接口中的方法默认是 public abstract的

接口中的方法不可以有实现

【知识点】Java8.0之前,接口中只能定义常量和抽象方法

Java核心API部分

【知识点】文档注释/** */

【知识点】引用类型变量保存的时对象的地址,一个对象可以同时被多个变量所引用,并且操作

但是:一个变量只能引用一个对象,对一个对象进行操作。

【知识点】在调用toUpperCase(),和trim()方法是都会返回新的字符串对象,但是你要用字符串去接!!!

【知识点】\d+表示可以出现1次或是n次数字,

\.?表示.可以出现也可以不出现,

\d{1,2}表示最少出现1次最多出现2次数字

【知识点】String类型变量取值应为小写null或其他用””双引号,括起来的内容。

【知识点】先通过hashcode来判断某个对象是否存放某个桶里,但这个桶里可能有很多对象

那么我们就需要通过equals来在这个桶里找到我们要的对象。

两个对象如果hashCode值相同,则两个对象可能相同

两个对象如果hashCode值不同,则两个对象必定不同

【知识点】ArrayList不是线程安全的。

Verctor是线程安全的。

HashMap中可以存放null值作为key

Set中存放的对象是唯一的。

【知识点】java.util.Queue是链式存储,并快速顺序(不需要随机访问)访问的集合类型。

【知识点】如果要保证元素唯一,且按照存放顺序读取,可以选用LinkedHashSet

【知识点】接口不能直接new,Object对象不能直接转型成ArrayList类型

【知识点】Collection 是对象集合,Collection有两个子接口 List和Set

List是可重复集合,可以通过下标来取值

Set是不可重复集合,只能通过游标来取值

ArrayList,Vector,LinkedList是List的实现类

ArrayLIst是线程不安全的,Vector是线程安全的,这两者底层都是由数组实现的

Map是键值对的集合

HashTable 和 HashMap是Map的实现类

HashTable 是线程安全的,不能存储null值

HashMap不是线程安全的,可以存储null值

【知识点】链表采取动态存储分配,不会造成内存浪费和溢出

链表不能随机访问,查找时要从头指针开始遍历

链表插入,删除时,只要知道对应前去节点,修改指针即可,无需移动元素

链表需要额外空间存储线性的关系,存储密度小。

【知识点】目录在Java中作为一种特殊文件,即文件名的列表,通过File所提供的的方法,可得到文件的目录和面熟的信息(包括名字,路径,长度,可读,可写等),也可以生成新的文件,目录,修改文件和目录,查询文件属性,重命名文件或删除文件

【知识点】文件操作中,经常需要的是随机访问,Java中的RandomAccessFile类中提供了随意访问文件的功能

它继承了Object类,用DataInput和DataOutput接口来实现,接口中定义了从流中读/写基本类型的数据方法

因此可以随意读/写数据文件的记录。

【知识点】流最早从C语言中引入的,其可以看成是一个流的数据缓冲区,数据从数据源方向经过缓冲区流向数据的目的地,在传送的过程中,其传送方式是串行的,在Java中的java.io包中定义了Java中最常见的接口与类,其中包括两个最基本的流的抽象类,它们分别是OutputStream 与 inputStream,其余的流分别从这两个基本类中继承而来。

【知识点】一个程序在编译和运行时出现的错误我们统一称之为异常

一个合理的应用程序不能截获的严重的问题属于错误(Error)。

【知识点】Java语言中,错误类的基类是java.lang.Error,异常的基类是java.lang.Exception

两者都是java.lang.Throwable的子类,因此Error和Exception自身及其子类都可以作为throw的使用对象。

【知识点】final,finally,finalize的区别?

Fianl:

  1. 修饰符(关键字)如果一个类被声明为final,意味着它不能再派生新的子类,不能作为父类被继承,

因此一个类不能被声明为abstract,又被声明为final。

  1. 将变量或方法声明为final,可以保证他们使用中不被更改,被声明为final的不变阿玲必须在声明时给定处置,而以后的引用中只能读取,不可修改,被声明为fianl的方法也同样只能使用,不能重载。

Finally:

在异常处理是,提供finally块来执行清除操作,如果抛出一个异常,那么相匹配的catch语句就会执行,然后控制就会进入finally块(如果有的话)

Finalize:

是方法名,Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除以前做必要的清理工作,这个方法是在垃圾收集器在确定了,被清理对象没有被引用的情况下调用的。

Finalize是Object类中定义的,因此,所有的类都继承了它,子类可以覆盖finalize()方法,来整理系统资源或者其他清理工作。

【知识点】run()方法是线程的执行体

【知识点】在执行start();之前所执行的两个run();知识单纯的通过虚拟机进行调用该方法,

Start()执行后会将该线程至于就绪状态,等待系统分配时间片段给该线程去执行线程任务。

【知识点】suspend可以挂起一个线程,就是把这个线程暂停了,它占着资源,但不运行

用resume()是恢复挂起来的线程,让这个线程继续执行下去。

【知识点】java Thread中,run方法和start方法的区别?

  1. Start方法:用start来启动线程,是真正实现了多线程,通过调用Thread类的start()方法来启动一个线程

这时此线程处于就绪(可运行)并没有运行,一旦得到CPU时间片,就开始执行run()方法,但要注意的是

此时无需等待run()方法执行完毕,即可继续执行下面的代码。所以run()方法并没有实现多线程,

  1. Run方法:run()方法只是类的一个普通方法而已,如果直接调用run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行还是要等待run方法执行完毕后才可以继续执行下面的代码。

【知识点】wait方法和sleep方法很类似,都是出于等待状态,但是不同的是,wait方法执行后hi释放锁对象,

所以此段代码中的wait方法后面的语句不会被执行,而是一直处于等待状态中。

【知识点】线程生命周期:新建状态,可运行状态,运行状态,阻塞状态,终止状态。

【知识点】在主线程中启动新线程后,新线程处于就绪状态,那么新线程对象中的run()方法被系统执行是,视为已经即进入执行新线程的内容。

【知识点】线程的睡眠要调用Thread的sleep方法,传入参数为一个long类型的毫秒值,

打断睡眠程序会抛出InterrupedExceprion异常

【知识点】start()用来启动一个线程,当调用start方法后,系统才会开启一个新的线程,劲儿调用run()方法来执行。

单纯的调用run()方法就跟调用普通方法是一样的,已经失去线程的特性了

因此,在启动一个线程的时候,一定要使用start() 而不是run()。

 

【知识点】线程被创建后不可能立即开始运行,不同优先级的线程间是抢先式的.

即使线程因为抢先而停止也不一定就进入可运行队列的前面

而同级别的线程是轮换式的,它的运行可能就是因为轮换

而它因抢占而停止后只能在轮换队列中排队而不能排在前面。

【知识点】sleep:导致此线程暂停执行指定时间

Stop:这个方法将中航智所有未结束的方法,包括run方法

Wait:当前正在被服务的线程需要睡一会,醒来后即系被服务。

XML规则

【知识点】XMl命名规则:可以包含字母,数字,以及其他字符

名称不能以数字或者标点符号开始,名字不能以字符“XML”开始,名称不能包含空格

可以使用任何名称,没有保留的字词

【知识点】EMPTY表示元素不能包含文本,也不能包含子元素

#IMPLIED属性可以没有值

#REQUIRED 属性必须有值

【知识点】DTD不遵循XML语法 DTD不支持命名空间 DTD不可拓展

【知识点】定义XMl文档时,通过encoding属性来指定字符集

【知识点】定义xml文件是通过命名空间来避免重复的命名。

【知识点】Java解析xml文件四种方式:SAX,DOM,JDOM,DOM4J

【知识点】xml文档注释符号是:<!--    --!>

【知识点】DOM是独立于开发语言和平台的,因此使用Visnal Basic ,java,C++等开发工具使用的DOM编程API是一样。

XML文档通过load方法被装在进内存后,在内存中形成一个DOM文档对象模型树

通过DOM API,软件开发人员可以控制XML文档的结构和内容

SAX解析文档需要按照顺序,DOM可以随意

【知识点】XML语法规则:

  1. 必须有XML声明语句
  2. 是否有DTD文件
  3. 注意大小写
  4. 给属性值加引号
  5. 所有标识符必须有相应的结束标识
  6. 所有的空标识符也被关闭

【知识点】在XML中,单引号和双引号都可以使用在属性上

【知识点】二进制数左移一位相当于数为上的数值乘2右移一位相当于位数上的数值除以2.

 

【知识点】&位运算的规则是都为1则是1,只要有一个数的当前为是0,则结果为0

【知识点】每位16进制数是需要四位二进制数来表示。

【知识点】Oracle中连接字符串使用“||”符号

【知识点】Oracle中使用concat连接字符串

【知识点】删除表中的所有数据,DELETE FORM 表名

【知识点】属于Java接口的有Statement,Collection,ResulSet

【知识点】DriverManager是一个关于JDBC的数据库驱动类

【知识点】数据库连接池可以提高系统性能,与查询语句的速度没有关系

Sevlet

【知识点】ServletConfig接口默认是从GenericServlet实现的

【知识点】genericServlet类的实现接口中包括了ServletConfig接口,但是它自身的init(ServlerConfig config)方法又需要外界给它传递一个失恋ServletConfig的对象,就是说GenericServlet和ServletConfig的依赖关系既是继承关系,也是关联关系。

【知识点】Servlet属性是Web层组件的一种

【知识点】J2EE现在更多使用的名字是JavaEE 。

JSP是 JavaEE设计模式MVC中的显示部分

Servlet是控制部分

Web是JavaEE的服务器

【知识点】动态网站需要的技术为:

CGI

PHP

ASP

【知识点】Servlet中,可以保存数据的三个不同的作用域是

Request,session,上下文对象

【知识点】Servlet映射的配置,语法如下:servletName/url

【知识点】Servlet程序中,处理请求方法的入口是 Service(),在默认情况下

无论是get该是post请求,都会经过service方法

【知识点】在部署Servlet时,web.xml文件中<servlet>标签应该包含

Servlet-name和servlet-class 元素。

【知识点】获取request对象中的属性值,通过request.getAttribute()获取属性值

该方法返回Object类型,需要强制转换到String类型

【知识点】Servlet的初始化参数可以通过ServletConfig对象获取初始化参数

【知识点】Servlet在容器中经历的阶段,按顺序为

加载,初始化,服务,销毁,卸载

【知识点】Servlet声明周期的三个方法:init()—service()—destory()

Servlet声明周期的 各个阶段

实例化:Servlet容器创建Servlet类的实例对象

初始化:Servlet容器调用Servlet的init()方法

服务:如果请求Servlet,则容器调用Service方法

销毁:销毁实例之前调用destroy()方法

Servlet声明周期是由Servlet容器管理控制的

调用初始化init()方法时需要传入实现了ServletConfig接口的实例

【知识点】应该调用request.getparameter(“loginName”)获取表单参数,且应该使用Java代码片段

JSP

【知识点】JSP的注释标签<%--被注释的内容--%>

【知识点】指令中除import属性除外,其他属性都只能出现一次

【知识点】JSP页面经过编译之后,会创建一个对应的servlet

【知识点】JSP需要安装什么Web容器?

Tomcat,WebLogic。

【知识点】JSP运行时,JSP会先被容器解释成类文件,再编译init()和Destroy()方法只会被调用一次

Service()回被反复调用

【知识点】Application对象:application对应了Servlet中的ServletContext类的对象,它在每个Web项目中只有一个实例,常用阿里实现不同用户之间的数据共享,在不同用户在访问application的时候,访问的都是同一个对象,这样的话,一个用户可以把需要共享的数据放到application对象中,然后其他用户就可以在这个对象中获得想要的共享数据了

【知识点】HttpServletRequest对象用来封装客户端的所有的请求

【知识点】JSP有九个隐藏对象

  1. Request对象,保存了很多客户端请求的信息
  2. Response对象,生成服务器端响应,然后响应结果发送到客户端
  3. out对象,表示输出流,此输出流将作为请求发送到客户端
  4. Session对象:我们这个对象放在这个session对象中,这个对象就会在我们的会话中都存在
  5. application 对象:我们写个对象放在这个application中,这个对象就在整个应用程序中都存在
  6. pageContext对象:相当于当前页面的容器,可以访问当前页面的所有对象
  7. paget对象:一般我们使用Page指令来替代使用这个对象
  8. exception对象:用来处理异常的
  9. config对象:一样的我们在页面中是使用很少的,一般会在Servlet中使用这个。

【知识点】HttpSession接口全限定名是javax.servlet.http.HttpSession

【知识点】Cookice是用来记录客户端数据的,不能共享

【知识点】${user.logName}会调用user对象的getLoginName()方法

规则是将loginName的首字母变大写,然后前面加上get然后调用user对象中与该名字相同方法

【知识点】JSON是使用JavaScript语法来描述数据对象

它是轻量级的文本数据交换格式

独立于语言和平台

JSON解析器和JSON库支持许多不同编程语言

它具有自我描述性

【知识点】“:hidden”选择器是匹配所有不可见的元素

【知识点】“tr:first”选择器是匹配第一个tr元素

【知识点】JQuery中删除指定元素使用remove()方法,empty()是删除指定元素的子节点

【知识点】“:odd”选择器是匹配所有索引值为奇数的元素,其中索引值是从0开始计数

【知识点】“:gt(intdex)”是匹配所有大于给定索引值的元素,其中index是索引值,其且从0开始计数

【知识点】“:eq(index)”是匹配一个给定索引值的元素,参数index是索引值,且从0开始计数

【知识点】JQuery中使用appendTo()方法制定内容添加到元素的末尾

Spring

【知识点】IOC是控制反转,是将代码中的操控权转到容器里去控制

【知识点】Spring的事务支持,并不依赖JavaEE环境

【知识点】Spring框架有7个模块组成

  1. Spring 核心容器(Core)

这是Spring框架最基础的部分,它提供了依赖注入特征来实现容器对Bean的管理,这里最基本的概念是

BeanFactory,它是任何Spring应用的核心,BeanFcatory是工厂模式的一个实现,它使用IOC将应用配置和依赖说明从实际的应用代码中分离出来

  1. Spring 上下文(Context)

核心模块的BeanFactory使Spring称为一个容器,而上下文模块使它称为一个框架,这个模块拓展了BeanFactory的概念,正价对国际化消息,时间传播,以及验证的支持

另外,这个模块提供了许多企业服务,例如电子邮件,JNDI访问,EJB集成,远程以及时序调度服务,也包括了对模板框架例如velcocity和FreeMarker集成的支持。

  1. Spring AOP

Spring在它的AOP模块中提供了对面向切面编程的丰富支持,这个模块是在Spring应用中实现切面编程的基础,为了确保Spring和其他AOP框架的互用性,Spring的AOP基于AOP联盟定义的API,AOP联盟是一个开源项目,它的目标是通过定义一组共同的接口和组件来促进AOP的使用以及不同的AOP实现之间的互用性

Spring的AOP模块也将元数据编程引入了Spring,使用Spring的元数据支持,你可以为你的源代码增加注释,指示Spring在何处以及如何应用切面函数

  1. Spring ORM

对于更喜欢使用对象/关系映射工具而不是直接使用JDBC的人,Spring提供了ORM模块,Spring并不试图实现它自己的ORM解决方案,而是为几种流行的ORM框架提供了集成方案,Spring的事务管理支持这些ORM框架中的每一个也包括JDBC

  1. Spring DAO

使用JDBC经常导致大量的重复代码,取得连接,创建语句,处理结果集,然后关闭连接,Spring的JDBC和DAO模块抽取了这些重复的代码,因此你可以保持你的数据库代码访问代码干净简洁,并且可以防止因关闭数据库资源失败而引起的问题

这个模块上还在击中数据库服务器给出的错误消息上建立了一个有意义的异常层,使你不用再试图破译神秘的私有的SQL错误消息!

  1. Spring WEB

Web上下文模块建立于应用上下文模块之上,提供了一个适合Web应用的上下文,另外这个模块还提供了一些面向服务支持,例如:实现文件上传的请求,也提供了Spring和其他Web框架的继承,如Struts

  1. Spring MVC

【知识点】IOC具有三种注入方式,分别是构造函数注入,属性注入和接口注入

【知识点】Spring是一个开源的轻量级的应用开发框架

Spring为系统提供了一个整体解决方案

Spring提供的IOC和AOP功能,可以将组件的耦合度降至最低,即解耦,便于系统日后的维护和升级

【知识点】容器在默认情况下,一个bean定义只会创建一个实例,即缺省值为singleton

【知识点】容器可以依据属性名称或类型来完成自动装配,如果值为byName,容器会查找与属性名称一致的bean并调用对应的set方法来完成注入

【知识点】Spring是一个轻量级的框架,主要的连个模块是IOC和AOP

【知识点】Spring IOC 即为控制反转,对象只是被动的接收依赖对象。

【知识点】依据实际业务的需要,可以为Bean提供相应的生命周期方法,比如在初始化方法当中完成资源加载类似的逻辑,在销毁方法中释放资源,因此Bean当中是否有声明周期相关的方法,完全取决于实际业务需要,并不是必须的

【知识点】运行Servlet需要符合Servlet复返的容器,比如Tomcat,Spring容器是Spring框架的核心组成模块

【知识点】SpringMVC是一个mvc框架,主要是实现了核心控制器,并没有实现数据库访问功能

【知识点】在使用自动扫描时,应按照分层架构来选择合适的注解

@Component是通用注解

@Service是业务层组件注解

@Repository是持久化层的组件注解

【知识点】Spring组件扫描配置后,容器会扫描指定包及其子包下面的所有类,如果这些类包含了特定的注解,容器会将其纳入容器进行管理。

【知识点】字符串char(m)m代表显示长度,长度不可变 varChar(m)长度可变,一个中文占用两个字节。

【知识点】表的修改,删除表的字段 格式为:alter table 表名 drop 字段名

【知识点】查询字段的值为多个的时候,可以使用where子句(in)

Select * form person where age in(值1,值2,值3...)

【知识点】SQL语句用字符串拼接函数concat(a,b)将a与b进行拼接

如果a为字段,则将a的值与后面的b拼接

如果a 为苍凉值,则直接讲常量值与后面的b拼接

【知识点】between..and…在某两个数值之间,包含and 两边的数字

【知识点】分组查询group by 分组查询通常和聚合函数使用,查询条件中每个xxx就以xxx作为分组的条件

having有条件的分组统计,where后面只能对普通字段进行筛选,

having写在 group by后面,通常是group by结合使用,对分组后的查询结果进行过滤

普通字段的条件写在where后面

聚合函数条件写在having后面

【知识点】等值连接格式:select * from A,B where A.x = B.x and A.y = abc

内连接格式:select * from A join B on A.x = B.x where A.y = abc

SQL

【知识点】limit 跳过条数:limit(i,n)

I:为查询结果中的索引值

n:为查询结果返回的数量

i和n之间用英文逗号“,”隔开

【知识点】排序 order by格式

Order by格式:order by 字段名,默认升序,指定升序

指定升序:asc

降序:desc。

【知识点】外连接基本语法:

左表left/right join 右表 on 左表.字段 = 右表.字段;

右外连接:right join :以join右边表查询所有数据,左边表只查询有关系的数据。

左外连接:left join  :以join左边表尾主表查询所有数据,右边只查询有关系的数据。

【知识点】SQL语句的分类

  1. DDL 数据定义语言(create,drop,altert,truncate)(创建,清空,修改,删除表保留结构)不支持事务
  2. DML数据操作语言(insert,update,delete)(增删改)支持事务
  3. DQL 数据查询语言(select)(查询) 不支持事务
  4. TCL 事务控制语言(commit rollback)(提交,回滚)
  5. DCL 数据控制语言:分配用户权限

【知识点】视图是什么

事务:数据库中存在多种对象,表和视图都是数据库中的对象,创建视图时名称不能和表名重名

驶入实际上是一段SQL查询语句的映射,

可以理解成视图是一张虚拟的表,表中的数据会随着原表的改变而改变

【知识点】什么是索引?

索引是用来提高查询速度的技术,类似一个目录

索引会占用磁盘空间,所以创建时需谨慎,根据查询需求和表结构来决定创建什么索引

索引需要建立在大量数据表中,如果数据量不够大,有可能会降低查询效率。

【知识点】SQL表的约束

  1. not null 非空(值不能为null)
  2. unique 唯一(值不能重复,可以为null)
  3. primary key 主键约束(不能为空也不能重复)
  4. default 默认约束(给字段设置默认值,当字段不赋值的时候,默认值生效)