A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  阶段学习笔记之集合小结

1.     XML  

1. 用来存储一对多的数据

       2. 用来当做配置文件存储数据

       xml是怎样存储数据的?

答:以标签的形式存储  

例:  <name>Jack</name>

2.     文档声明

在编写XML文档时,需要先使用文档声明来声明XML文档。且必须出现在文档的第一行

      <?xml version='1.0' encoding='UTF-8'?>


3.     XML元素

指XML文件中出现的标签.一个完整标签分为开始标签和结束标签

元素中的属性是不允许重复的

标签分为两种
        
            a: 包含标签体
                理解: 简括号全部成对儿                     所有的数据都用一对儿简括号存储
                例:
                    <student>
                        <name>zhangsan</name>
                        <age>18</age>
                    </student>
        
            b:包含标不签体
                理解: 只有最外层的一个简括号,括号用/标识结束, 内部的数据都用属性来编写
                    <student
        name="zhangsan"   age="18"   />

                                      标签的书写规范

•         严格区分大小写

•         只能以字母或者下划线开头

•         不能以xml(或者XML, Xml等)开头…..W3C备用的

•         名称字符之间不能有空格或制表符

•         名称字符之间不能使用冒号:


元素中属性的注意事项

•         一个元素可以有多个属性,每个属性都有它自己的名称和取值。

•         属行之间是空格,  没有标点

•         属性值一定要用引号(单引号或双引号)引起来。            

•         属性名称的命名规范与元素的命名规范相同

•         元素中的属性是不允许重复的

•         在XML技术中,标签属性所代表的信息也可以被改成用子元素的形式来描述
                例如:

<?xml version="1.0" encoding="UTF-8"?>

<students>

       <student name="zhangsan"age="18"/>     方式一

      

      

       <student>                  

              <name>zhangsan</name>        方式二

              <age>18</age>

       </student>

</students>



XML中的注释

<!-- 被注释的内容  -->        不能嵌套注释


特殊字符转义

                        &     &

                         <     <

>     >

                         “     "

                        ‘     &apos


如何使用DTD约束文件?

1.   编写DTD文件

