zoukankan      html  css  js  c++  java
  • java第11周

    1.JPQL查询

    JPQL全称Java Persistence Query Language
    基于首次在EJB2.0中引入的EJB查询语言(EJB QL),Java持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将SQL语法和简单查询语义绑定在一起·使用这种语言编写的查询是可移植的,可以被编译成所有主流数据库服务器上的SQL。
    其特征与原生SQL语句类似,并且完全面向对象,通过类名和属性访问,而不是表名和表的属性。
    JPQL所提供的查询语法主要分为三类:
    • 查询用的 SELECT 语法
    • 更新用的 UPDATE 语法
    • 删除用的 DELETE 语法

      SELECT 语法结构由几个部份组成:
    SELECT 子句 FROM 字句 [WHERE 子句] [GROUP BY 子句] [HAVING 子句] [ORDER BY 子句]

      一个基本的 SELECT 语句如下所示:
    SELECT u.id, u.name FROM User u WHERE u.age > 10 AND u.age < 20

      其中User u是个路径表示(path expression),路径表示有三种:范围变数(Range variable)路径表示、群集成员(Collection member)路径表示与关联导览(Association traversing)表示。User u是范围变数路径表示的一个例子,指定查询的实体为User与别名为u。
      一个群集成员路径表示用来指定物件中的群集成员,例如:
    SELECT u FROM User u, IN(u.emails) e WHERE e.address LIKE '%.%@openhome.cc'

      其中IN中指定的,就是群集成员路径表示,而>、<、AND、IN、LIKE等都是WHERE子句中条件表示式,简单列出一些条件表示式如下:
    比较陈述 =、>、>=、<、<=、<>
    BETWEEN 陈述 [NOT BETWEEN
    LIKE 陈述 [NOT] LIKE
    IN 陈述 [NOT] IN
    NULL 陈述 IS [NOT] NULL
    EMPTY 陈述 IS [NOT] EMPTY
    EXISTS 陈述 [NOT] EXISTS

      LIKE中,可以用_表示比对单一字元,用%表示比对任意数目字元。
      关联导览表示则提供SQL语法中JOIN的功能,包括了INNER JOIN、LEFT OUTER JOIN、FETCH等,以下为INNER JOIN的实际例子:
    SELECT u FROM User u INNER JOINu.emails e WHERE e.address LIKE '%.%@openhome.cc'

      JOIN关键字可以省略,上式等同於:
    SELECT u FROM User u JOINu.emails e WHERE e.address LIKE '%.%@openhome.cc'

      LEFT OUTER JOIN的OUTER关键字可以省略,一个例子如下:
    SELECT u FROM User u LEFT JOIN u.emails e WHERE e.address LIKE'%.%@openhome.cc'

      在作INNER JOIN、LEFT OUTER JOIN可以加上FETCH关键字,以预先撷取相关资料,例如:
    SELECT u FROM User u LEFT JOIN FETCH u.emails e WHERE e.address LIKE'%.%@openhome.cc'

      SELECT中可以使用聚集函式,例如:
    SELECT AVG(u.age) FROM User u

      SELECT中可以使用建构表示,直接将一些资料封装为指定的物件,例如:
    SELECT NEW SomeObject(u.id, u.name, o.number) FROM User u JOIN Order o WHERE u.id = 1975

      WHERE子句中可以使用LENGTH()、LOWER()、UPPER()、SUBSTRING()等JPQL函式。
      可以对查询结果使用ORDER BY进行排序:
    SELECT u FROM User u ORDER BY u.age

      ORDER预设是ASC昇幂排序,可使用DESC降幂排序:
    SELECT u FROM User u ORDER BY u.age DESC

      可同时指定两个以上的排序方式,例如先按照"age"降幂排序,如果"age"相同,则按照"name"昇幂排列:
    SELECT u FROM User u ORDER BY u.age DESC, u.name

      可以配合GROUP BY子句,自动将指定的栏位依相同的内容群组,例如依栏位"sex"分组并作平均:
    SELECT u.sex, AVG(u.age) FROM User u GROUP BY u.sex

      GROUP BY通常搭配HAVING来使用,例如:
    SELECT u.sex, avg(u.age) FROM User u GROUP BY u.sex HAVING AVG(u.age) > 20

      可以使用UPDATE语法来更新资料,例如:
    UPDATE User u SET u.name='momor' WHERE u.name='bbb'

      可以透过DELETE来删除资料,例如:
    DELETE User u WHERE u.name='bush'

    选择查询

    编辑
    SELECT <select_expression>
    FROM <from_clause>
    [WHERE <conditional_expression>]
    [ORDER BY <order_by_clause>]

    聚合查询

    编辑
    SELECT <select_expression>
    FROM <from_clause>
    [WHERE <conditional_expression>]
    [GROUP BY <group_by_clause>]
    [HAVING <conditional_expression>]
    [ORDER BY <order_by_clause>]

    更新查询

    编辑
    UPDATE <entity name>[ [AS ] <identification variable>]
    SET <update_statement>{,<update_statement>}*
    [WHERE <conditional_expression>]

    删除查询

    编辑
    DELETE FROM <entity name>[ [AS ] <identification variable>]
    [WHERE <conditional_expression>]
     
    2.SQL语言概述 
    结构化查询语言(Structured Query Language,简称SQL)是一种介于关系代数与关系演算之间的语言,是一种用来与关系数据库管理系统通信的标准计算机语言。其功能包括数据查询、数据操纵、数据定义和数据控制4个方面,是一个通用的、功能极强的关系数据库语言。目前已成为关系数据库的标准语言。 
    1 SQL基本功能 
    SQL语言集数据查询(Data Query)、数据操纵(Data Manipulation)、数据定义(Data Definition)和数据控制(Data Control)功能于一体,充分体现了关系数据语言的特点和优点。 
    1.数据定义功能 
    通过DDL(Data Definition Language)语言来实现。可用来支持定义或建立数据库对象(如表、索引、序列、视图等),定义关系数据库的模式、外模式、内模式。常用DDL语句为不同形式的CREATE、ALTER、 DROP命令。 
    2.数据操纵功能 
    数据操纵功能通过DML(Data Manipulation Language)语言来实现,DML包括数据查询和数据更新两种语句,数据查询指对数据库中的数据进行查询、统计、排序、分组、检索等操作.数据更新指对数据的更新、删除、修改等操作。 
    3.数据控制功能 
    数据库的数据控制功能指数据的安全性和完整性。通过数据控制语句DCL(Data Control Language)来实现。 
    2、SQL语言的特点 
    1.语言简洁、易学易用 
    2.高度非过程化 
    用户只需提出“做什么”就可以得到预期的结果,至于“怎么做”则由RDBMS完成,并且其处理过程对用户隐藏 
    3.SQL语言既可交互式使用,也可以以嵌入形式使用 
    前者主要用于数据库管理者等数据库用户,允许用户直接对DBMS发出SQL命令,受到运行后的结果,或者主要嵌入(C、C++)等宿主语言中,被程序员用来开发数据库应用程序。而在两种不同的使用方式下,SQL语言的语法结构基本上是一致的。这种以统一的语法结构提供两种不同的使用方式的作法,为用户提供了极大的灵活性与方便性。 
    4.面向集合的操作方式 
    SQL语言采用集合操作方式,不仅查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。 
    5.SQL语言支持关系数据库三级模式结构 
    数据库三级模式指:内模式对应于存储文件,模式对应于基本表,外模式对应于视图。基本表是本身独立存在的表,视图是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是说数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。用户可以用SQL语言对视图和基本表进行查询。在用户眼中,视图和基本表都是关系,而存储文件对用户是透明的。 
    6.综合统一 
    ① SQL语言集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括定义关系模式、录入数据以建立数据库、查询、更新、维护、数据库重构、数据库安全性控制等一系列操作要求,这就为数据库应用系统开发提供了良好的环境,例如用户在数据库投入运行后,还可根据需要随时地逐步地修改模式,并不影响数据库的运行,从而使系统具有良好的可扩充性。 
    ② 在关系模型中实体和实体间的联系均用关系表示,这种数据结构的单一性带来了数据操作符的统一,即对实体及实体间的联系的每一种操作(如:查找、插入、删除、修改)都只需要一种操作符
     
    3.HQL
    HQL是Hibernate Query Language的缩写,提供更加丰富灵活、更为强大的查询能力;HQL更接近SQL语句查询语法。
    Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Language)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装。完整的HQL语句形式如下: Select/update/delete…… from …… where …… group by …… having …… order by …… asc/desc 其中的update/delete为Hibernate3中所新添加的功能,可见HQL查询非常类似于标准SQL查询。HQL查询在整个Hibernate实体操作体系中站核心地位。
     
    4.条件查询

    AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。

    使用OR关键字时:

    • 只要符合这几个查询条件的其中一个条件,这样的记录就会被查询出来。
    • 如果不符合这些查询条件中的任何一条,这样的记录将被排除掉。

    使用and关键字时:

    • 需要符合所有条件,这样的记录就会被查询出来。
    • 如果有任何一个条件不符合,这样的记录将被排除掉。

     

    mysql and与or实例

    本实例中需要使用到的表数据如下:

    titlecontentcategoryseo_name
    php数组 php数组使用分析 1 php
    mysql distinct mysql distinct实例 2 mysql
    java array java array使用方法 3 java
    php input php input如何获值 4 php

    (1)AND条件查询运算符实例:

    使用 AND 来显示所有title为 "php数组" 并且category为1的数据:

    SELECT * FROM ar WHERE title='php数组' AND category='1'

    结果:

    titlecontentcategoryseo_name
    php数组 php数组使用分析 1 php

    (2)OR条件运算符实例

    使用 OR 来显示所有title为 "java array" 或者seo_name为 "php" 的数据:

    SELECT * FROM ar WHERE title='java array' OR seo_name='php'

    结果:

    titlecontentcategoryseo_name
    php数组 php数组使用分析 1 php
    java array java array使用方法 3 java
    php input php input如何获值 4 php

    (3)结合 AND 和 OR 运算符

    我们也可以把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式):

    SELECT * FROM ar WHERE (title='java array' OR category='4')
    AND seo_name='php'

    结果:

    titlecontentcategoryseo_name
    php input php input如何获值 4 php

     

    and与or优先级

    在where中可以包含任意数目的and和or操作符,在没有任何其他符号的时候,例如括号,SQL会首先执行and条件,然后才执行or语句,如:

    select * from table from id=1 or id=2 and price>=10;
    /*  http://www.manongjc.com/article/1439.html */

    这条语句默认执行的是id=2并且price大于等于10的,或者是id=1。

    如果加上括号:

    select * from table from (id=1 or id=2) and price>=10;

    则这条语句执行的是id=1或id=2,并且price大于等于10。

     
  • 相关阅读:
    识别IE11浏览器
    国庆过后老革命
    有些东西再忙也要做
    云计算
    SVN下Update出现代码文件删除状态问题
    如何避免历史回退到登录页面
    CodeSmith连Oracle
    NHibernate直接执行SQL进行插入
    nhibernate实体类主键ID赋值问题
    NHibernate不支持复杂的linq,就一定要用DataTable这么低级吗
  • 原文地址:https://www.cnblogs.com/xiangyujojo/p/9064845.html
Copyright © 2011-2022 走看看