當前位置:首頁 » 編程語言 » 高質量sql的標准
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

高質量sql的標准

發布時間: 2022-12-19 15:58:50

① 如何優化sql語句

一、問題的提出

在應用系統開發初期,由於開發資料庫數據比較少,對於查詢SQL語句,復雜視圖的的編寫等體會不出SQL語句各種寫法的性能優劣,但是如果將應用系統提交實際應用後,隨著資料庫中數據的增加,系統的響應速度就成為目前系統需要解決的最主要的問題之一。系統優化中一個很重要的方面就是SQL語句的優化。對於海量數據,劣質SQL語句和優質SQL語句之間的速度差別可以達到上百倍,可見對於一個系統不是簡單地能實現其功能就可,而是要寫出高質量的SQL語句,提高系統的可用性。

在多數情況下,Oracle使用索引來更快地遍歷表,優化器主要根據定義的索引來提高性能。但是,如果在SQL語句的where子句中寫的SQL代碼不合理,就會造成優化器刪去索引而使用全表掃描,一般就這種SQL語句就是所謂的劣質SQL語句。在編寫SQL語句時我們應清楚優化器根據何種原則來刪除索引,這有助於寫出高性能的SQL語句。

二、SQL語句編寫注意問題

下面就某些SQL語句的where子句編寫中需要注意的問題作詳細介紹。在這些where子句中,即使某些列存在索引,但是由於編寫了劣質的SQL,系統在運行該SQL語句時也不能使用該索引,而同樣使用全表掃描,這就造成了響應速度的極大降低。

1. IS NULL 與 IS NOT NULL

不能用null作索引,任何包含null值的列都將不會被包含在索引中。即使索引有多列這樣的情況下,只要這些列中有一列含有null,該列就會從索引中排除。也就是說如果某列存在空值,即使對該列建索引也不會提高性能。

任何在where子句中使用is null或is not null的語句優化器是不允許使用索引的。

2. 聯接列

對於有聯接的列,即使最後的聯接值為一個靜態值,優化器是不會使用索引的。我們一起來看一個例子,假定有一個職工表(employee),對於一個職工的姓和名分成兩列存放(FIRST_NAME和LAST_NAME),現在要查詢一個叫比爾.柯林頓(Bill Cliton)的職工。

下面是一個採用聯接查詢的SQL語句,

select * from employss where first_name||''||last_name ='Beill Cliton';

上面這條語句完全可以查詢出是否有Bill Cliton這個員工,但是這里需要注意,系統優化器對基於last_name創建的索引沒有使用。

當採用下面這種SQL語句的編寫,Oracle系統就可以採用基於last_name創建的索引。

*** where first_name ='Beill' and last_name ='Cliton';

. 帶通配符(%)的like語句

同樣以上面的例子來看這種情況。目前的需求是這樣的,要求在職工表中查詢名字中包含cliton的人。可以採用如下的查詢SQL語句:

select * from employee where last_name like '%cliton%';

這里由於通配符(%)在搜尋詞首出現,所以Oracle系統不使用last_name的索引。在很多情況下可能無法避免這種情況,但是一定要心中有底,通配符如此使用會降低查詢速度。然而當通配符出現在字元串其他位置時,優化器就能利用索引。在下面的查詢中索引得到了使用:

select * from employee where last_name like 'c%';

4. Order by語句

ORDER BY語句決定了Oracle如何將返回的查詢結果排序。Order by語句對要排序的列沒有什麼特別的限制,也可以將函數加入列中(象聯接或者附加等)。任何在Order by語句的非索引項或者有計算表達式都將降低查詢速度。

仔細檢查order by語句以找出非索引項或者表達式,它們會降低性能。解決這個問題的辦法就是重寫order by語句以使用索引,也可以為所使用的列建立另外一個索引,同時應絕對避免在order by子句中使用表達式。

5. NOT