<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT 书架(书+)>

       <!ELEMENT书 (书名,作者,售价)>

       <!ELEMENT书名 (#PCDATA)>

       <!ELEMENT作者 (#PCDATA)>

       <!ELEMENT售价 (#PCDATA)>

2.   在xml文件中引入DTD文件

<!DOCTYPE 书架 SYSTEM "book.dtd">

       引入了写好的DTD文件后, 格式就必须跟DTD文件保持一致



DTD规范细节

!ELEMENT用于声明一个XML标签:

格式: <!ELEMENT 标签名称 使用规则>

标签名称

定义标签名

使用规则

(#PCDATA):Parsed Character Data, 指示元素的主题内容只能是普通的文本

EMPTY:指示元素的主体为空, 如<br/>

ANY:指示元素的主体内容为任意类型

(子元素): 指示元素中包含的子元素

子元素用逗号  , 分隔:则必须按声明顺序编写XML元素

子元素用竖线  | 分隔:任选其一即可

子元素后什么都没有: 必须且只能出现一次

子元素用  +  分隔: 至少出现一次

子元素用  *   分隔: 出现零次或任意次

子元素用  ?   分隔: 出现零次或一次

!ATTLIST用于为一个标签声明内部属性: attribute list

格式: 见下方

标签名: 用于指定该属性用于哪个标签

属性名: 属性的名称

属性值类型

CDATA:属性的取值为普通的文本字符串

(选项1|选项2|选项3): 枚举, 从列表中任选其一

ID:属性的取值不能重复

设置说明

#REQUIRED:该属性必须出现

#IMPLIED:表示该属性可有可无

#FIXED="固定值": 表示属性的取值为一个固定值

值: 表示属性的取值为该默认值



Schema  约束

Schema约束本身就是一个XML文件,但它的扩展名通常为 .xsd

一个XMLSchema文档通常称之为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档。\

XMLSchema对名称空间支持得非常好


XML解析的两种方式


DOM方式和SAX方式
1.  DOM:Document Object Model,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。
2.  SAX:SimpleAPI for XML。这种方式不是官方标准,

属于开源社区XML-DEV,几乎所有的XML解析器都支持它。


XML解析开发包
JAXP:是SUN公司推出的解析标准实现。
Dom4J:是开源组织推出的解析开发包。Dom for java four
       DOM: 将整棵树一口气全部加载到内存当中, 我们可以非常方便的操作任意的标签和属性.

但是, 如果整棵树特别大的时候, 会出现内存溢出的问题

节点: 标签、属性、文本、甚至是换行都称之为节点

SAX:一个节点一个节点的进行解析(暂不掌握)

   Log4j 为日志准备的



`

org.dom4j.io.SAXReader`类: SAX解析器

1.   构造方法:

        SAXReader()`: 创建一个SAX解析器

成员方法:

        Document   read(StringsystemId)`: 读取XML文件, 返回一个Document对象


org.dom4j.io.OutputFormat`类: 配置XML输出格式

static OutputFormatcreatePrettyPrint()`: 创建一个用户输出美观格式的OutputForma t对象

void setEncoding(String encoding): 设置字符集


org.dom4j.io.XMLWriter`类: 用于向XML中写入数据的输出流

       构造方法:

XMLWriter(OutputStreamout)`: 使用字节流创建一个XMLWriter对象

成员方法:

void     write(Document doc)`: 将Document对象中的数据写入到XML文件


org.dom4j.Document`接口: 代表一个XML文档

    Element getRootElement()`: 获取根元素对象.需要用根元素获取其他子元素

org.dom4j.Element接口: 代表一个元素

获取元素信息

StringgetName(): 获取元素名

  …元素增删改查

获取元素

List<Element> elements(): 获取调用元素对象的所有子元素

List<Element>elements(String name): 获取所有的指定名称的子元素

Elementelement(String name): 获取第一个该名称的子元素对象

ElementgetParent(): 获取当前元素的父元素对象

添加元素

Element addElement(StringelementName)`: 在当前元素下添加指定名称的子元素

删除元素

booleanremove(Element child): 删除子元素

操作元素中的文本

StringelementText(String name): 获取第一个该名称的子元素的文本内容

StringgetText()`: 获取当前元素对象的文本

void setText(String text)`: 设置当前元素对象的文本

操作元素的属性

String attributeValue(String name)`: 根据指定的属性名获取属性值

Element addAttribute(String name, Stringvalue)`: 添加或修改指定属性名的属性值

org.dom4j.DocumentHelper`类:

static Element createElement(Stringname)`: 使用指定名称作为元素名, 创建一个元素对象

1)     反射

•       Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

•        要想解剖一个类,必须先要获取到该象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码类的字节码文件对文件对应的Class类型的对象.


2)      获取类的对象,即class字节码对象

1.    通过Objet构造 . getClass( ) 获得,但必须创建对象

Students=new Student();

Classclazz=s.getClass();

2.    通过类名获得:   类名 .class

3.    Class.forName(“com.itheima_01.Student”);                    // 通过Class类中的静态方法, 指定字符串, 该字符串是类的全类名(包名+类名)





3)     私有的成员方法

// 获取字节码对象

Class clazz =Class.forName("com.heima.Student");

              //创建学生对象

              Object stu =clazz.newInstance();

              //暴力反射获取方法

              Method method =clazz.getDeclaredMethod("method");

              //让jvm不检查权限

              method.setAccessible(true);

              //执行方法

              method.invoke(stu);


通过反射运行public变量流程

1. 通过反射获取该类的字节码对象

Classclazz = Class.forName("com.heima.Person");

2. 创建该类对象

Object p = clazz.newInstance();

3. 获取该类中需要操作的字段(成员变量)

getField(String name) --> 方法传入字段的名称.

注意: 此方法只能获取公共的字段

Field f = clazz.getField("age");

4. 通过字段对象中的方法修改属性值

void set(Object obj, Object value)  --> 参数1): 要修改那个对象中的字段, 参数2):将字段修改为什么值.

f.set(p,23);



1.1.1 直接通过Class类中的newInstance()和获取getConstructor()有什么区别?

newInstance()方法, 只能通过空参的构造方法创建对象

getConstructor(Class<T>…parameterTypes)方法, 方法接受一个可变参数, 可以根据传入的类型来匹配对应的构造方法

      

      





javaBean: 用于封装数据

类使用public进行修饰

通过private的成员变量保存数据

为成员变量提供getter和setter方法

提供公共无参的构造


BeanUtils: Apache commons提供的一个组建,主要功能就是为了简化JavaBean封装数据的操作




