javaee 第11周

來源:互聯網
上載者:User

標籤:cond   尋找   完全   並且   列操作   item   物件導向   address   包括   

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語言概述 
結構化查詢語言 (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語言支援關聯式資料庫三級模式結構 
資料庫三級模式指:內模式對應於隱藏檔,模式對應於基本表,外模式對應於視圖。基本表是本身獨立存在的表,視圖是從基本表或其他視圖中匯出的表,它本身不隔離儲存區 (Isolated Storage)在資料庫中,也就是說資料庫中只存放視圖的定義而不存放視圖對應的資料,這些資料仍存放在匯出視圖的基本表中,因此視圖是一個虛表。使用者可以用SQL語言對視圖和基本表進行查詢。在使用者眼中,視圖和基本表都是關係,而隱藏檔對使用者是透明的。 
6.綜合統一 
① SQL語言集資料定義語言 (Data Definition Language)DDL、資料操縱語言DML、資料控制語言DCL的功能於一體,語言風格統一,可以獨立完成資料庫生命週期中的全部活動,包括定義關係模式、錄入資料以建立資料庫、查詢、更新、維護、資料庫重構、資料庫安全性控制等一系列操作要求,這就為資料庫應用系統開發提供了良好的環境,例如使用者在資料庫投入運行後,還可根據需要隨時地逐步地修改模式,並不影響資料庫的運行,從而使系統具有良好的可擴充性。 
② 在關聯式模式中實體和實體間的聯絡均用關係表示,這種資料結構的單一性帶來了資料操作符的統一,即對實體及實體間的聯絡的每一種操作(如:尋找、插入、刪除、修改)都只需要一種操作符 3.HQLHQL是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執行個體

本執行個體中需要使用到的表資料如下:

title content category seo_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‘

結果:

title content category seo_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‘

結果:

title content category seo_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‘

結果:

title content category seo_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。

javaee 第11周

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.