我們在查詢時經常在where子句使用一些邏輯表達式,如大於、小於、等於以及不等於等等,也可以使用and(與)、or(或)以及not(非)。NOT可用來對任何邏輯運算符號取反。下面是一個NOT子句的例子:

... where not (status ='VALID')

如果要使用NOT,則應在取反的短語前面加上括弧,並在短語前面加上NOT運算符。NOT運算符包含在另外一個邏輯運算符中,這就是不等於(<>)運算符。換句話說,即使不在查詢where子句中顯式地加入NOT詞,NOT仍在運算符中,見下例:

... where status <>'INVALID';

對這個查詢,可以改寫為不使用NOT:

select * from employee where salary<3000 or salary>3000;

雖然這兩種查詢的結果一樣,但是第二種查詢方案會比第一種查詢方案更快些。第二種查詢允許Oracle對salary列使用索引,而第一種查詢則不能使用索引。

雖然這兩種查詢的結果一樣,但是第二種查詢方案會比第一種查詢方案更快些。第二種查詢允許Oracle對salary列使用索引,而第一種查詢則不能使用索引。

② 常用標准SQL語句..

SELECT --從資料庫表中檢索數據行和列
INSERT --向資料庫表添加新數據行
DELETE --從資料庫表中刪除數據行
UPDATE --更新資料庫表中的數據
--數據定義
CREATE TABLE --創建一個資料庫表
DROP TABLE --從資料庫中刪除表
ALTER TABLE --修改資料庫表結構
CREATE VIEW --創建一個視圖
DROP VIEW --從資料庫中刪除視圖
CREATE INDEX --為資料庫表創建一個索引
DROP INDEX --從資料庫中刪除索引
CREATE PROCEDURE --創建一個存儲過程
DROP PROCEDURE --從資料庫中刪除存儲過程
CREATE TRIGGER --創建一個觸發器
DROP TRIGGER --從資料庫中刪除觸發器

select語句(查詢語句):
select *
from table1, table2 where table1.id *= table2.id//查詢table1和table2 中id相等的記錄

select stockname from table2//查詢表table2中欄位tockname中的值

insert語句(插入語句):
insert into table1(Stock_name,Stock_number) value (select Stockname , Stocknumber from Stock_table2)//向表table1中Stock_name和Stock_number欄位插入數據,value括弧裡面即為你要插入的值

update語句(更新語句):
update table1 set Stockname = "xxx" where Stockid = 3//把table1中的Stockid = 3改成Stockname = "xxx"

delete語句(刪除語句):
delete from table_name where Stockid = 3
//刪除Stockid = 3這條記錄
drop table table_name //刪除表table_name

③ SQL 3是什麼標准

為了在各個資料庫廠商之間取得更大的統一性,美國國家標准學會(American NationalStandards Institute,ANSI)於1986年發布了第一個SQL標准,並於1989年發布了第二個版本,該版本已經被廣泛地採用。ANSI在1992年更新了SQL標準的版本,即SQL92和SQL2,並於1999年再次更新為SQL99和SQL3標准。在每一次更新中,ANSI都在SQL中添加了新特性,並在語言中集成了新的命令和功能。

對於各種資料庫產品,ANSI標准規范化了很多SQL行為和語法結構。隨著開源資料庫產品(例如MySQL、mSQL和PostgreSQL)日漸流行並由虛擬團隊而不是大型公司開發,這些標准變得更加重要。

現在,SQL標准由ANSI和國際標准化組織(International Standards Organization,ISO)作為ISO/IEC 9075標准維護。最新發布的SQL標準是SQL:2008,下一版本的發布工作已經在進行之中,它將包含RDBMS在收集或分發數據方式上的新發展。(節選自《SQL實戰新手入門》)

④ 什麼是SQL