Person p=newPerson();

          //static voidpopulate(Object bean,String name, Object value)给对象的某个属性赋值

          BeanUtils.setProperty(p, "name", "张三");

          BeanUtils.setProperty(p, "age",18);

          //static StringgetProperty(Object bean, String name) 用来获取对象中的属性(了解)

          String name=BeanUtils.getProperty(p, "name");

          System.out.println(name);

          //static voidpopulate(Object bean, Map properties) v用来批量给对象中的属性赋值(掌握)

          Person p2=newPerson();

          Map<String,Object> map=newHashMap<>();

          map.put("name", "小蒙");

          map.put("age",19);

          map.put("gender", "男");





4)     通过反射获取构造方法并使用

l   获取构造方法

getConstructors

以数组形式返回该类中所有public的构造方法

// 获取有参的

Constructor twoParam=studentClass.getConstructor(String.class, int.class);


getDeclaredConstructors

以数组形式返回该类中所有权限的构造方法, 包括private的. 如果该类是接口, 基本类型, 数组, void, 则数组长度为0




getConstructor

    根据参数列表返回指定的public的构造方法. 参数列表填写参数的字节码对象

Constructor c = clazz.getConstructor(String.class,int.class)


l   创建对象

newInstance()

使用类的无参构造创建一个对象newInstance(“zhangsan", 20);


Objectobj = clazz.newInstance();

              System.out.println(obj);

直接使用无参构造方法调用这个方法,得到obj就是一个Student类的对象 输出  Student [ name=null, age=0]


newInstance(Object... initargs):

通过有参构造方法对象创建一个类的对象, 传入构造方法所需的参数列表

Object obj = c.newInstance("lisi",30);

              System.out.println(obj);


5)     通过反射获取成员变量并使用

•      


获取所有成员

Field[ ]  getFields()  获取所有public修饰的的成员变量

Field[ ]  getDeclaredFields() 获取所有的成员变量,包括private获取单个成员

Field  getField(String fieldName)

通过指定的成员变量名或企业指定的public的成员变量对象



Field f=clazz.getField("age");

       System.out.println(f);



输出  publicint com.lianxi.Student.age


通过成员变量对象,修改为指定的值

Field  getDeclaredField(String name)  可以暴力反射获取任意成员变量,  包括私有,但是不能操作

直接修改会报错  java.lang.IllegalAccessException

f.setAccessible(true);设置反射时取消Java的访问检查,暴力访问


修改成员的值, 将指定对象变量上此 Field 对象表示的字段设置为指定的新值。

set(Object obj,Object value)

获取成员变量get(成员对象)

Object name = f.get(stu);


6)     通过反射获取成员方法并使用

•       获取所有方法

–      getMethods

–      getDeclaredMethods

•       获取单个方法

–      getMethod

–      getDeclaredMethod

•       暴力访问

–      method.setAccessible(true);

………………………………………………………………………………

//获取学生类的字节码对象

              Class clazz =Class.forName("com.itheima_01.Student");

//获取学生类的对象

              Object stu =clazz.newInstance();

//获取有参无返回值的方法

              Method m =clazz.getMethod("setName", String.class);

              m.invoke(stu, "设置的新名字");   //完成方法,

              System.out.println(stu);

setName是方法名, String.class是参数的字节码对象








7)     自定义 BeanUtils

           public static void setProperety(Objectbena, String name,Object value)  某对象 的某变量   赋值

         public static StringgetProperety(Object bean, String name)                        要知道 对象 ,变量名 就能获取

        public static void populate(Object bean,Map properties)


Populate 用来给对象中的属性赋值(掌握)

              参数1: 要设置属性的对象

              参数2: 将属性以Map集合的形式传入

                                   Key: 属性的名称

                                   Value:  属性具体的值


注意:BeanUtils的setProperty和getProperty方法底层并不是直接操作成员变量,而是操作和成员变量名有关的get和set方法








JavaBean:

概念: 就是一个类

作用: 封装数据

规范:

类必须是public修饰的

通过private的成员变量保存数据

通过public的get/set方法操作数据

至少提供一个无参构造方法

实现Serializable接口(用于写入文件中)







public static void main(String[] args) throwsReflectiveOperationException {

        // 创建Person对象

        Person p = new Person();


        // static voidsetProperty(Object bean, String name, Object value): 给对象的属性设置值

        BeanUtils.setProperty(p,"name", "zhangsan");

        BeanUtils.setProperty(p,"age", 18);

        System.out.println(p);


        // static StringgetProperty(Object bean, String name): 获取对象的属性值

        String name =BeanUtils.getProperty(p, "name");

        System.out.println(name);


        // static voidpopulate(Object bean, Map properties): 批量给属性赋值

        Person p2 = new Person();

        Map<String, Object>map = new HashMap<>();

        map.put("name","lisi");

        map.put("age",18);

        map.put("gender","男");

        BeanUtils.populate(p, map);

        System.out.println(p);

}



