標籤: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周