SQL(Structured Query Language,譯為結構化查詢語言)在關系型資料庫中的地位就猶如英語在世界上的地位。它是資料庫系統的通用語言,利用它,用戶可以用幾乎同樣的語句在不同的資料庫系統上執行同樣的操作。比如「select * from 數據表名」代表要從某個數據表中取出全部數據,在Oracle 9i、SQL Server 2000、Foxpro等關系型資料庫中都可以使用這條語句。SQL已經被ANSI(美國國家標准化組織)確定為資料庫系統的工業標准。
SQL語言按照功能可以分為4大類。
數據查詢語言DQL:查詢數據。
數據定義語言DDL:建立、刪除和修改數據對象。
數據操縱語言DML:完成數據操作的命令,包括查詢。
數據控制語言DCL:控制對資料庫的訪問,伺服器的關閉、啟動等。
SQL的主要特點
SQL語言簡單易學、風格統一,利用簡單的幾個英語單詞的組合就可以完成所有的功能。在SQLPlus Worksheet環境下可以單獨使用的SQL語句,幾乎可以不加修改地嵌入到如VB、PB這樣的前端開發平台上,利用前端工具的計算能力和SQL的資料庫操縱能力,可以快速建立資料庫應用程序。

⑤ 《編寫高質量 S Q L語句的61條有效方法(英文版)》txt下載在線閱讀全文,求百度網盤雲資源

《Effective SQL》(【法】John L. Viescas(約翰·威克斯)/【加】Douglas J.Steele(道格拉斯·斯蒂爾)/【美】Ben G.Clothier(本·克洛希爾))電子書網盤下載免費在線閱讀

鏈接: https://pan..com/s/1HtebkF-xn8wJpw5fp_CeEA

提取碼: esnj

書名:《Effective SQL》

作者:【法】John L. Viescas(約翰·威克斯)/【加】Douglas J.Steele(道格拉斯·斯蒂爾)/【美】Ben G.Clothier(本·克洛希爾)

出版社:電子工業出版社

出版年份:2017-8

頁數:348

內容簡介:《Effective SQL:編寫高質量SQL語句的61條有效方法(英文版)》了對案例問題的分析與解決方案的實現,向讀者展示了如何通過SQL 編寫解決復雜問題,以及如何通過資料庫設計簡化數據管理。這是一本將SQL 高級功能實踐與SQL 實際應用示例完美結合的、面向所有版本SQL 方言(其中包括IBM DB2、Access、SQL Server、MySQL、Oracle、PostgreSQL)的編程指南。

⑥ 什麼是SQL