1.创建一个ArrayList集合对象list,泛型为Integer类型,添加元素并打印.

2.向list集合中添加String类型的对象,并打印.

       注意: 泛型的约束只是在编译时期有, 在程序运行时期是没有泛型约束的, 所以集合中实际存入的都是Object类型的元素



// 1.创建一个ArrayList集合对象list,泛型为Integer类型,添加元素并打印.

       ArrayList<Integer>list=newArrayList<>();

       list.add(1);

       list.add(3);

       System.out.println(list);

      

       Class clazz=list.getClass();

       //获取方法  ,list集合本质上可以添加任意类型元素,即Object

       Method addMethod=clazz.getDeclaredMethod("add",Object.class);

       //.invoke 完成方法

       addMethod.invoke(list, "张三");

       System.out.println(list);

    }


       1.定义一个Person类,在该类中定义一个show()方法,打印:"我是一个好人".

       2.通过使用反射手段创建该类的对象,并调用该对象中的方法。

*/

public classTest {    运用字节码对象,获取类的对象,类的方法,然后代入


       public static voidmain(String[] args) throwsReflectiveOperationException {

              //2.通过使用反射手段创建该类的对象,并调用该对象中的方法。

              Classclazz = Person.class;

              //创建该类对象

              Object person =clazz.newInstance();

              //获取方法

              Method showMethod =clazz.getDeclaredMethod("show");

              //调用方法

              showMethod.invoke(person);

       }

}


class Person {

       public voidshow() {

              System.out.println("我是一匹好人");

       }

}



写一个Properties格式的配置文件,新建 file ***.Proterties

配置类的完整名称。   规则:                  

后缀名为.properties

                     键=值

                     键=值

                     键=值

                     键=值

                     键=值

注释: # 单行注释    多行写多个#


配置文件

    把一些类名的信息保存到配置文件中, 通过properties对象来加载,获取里面的完整类名, 结合反射获取的字节码对象  ,  如果还有其它的类,就可以只通过修改配置文件中的类名.来士打道不同的目的,  主程序的代码保持不变


data.properties

# ISO-8859-1 define class name

className=com.itheima.homework_03.DemoClass



1.已知一个类,定义如下:

              packagecom.itheima;

              publicclass DemoClass {

                     public void run() {

                            System.out.println("welcometo heima!");

                     }

              }

              (1)写一个Properties格式的配置文件,配置类的完整名称。

                     规则:

                     后缀名为.properties

                     键=值

                     键=值

                     键=值

                     键=值

                     键=值

                     注释: # 单行注释

             (2)写一个程序,读取这个Properties配置文件,获得类的完整名称并加载这个类,

              (3)用反射 的方式运行run方法









public static voidmain(String[] args) throwsIOException, ReflectiveOperationException {

              //读取这个Properties配置文件,获得类的完整名称并加载这个类,

              Propertiesproperties = newProperties();

              //加载配置文件

              properties.load(newFileInputStream("data.properties"));

              //获取类名

              String className =properties.getProperty("className");

              System.out.println(className);

              

              //加载这个类,用反射的方式运行run方法

              Classclazz = Class.forName(className);

              //创建该类对象

              Object obj =clazz.newInstance();

              //获取run方法

              Method runMethod =clazz.getDeclaredMethod("run");

              //调用方法

              runMethod.invoke(obj);

       }

表----类

类字段,成员变量----列

对象 ---表中的每行数据

SQL语句不区分大小写,用于操作数据库的语言


1.2  SQL语句

l  SQL分类:

n  数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter修改,drop删除等

n  数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert增加,delete删除,update更新等

n  数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。

n  数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select查询,from,where等




1.3  通用语法

l  SQL语句可以单行或多行书写,以分号结尾

l  可使用空格和缩进来增强语句的可读性

l  MySQL数据库的SQL语句不区分大小写,建议使用大写,例如:SELECT * FROM user。

l  同样可以使用/**/的方式完成注释

l  MySQL中的我们常使用的数据类型如下


file:///C:/Users/hello/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png





数据库分类

关系型数据库  表与表之间关系mysql,  Oracle


启动 net start mysql    停止 net stop mysql


主键约束

