1. 請問sql模式:ANSI_QUOTES具體有什麼特殊用途
ANSI是SQL的通用標准,QUOTES是指用什麼符號來引用對象。
ANSI_QUOTES就是標準的SQL引用方式,不同資料庫在一些單雙引號,as別名,對象名等方面符號註明不同。
一般盡量使用ANSI標准,以保證代碼通用,別人也能看得懂。
2. sql 語句
和資料庫對話
SQL介紹:
本書假設你是在SQL操作Microsoft SQL Sever 的資料庫。你也可以用SQL操作許多其它類型的資料庫。SQL是操作資料庫的標准語言。(事實上,關於SQL語言有一個專門的ANSI標准〕
注意:
不要在你的站點上試圖用Microsoft Access代替Microsoft SQL Sever。SQL Sever可以同時服務於許多用戶,如果你希望你的站點有較高的訪問率,MS Access是不能勝任的。
在學習SQL的細節之前,你需要理解它的兩大特點。一個特點容易掌握,另一個掌握起來有點困難。
第一個特點是所有SQL資料庫中的數據都存儲在表中。一個表由行和列組成。例如,下面這個簡單的表包括name 和e-mail address:
Name Email Address
................................................................
Bill Gates [email protected]
president Clinton [email protected]
Stephen Walther [email protected]
這個表有兩列(列也稱為欄位,域〕:Name和Email Address。有三行,每一行包含一組數據。一行中的數據組合在一起稱為一條記錄。
無論何時你向表中添加新數據,你就添加了一條新記錄。一個數據表可以有幾十個記錄,也可以有幾千甚至幾十億個記錄。雖然你也許永遠不需要存儲十億個Email地址,但知道你能這樣做總是好的,也許有一天你會有這樣的需要。
你的資料庫很有可能包含幾十個表,所有存儲在你資料庫中的信息都被存儲在這些表中。當你考慮怎樣把信息存儲在資料庫中時,你應該考慮怎樣把它們存儲在表中。
SQL的第二個特點有些難於掌握。這種語言被設計為不允許你按照某種特定的順序來取出記錄,因為這樣做會降低SQL Sever取記錄的效率。使用SQL,你只能按查詢條件來讀取記錄。
當考慮如何從表中取出記錄時,自然會想到按記錄的位置讀取它們。例如,也許你會嘗試通過一個循環,逐個記錄地掃描,來選出特定的記錄。在使用SQL時,你必須訓練自己,不要有這種思路。
假如你想選出所有的名字是「Bill Gates」的記錄,如果使用傳統的編程語言,你也許會構造一個循環,逐個查看錶中的記錄,看名字域是否是「Bill Gates」。
這種選擇記錄的方法是可行的,但是效率不高。使用SQL,你只要說,「選擇所有名字域等於Bill Gates的記錄」,SQL就會為你選出所有符合條件的記錄。SQL會確定實現查詢的最佳方法。
建設你想取出表中的前十個記錄。使用傳統的編程語言,你可以做一個循環,取出前十個記錄後結束循環。但使用標準的SQL查詢,這是不可能實現的。從SQL的角度來說,在一個表中不存在前十個記錄這種概念。
開始時,當你知道你不能用SQL實現某些你感覺應該能實現的功能,你會受到挫折。你也許會以頭撞牆甚至想寫惡毒的信件給SQL的設計者們。但後來你會認識到,SQL的這個特點不僅不是個限制,反而是其長處。因為SQL不根據位置來讀取記錄,它讀取記錄可以很快。
3. SQL是什麼
*******************************************************************
SQL
語言是一種介於關系代數與關系演算之間的語言,其功能包括查詢操縱定義和控制4
個方面,是一個通用的功能極強的關系資料庫語言
SQL
語言是1974
年由Boyce
和Chamberlin
提出的,1975
年至1979
年,IBM
公司SanJose
Research
Laboratory
研製的關系資料庫管理系統原形系統System
R
實現了這種語言。由於它功能豐富,語言簡潔,使用方法靈活倍受用戶和計算機業界的青睞,被眾多的計算機公司和軟體公司採用經過多年的發展SQL
語言已成為關系資料庫的標准語言。
——————————————————————————————————
SQL
語言主要由以下幾部分組成:
數據定義語言DDL
Data
Definition
Language
數據操縱語言DML
Data
Manipulation
Language
數據控制語言DCL
Data
Control
Language
其它語言要素Additional
Language
Elements
——————————————————————————————————
Transact-SQL
是ANSI
SQL
的加強版語言,它提供了標準的SQL
命令,另外還對SQL
命令做了許多擴充提供類似Basic
Pascal
C
等第三代語言的基本功能,如變數說明、程序流程式控制制語言、功能
函數等,不過SQL
Server
是定位在Server
上的系統,它只負責提供
和儲存數據就像汽車的引擎,它只提供汽車的動力,其它功能由前
端設計工具如FoxPro
、Delphi
、Power
Builder、
Visual
Basic
等來處
理因。此我們一般稱SQL
Server
、Oracle
、Informix
等資料庫系統為
資料庫引擎。
4. SQL中 nvl()、coalesce()、decode()這三個函數,如果只是判斷非空的話,哪一個效率相比較高
nvl只支持2個參數,這是oracle特有的
coalesce支持不定參數,coalesce(bonus,0,1)應該寫成coalesce(bonus,0),最後1個不用寫,這是ansi標准函數,在多次外連接時尤其有用,譬如 t1 full join t2 on t1.id=t2.id full join t3 on coalesce(t1.id,t2.id)=t3.id full join t4 on coalesce(t1.id,t2.id,t3.id)=t4.id
decode判斷不了非空
5. jet sql 和 ansi sql 的主要區別是什麼 他們都代表什麼
Microsoft Jet SQL 和 ANSI SQL 的比較
Microsoft Jet 數據引擎 SQL 總體上跟 ANSI-89 Level 1 是兼容的,但某些 ANSI SQL 性能在 Microsoft Jet SQL 里沒有實現。 Microsoft 發布的 Jet 4.X 版本,以及「Microsoft OLE DB Provider for Jet」 推出了更多的 ANSI-92 SQL 語法。在另一方面,Microsoft Jet SQL 包含了 ANSI SQL 不支持的保留字和性能。
主要的不同
Microsoft Jet SQL 和 ANSI SQL 各自有不同的保留字和數據類型。可參考下列鏈接:
List of Microsoft Jet 4.0 reserved words
Equivalent ANSI SQL Data Types
對於下面所示的語法結構應用的規則不一樣:
expr1 [NOT] Between value1 And value2
在 Microsoft Jet SQL 中,value1 可以比 value2 大;在 ANSI SQL 中, value1 一定要小於等於 value2
當我們用 Like 操作符進行模糊查詢時,Microsoft Jet SQL 既支持 ANSI SQL 的通配符,也支持 Microsoft Jet 特有的通配符。但是 ANSI 和 Microsoft Jet 的通配符是互斥的,我們只能選用任一組字元而不能混用在一起。ANSI SQL 通配符只在使用 Jet 4.X 和 Microsoft OLE DB Provider for Jet 時可用。如果試圖通過 Microsoft Access 或 DAO 來使用 ANSI SQL 通配符,這些字元會被理解為普通字元。反之,當使用 Microsoft OLE DB Provider for Jet 和 Jet 4.X 時只能使用 ANSI SQL 通配符。 匹配的字元 Microsoft Jet SQL ANSI SQL
任意單個字元 ? _ (下劃線)
零或多個字元 * %
Microsoft Jet SQL 語法通常上不是很嚴格。比如,允許對表達式分組和排序。
Microsoft Jet SQL 支持更強大的表達式。
Microsoft Jet SQL 提供下列擴展的性能
TRANSFORM 語句,可以用來創建 crosstab 查詢。
額外的 SQL 聚合函數,比如 StDev 和 VarP。
PARAMETERS 聲明用來定義參數查詢。
Microsoft Jet SQL 不支持下列 ANSI SQL 性能:
DISTINCT 聚合函數保留字。比如,Microsoft Jet SQL 不允許 SUM(DISTINCT columnname)。
LIMIT TO nn ROWS 子句,用來限制查詢返回的行數。我們只能用 WHERE 子句來限制查詢的范圍。
6. 大數據運算的三種引擎是什麼有什麼區別
現在流行的開源引擎可不止三個,先羅列5個給你:
1)Hive,披著SQL外衣的Map-Rece。Hive是為方便用戶使用Map-Rece而在外面封裝了一層SQL,由於Hive採用了SQL,它的問題域比Map-Rece更窄,因為很多問題,SQL表達不出來,比如一些數據挖掘演算法,推薦演算法、圖像識別演算法等,這些仍只能通過編寫Map-Rece完成。
2) Impala:Google Dremel的開源實現(Apache Drill類似),因為互動式實時計算需求,Cloudera推出了Impala系統,該系統適用於互動式實時處理場景,要求最後產生的數據量一定要少。
3)Shark/Spark:為了提高Map-Rece的計算效率,Berkeley的AMPLab實驗室開發了Spark,Spark可看做基於內存的Map-Rece實現,此外,伯克利還在Spark基礎上封裝了一層SQL,產生了一個新的類似Hive的系統Shark。
4) Stinger Initiative(Tez optimized Hive):Hortonworks開源了一個DAG計算框架Tez,Tez可以理解為Google Pregel的開源實現,該框架可以像Map-Rece一樣,可以用來設計DAG應用程序,但需要注意的是,Tez只能運行在YARN上。Tez的一個重要應用是優化Hive和PIG這種典型的DAG應用場景,它通過減少數據讀寫IO,優化DAG流程使得Hive速度提供了很多倍。
5)Presto:FaceBook於2013年11月份開源了Presto,一個分布式SQL查詢引擎,它被設計為用來專門進行高速、實時的數據分析。它支持標準的ANSI SQL,包括復雜查詢、聚合(aggregation)、連接(join)和窗口函數(window functions)。Presto設計了一個簡單的數據存儲的抽象層,來滿足在不同數據存儲系統(包括HBase、HDFS、Scribe等)之上都可以使用SQL進行查詢。