SQL是Structured Quevy Language(結構化查詢語言)的縮寫。SQL是專為資料庫而建立的操作命令集,是一種功能齊全的資料庫語言。在使用它時,只需要發出「做什麼」的命令,「怎麼做」是不用使用者考慮的。SQL功能強大、簡單易學、使用方便,已經成為了資料庫操作的基礎,並且現在幾乎所有的資料庫均支持SQL。 <br>
##1 二、SQL資料庫數據體系結構 <br>
SQL資料庫的數據體系結構基本上是三級結構,但使用術語與傳統關系模型術語不同。在SQL中,關系模式(模式)稱為「基本表」(base table);存儲模式(內模式)稱為「存儲文件」(stored file);子模式(外模式)稱為「視圖」(view);元組稱為「行」(row);屬性稱為「列」(column)。名稱對稱如^00100009a^: <br>
##1 三、SQL語言的組成 <br>
在正式學習SQL語言之前,首先讓我們對SQL語言有一個基本認識,介紹一下SQL語言的組成: <br>
1.一個SQL資料庫是表(Table)的集合,它由一個或多個SQL模式定義。 <br>
2.一個SQL表由行集構成,一行是列的序列(集合),每列與行對應一個數據項。 <br>
3.一個表或者是一個基本表或者是一個視圖。基本表是實際存儲在資料庫的表,而視圖是由若干基本表或其他視圖構成的表的定義。 <br>
4.一個基本表可以跨一個或多個存儲文件,一個存儲文件也可存放一個或多個基本表。每個存儲文件與外部存儲上一個物理文件對應。 <br>
5.用戶可以用SQL語句對視圖和基本表進行查詢等操作。在用戶角度來看,視圖和基本表是一樣的,沒有區別,都是關系(表格)。 <br>
6.SQL用戶可以是應用程序,也可以是終端用戶。SQL語句可嵌入在宿主語言的程序中使用,宿主語言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada語言等。SQL用戶也能作為獨立的用戶介面,供交互環境下的終端用戶使用。 <br>
##1 四、對資料庫進行操作 <br>
SQL包括了所有對資料庫的操作,主要是由4個部分組成: <br>
1.數據定義:這一部分又稱為「SQL DDL」,定義資料庫的邏輯結構,包括定義資料庫、基本表、視圖和索引4部分。 <br>
2.數據操縱:這一部分又稱為「SQL DML」,其中包括數據查詢和數據更新兩大類操作,其中數據更新又包括插入、刪除和更新三種操作。 <br>
3.數據控制:對用戶訪問數據的控制有基本表和視圖的授權、完整性規則的描述,事務控制語句等。 <br>
4.嵌入式SQL語言的使用規定:規定SQL語句在宿主語言的程序中使用的規則。 <br>
下面我們將分別介紹: <br>
##2 (一)數據定義 <br>
SQL數據定義功能包括定義資料庫、基本表、索引和視圖。 <br>
首先,讓我們了解一下SQL所提供的基本數據類型:(如^00100009b^) <br>
1.資料庫的建立與刪除 <br>
(1)建立資料庫:資料庫是一個包括了多個基本表的數據集,其語句格式為: <br>
CREATE DATABASE <資料庫名> 〔其它參數〕 <br>
其中,<資料庫名>在系統中必須是唯一的,不能重復,不然將導致數據存取失誤。〔其它參數〕因具體資料庫實現系統不同而異。 <br>
例:要建立項目管理資料庫(xmmanage),其語句應為: <br>
CREATE DATABASE xmmanage <br>
(2) 資料庫的刪除:將資料庫及其全部內容從系統中刪除。 <br>
其語句格式為:DROP DATABASE <資料庫名> <br>
例:刪除項目管理資料庫(xmmanage),其語句應為: <br>
DROP DATABASE xmmanage <br>
2.基本表的定義及變更 <br>
本身獨立存在的表稱為基本表,在SQL語言中一個關系唯一對應一個基本表。基本表的定義指建立基本關系模式,而變更則是指對資料庫中已存在的基本表進行刪除與修改。 <br>
……<br>

⑦ sql在哪一年首次被國際標准化組織批准作為關系資料庫語言的國際標准

1987年。

結構化查詢語言SQL(STRUCTURED QUERY LANGUAGE)是最重要的關系資料庫操作語言。1986年10月,美國國家標准協會(ANSI)對SQL進行規范後,以此作為關系式資料庫管理系統的標准語言(ANSI X3. 135-1986)。1987年,國際標准化組織(ISO)頒布了SQL正式國際標准。1989年4月,ISO提出了具有完整性特徵的SQL89標准,1992年11月又公布了SQL92標准。

以上參考自網路:

⑧ sql 標準是什麼怎麼定義的!

你可以搜索一下 SQL92會得到很多的資料。
為什麼不同資料庫差異很大? 因為:
1、如果跟其他產品的sql完全一樣,就會有給其他產品替代的危險,無法「綁架」使用本產品的用戶(就像「扣扣」綁架用戶類似)
2、不同的資料庫提供商引擎不同,引擎的差異導致資料庫產品會用一些個性的語法來突出自己產品的功能、性能特性等。
就像所有的汽車都有速度表、里程錶、油量表和溫度表,但是樣式都不會相同一樣
3、SQL92標準是各個資料庫產品應該事先的功能、語法的一個子集。