主键是用于标识当前记录的字段。它的特点是非空,唯一。在开发中一般情况下主键是不具备任何含义,只是用于标识当前记录。

格式:

l 1.在创建表时创建主键,在字段后面加上  primary key.

create table tablename(  

id int primarykey,

.......

)

      

l 2. 在创建表时创建主键,在表创建的最后来指定主键  

create table tablename(                                    

id int,

.......,

primary key(id)

)


l 3.删除主键:alter table 表名 drop primary key;

alter table sortdrop primary key;

l 4.主键自动增长:一般主键是自增长的字段,不需要指定。

实现添加自增长语句,主键字段后加auto_increment(只适用MySQL)

例如:



外键约束  : FOREIGN KEY 主要是连接到另一个表的主键

非空约束  NOT null

唯一约束   UNIQUE


ctrl +s 保存   CTRL +o 打开

varchar(200)  要给定长度

约束的种类:

主键约束: PRIMARY KEY, 限制该列的记录值不能为空且唯一(不能重复), 相当于同时设定了NOT NULL和UNIQUE

自增约束: AUTO_INCREMENT, 设置该列的记录值可以自动增加

默认从几开始? 1

能用于什么类型? 只能用于数字类型(如INT, DOUBLE, 小数1.23自增后是2)

外键约束: FOREIGN KEY, 主要是连接另一个表的主键

非空约束: NOT NULL, 限制该列的记录值不能为空

唯一约束: UNIQUE, 唯一, 限制该列的记录值不能重复

检查约束: CHECK (条件), 限制该列插入的记录值是否符合要求

默认值约束: DEFAULT 值, 限制该列记录如果没有插入值, 则使用默认值





添加列

alter table 表名 add 列名数据类型(长度) 约束

  ALTERTABLE users ADD tel INT


修改列名

ALTER TABLE 表名 change 旧列名 新列名 新数据类型 新约束

MODIFY 修改指定


修改表的结构

    格式: `ALTER TABLE 表名 操作关键字 列名 数据类型 约束;`

            操作关键字

                  ADD: 增加列.

                         ALTERTABLE 表名 ADD 新列名 数据类型 约束;

                MODIFY: 修改指定列的数据类型和约束(不能修改列名).

                         ALTERTABLE 表名 MODIFY 要修改的列名 新数据类型 新约束;

                  CHANGE: 修改指定列的列名+数据类型+约束.

                         ALTERTABLE 表名 CHANGE 旧列名 新列名 新数据类型 新约束;`

                  DROP: 删除列.

                         ALTERTABLE 表名 DROP 列名;

修改表名

    格式:  RENAME TABLE 旧表名 TO 新表名;`



想数据表中添加数据 insert

格式    insert into 表名  (列名1 ,列名2,列名3) values (值1,值2,值,3);

注意: 列名,表名问题;      对应问题,个数,数据类型


添加

1不考虑主键,

insert  into表名( 列名2,列名3 )  values  ( 值2, 值3)

2 所有值全给出

insert  into  表名  values (全列值)    不能省主键


3 添加数据, 批量写入

insert into 表名 ( 列名1,列名2, 列名3) values

(值1,值2,值3) ,

(值1,值2,值3) ,  

(值1,值2,值3)……………

修改条件

update 表名 set 列名 +where修改条件定条件的记录

格式   delete from 表名 where 条件   如果有自增,自增计数器不会重置,如果继续添加纪录,则自增的序号会继续增加

删除表中所有记录使用delete from 表名; 还是用truncatetable 表名????

删除方式:delete一条一条删除,不清空auto_increment记录数。
truncate 直接将表删除,重新建表,auto_increment将置为零,从新开始  

乱码问题

原因:因为mysql的客户端编码的问题我们的是utf8,而系统的cmd窗口编码是gbk

两种解决办法

l  将客户端编码修改为gbk.

setcharacter_set_results=gbk; / set names gbk;

以上操作,只针对当前窗口有效果,如果关闭了服务器便失效。如果想要永久修改,通过以下方式:

l  在mysql安装目录下有my.ini文件

default-character-set=gbk客户端编码设置                                   

character-set-server=utf8服务器端编码设置

注意:修改完成配置文件,重启服务
1.4  查询的语法:

查询指定字段信息

select 字段1,字段2,...from 表名;

例如:

select id,name from zhangwu;


查询表中所有字段

select * from 表名;

       例如:

select * from zhangwu;

       注意:使用"*"在练习、学习过程中可以使用,在实际开发中,不推荐使用。原因,要查询的字段信息不明确,若字段数量很多,会导致查询速度很慢。


