javaee 第11周

1.JPQL查詢php

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)來實現。 
二、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 子語句中把兩個或多個條件結合起來。html

使用OR關鍵字時:java

  • 只要符合這幾個查詢條件的其中一個條件,這樣的記錄就會被查詢出來。
  • 若是不符合這些查詢條件中的任何一條,這樣的記錄將被排除掉。

使用and關鍵字時:mysql

  • 須要符合全部條件,這樣的記錄就會被查詢出來。
  • 若是有任何一個條件不符合,這樣的記錄將被排除掉。

 

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條件查詢運算符實例:sql

使用 AND 來顯示全部title爲 "php數組" 而且category爲1的數據:數據庫

SELECT * FROM ar WHERE title='php數組' AND category='1'

結果:express

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。

相關文章
相關標籤/搜索