distinct用于去除重复记录

select distinct 字段 from 表名;                  

例如:

select distinct money from zhangwu;


selectdistinct






别名查询,使用的as关键字,as可以省略的.

别名可以给表中的字段,表设置别名。当查询语句复杂时,使用别名可以极大的简便操作。     在输出口设置的临时名称

表别名格式:

select * from 表名 as 别名;


select * from 表名 别名;

列别名格式:

select 字段名 as 别名 from 表名;


select 字段名 别名 from 表名;

例如

表别名:

       select* from zhangwu as zw;

列别名:

       selectmoney as m from zhangwu;

       或

       selectmoney m from zhangwu;


我们在sql语句的操作中,可以直接对列进行运算。

例如:将所有账务的金额+10000元进行显示.

select pname,price+10000 from product;


1.5  条件查询

where语句表条件过滤。满足条件操作,不满足不操作,多用于数据的查询与修改。

格式 :select 字段  from 表名  where 条件;     

while条件的种类如下:

  
比较运算符
  
  
>  <   <=   >=   =   <>
  
  
大于、小于、大于(小于)等于、不等于
  
  
BETWEEN  ...AND...
  
  
显示在某一区间的值(含头含尾)
  
  
IN(set)
  
  
显示在in列表中的值,例:in(100,200)
  
  
LIKE 通配符
  
  
模糊查询,Like语句中有两个通配符:
  
% 用来匹配多个字符;例first_name like ‘a%’;
  
_ 用来匹配一个字符。例first_name like ‘a_’;
  
  
IS NULL
  
  
判断是否为空
  
is null; 判断为空
  
is not null; 判断不为空
  
  
逻辑运算符
  
  
and
  
  
多个条件同时成立
  
  
or
  
  
多个条件任一成立
  
  
not
  
  
不成立,例:where not(salary>100);
  


例如:

查询所有吃饭支出记录

SELECT * FROM zhangwu WHERE name = '吃饭支出';



查询出金额大于1000的信息

SELECT * FROM zhangwu WHERE money>1000;



查询出金额在2000-5000之间的账务信息

SELECT * FROM zhangwu WHERE money >=2000AND money <=5000;


SELECT * FROM zhangwu WHERE money BETWEEN2000 AND 5000;



查询出金额是1000或5000或3500的商品信息

SELECT * FROM zhangwu WHERE money =1000OR money =5000 OR money =3500;


SELECT * FROM zhangwu WHERE money IN(1000,5000,3500);



查询出账务名称包含”支出”的账务信息。

SELECT * FROM zhangwu WHERE name LIKE"%支出%";



查询出账务名称中是无五个字的账务信息

SELECT * FROM gjp_ledger WHERE ldesc LIKE"_____"; -- 五个下划线_



查询出账务名称不为null账务信息

SELECT * FROM zhangwu WHERE name IS NOTNULL;

SELECT * FROM zhangwu WHERE NOT (name ISNULL);





* 条件查询:

    * 即按指定条件查询记录返回符合条件的结果集, 使用`SELECT`和`WHERE`组合

* `WHERE`:

    * 作用: 条件子句, 过滤符合条件的结果

    * 运算符

           * 比较运算符

                  * `=`: 相等

                  * `<>`或`!=`:不等

                  * `>`: 大于

                  * `<`: 小于

                  * `>=`: 大于等于

                  * `<=`: 小于等于

                  *`BETWEEN...AND...`: 在一个范围内(包含头和尾), `BETWEEN 0 AND 10;` 0~10

                         * 如:

                  * `IN ()`: 在列表中, 满足列表中一个即可

                         * 如: `IN (1, 3, 5)`

                  * `ISNULL`: 是空

                  * `LIKE 通配符`: 模糊查询

                         * 通配符种类

                                *`%`: 一个百分号可以表示任意个字符. 比如`王%`, `王大锤`, `王五`

                                * `_`: 一个下划线可以表示一个字符. 比如`王_`, 只能匹配`王五`

           * 逻辑运算符

                  * `AND`: 与. 两边条件同时成立才成立

                  * `OR`: 或. 两边条件只要有一个成立就成立

                  * `NOT`: 非, 取相反结果

                         * `NOTBETWEEN ... AND ...`: 不在范围内

                         * `NOTIN`: 不在列表中

                         * `NOTLIKE`: 不匹配

                         * `IS NOTNULL`: 非空

           * 日期也是可以比较的



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马