前言:中文期刊網精心挑選了sql語言范文供你參考和學習,希望我們的參考范文能激發你的文章創作靈感,歡迎閱讀。
sql語言范文1
SQL(Structured Query Language)是關系數據庫系統的國際標準查詢語言,當前主流的數據庫都提供對該語言的支持,它包括數據定義、數據控制、數據操作以及數據查詢。SQI語言包含的內容非常豐富,其中查詢是數據庫最重要的操作,SQL語言的SELECT語句為查詢提供了靈活而全面的支持。VFP數據庫課程是安康學院文科專業學生開設的一門計算機公共課,SOL語言是該課程的一個重點和難點,采用什么樣的教學方法,使學生在較短的時間內對SQL語言能夠全面地了解和掌握,提高學生的數據庫應用能力,是廣大計算機教育工作者所共同關心的問題。
1SQL語言教學中存在的問題
1.1學生缺乏學習興趣
SQL語言的教學內容一般都先講解概念、語法,然后通過一個簡單的實例進行驗證,而真正能提高學生學習興趣的實例很少,導致學生缺乏學習興趣,影響課堂教學質量。
1.2不能寫出完整的SQL命令
非計算機專業的學生從開始接觸到計算機操作時,主要使用的是圖形界面的操作方式,對于使用命令的操作方式非常生疏,學習起來非常困難。學生反映,能夠分析出SQL命令的功能,但很難寫出完整的SOL命令。
1.3不能用SOL語言實現分組統計功能
分組統計查詢是SOL語言中的一個難點,分組查詢通常和統計函數一起使用,學生反映不知道用哪些函數以及如何確定分組依據。
1.4多表查詢以及嵌套查詢掌握的較差
在教學過程中,學生反映,單表查詢相對容易,多表查詢涉及多個聯接條件,嵌套查詢涉及主查詢和子查詢以及關鍵字(in,any,all等)的選擇,學生很難寫出完整的命令。
2 SQL語言教學方法研究
2.1改變教學內容順序,提高學生學習興趣
通過實例講解SOL語言的具體功能。
例1:查詢本班學生的全部信息。
SQI命令:select*from學生表
通過該實例講解sQL語言每一部分的語句功能,如select表示查詢,星號(*)表示顯示所有列,from短語后跟表名。可以讓學生思考:查詢課程的全部信息、查詢班級的全部信息,這些命令如何寫。接著可以引出條件查詢(where子句)、分組查詢(group by子句)、排序查詢(order by子句)等。
實例的選擇最好是學生熟悉的數據,如本班的學生、學生所學習的課程、學生的學習成績等。為了進一步提高學生的學習興趣,還可以舉例說明日常生活中用到的數據庫的例子,如火車訂票系統、超市管理系統、銀行管理系統等,讓學生明白數據庫和自己的生活息息相關,數據庫是一門技能,要學好這門技能,必須學好SQL語言,使學生對SQL語言的學習產生興趣,進而提高課堂教學效果。
2.2可視化的SQL語言對比教學方法
SQI培言主要是由命令及參數組成,掌握不好命令及參數的使用就不能正確執行查詢,得到結果。針對學生不能寫出完整的SQL命令的問題,可以采用可視化的SQI語言對比教學方法,通過實例說明該方法的具體使用過程。
教學管理數據庫包含如下4張表:
學生表(學號、姓名、性別、專業編號、出生日期、獎學金、備注)
課程表(課程號、課程名、課時、學分、必修)
專業表(專業編號、專業名稱)
成績表(學號、課程號、成績)
例2:查找平均分是前3名的女生的學號、姓名、專業名稱、年齡和平均分。
(1)打開Microsoft Visual FoxPr06.0,選擇新建查詢。
(2)在查詢設計器中添加查詢需要的數據表:學生表、專業表和成績表,并設置添加顯示字段,函數的添加要在“函數和表達式”文本框處輸入,然后點擊添加,如圖1所示。
(3)設置2張表的連接條件,學生表和專業表通過專業編號聯接,學生表和成績表通過學號聯接。
(4)設置篩選條件為:學生表.性別=t.。
(5)設置排序依據,按平均分的降序排序。
(6)設置分組依據,按學號分組。
(7)設置雜項,無重復記錄與命令關鍵字distinct對應,記錄個數與top n關鍵字對應。
該查詢命令比較復雜,涉及多表查詢、分組統it.排序、條件查詢等操作,學生很難寫出完整的命令,通過查詢設計器這種可視化的方式進行對比教學,學生操作的每一步都可以查看到對應的SQI培句,可以加強學生對SQI語句的掌握,整個操作過程很直觀,學生很容易地掌握了SQL語言中各種參數的正確使用。
2.3 SOL分組查詢
針對學生反映的分組查詢問題,在教學過程中應注意以下幾點:
(1)SQL統計函數。SQL統計函數包括:count,sum,avg,max,min這5個基本函數,要讓學生明白每個函數的具體功能,在實踐過程中,學生有時候把count函數和sum函數弄混,在教學過程中應該強調二者的區別,count用來計數,sum用來給數值數據求和。
(2)分析分組的依據。例如求男女生的平均年齡,應該按性別分組;求每個學生的平均成績,應該按學號分組;求每門課程的平均成績應該按課程號分組等。由淺入深,讓學生掌握如何確定分組依據。
(3)通過實踐加強學生對所學知識的理解和掌握。例3:統計男女生人數。
命令:select性別,count(*) as人數
from學生表
group by性別
讓學生實踐操作:統計男女生入學成績的平均分,統計不同專業學生的平均年齡等操作。
2.4多表查詢和嵌套查詢
2.4.1多表查詢
首先要分析的是查詢中最少需要的數據表,而不是把所有表都寫進查詢,這樣就會影響查詢效率。其次,要分析多表查詢中的連接條件,例如學生表和專業表通過專業編號連接,課程表和成績表通過課程號連接等。最后,需要提醒學生多表中具有的相同字段在顯示時必須寫上表的別名或表名。
2.4.2嵌套查詢
從簡單的實例出發:例如查詢所有選課的學生信息,應該就是查詢那些學號在成績表中的所有學生信息,查詢命令為:
select*from學生表
where學號in(select學號from成績表)
讓學生思考:查詢被學生選修的課程信息,應該如何寫,使學生對所學知識融會貫通,提高學生的數據庫應用能力。
sql語言范文2
關鍵詞:預編譯器;嵌入式SQL;數據庫應用
中圖分類號:TP311.13 文獻標識碼:A 文章編號:1007-9599 (2012) 18-0000-02
1 PRO * C/ C++預編譯器介紹
所謂PRO * C/ C++預編譯器實際上就是編譯C或者C++語言以及ORACLE數據庫接口的軟件包。在預編譯器里可以嵌入SQL語言,因此能夠讓程序員更加靈活訪問數據庫,因此在這個編譯器軟件包下,能夠讓程序員同時在VC開發環境里使用高級程序語言如C和C++以及SQL數據庫操作語句。因此能夠更好的構建程序模塊。將編程工作變得更加方便,如果不使用這種PRO * C/ C++預編譯器軟件包。那么要想直接操作ORACLE等關系數據庫中的數據就變得非常困難了。
2 在VC6.0開發環境下配置PRO * C/ C++預編譯器方法分析
如果程序員在VC6.0下直接軟件開發,那工作往往是事倍功半,但是如果合適的配置PRO * C/ C++預編譯器,那么對數據庫的應用程序開發將會事半功倍,下面就來分析如何在VC環境下配置PRO * C/ C++預編譯器方法。
第一步單擊VC開發軟件TOOLS工具欄,選擇CUMSTOMIZE,然后再選擇TOOLS頁。
第二步在menu contents列表框里輸入Pro * C/C++這些字母,接著在command編輯框里輸入ORACLE HOME?。蹷IN\ procui. Exe,同時在Arguments 中鍵入S (TargetName),在Initial directory 中鍵入S (WkspDir)。
第三步單擊tools中的options菜單,選擇DIRECTORIES欄目頁,對頭文件路徑以及庫文件路徑進行設置。
3 嵌入式SQL語言宿主程序的分析
3.1 基本命名規則
在VC開發環境下配置PRO * C/ C++預編譯器后,就應該遵循規定的文件擴展名,這些擴展名會根據宿主語言的不同會有不同的變化,之所以有這個標準就是為了告訴預編譯器在這個高級語言下使用了SQL語言,因此在編譯之前需要對其進行預編譯并翻譯成同類的宿主語言,比如C/C++的擴展文件名就為.PC,PACAL的后綴名就為.PPA。當預編譯完成之后,SQL語言就會和宿主語言一樣,從而進行正常的編譯和鏈接。
3.2 嵌入式SQL 語言分析
所謂嵌入式SQL語言實際上就是在應用程序開發時,在高級編程語言里面嵌入了SQL語言。這個程序本身就成為了SQL語言的宿主程序。標準的SQL語言命令能夠通過編譯器編譯。嵌入式SQL語言主要包括兩個部分,一個是可執行的語句,另一個就是聲明??蓤绦蠸QL語句能夠操作ORACLE等關系數據庫,比如執行查詢,更新,刪除等命令。可執行的SQL語句可以分為四種,分別為定義、控制和操作以及檢索。而聲明主要的作用就是用于聲明ORACLE等關系數據庫的對象以及SQL變量等,這些嵌入式的SQL語言不會通過數據庫執行,也不會從數據庫中返回結果,嵌入式SQL語言不會對數據庫的數據形成最終的影響,因此需要對這些嵌入式語句設置一個定義標準,也就是要以* EXEC SQL *開頭。
在使用SQL嵌入式語言時,應該在預編譯文件中使用PL/SQL塊,這能夠減少系統開銷,提升編譯效率,在宿主程序中使用這個模塊編譯,需要對這個代碼段進行聲明,讓預處理編譯器知道怎么做。讓用戶的應用程序能夠正常工作,基于嵌入式SQL語言的數據庫應用程序的開發就需要充分了解各個組成部分。
3.2.1 數據聲明的代碼段分析
這個部分主要定義所有的宿主變量,這段代碼某些時候又被成為序言,在數據聲明代碼段主要包含了三個部分,分別為聲明、SQL包含代碼段以及SQL連接代碼段。在嵌入式SQL語言開發下,所有在SQL語言中引用到的宿主語言的變量都需要在這個聲明部分進行定義。否則就不會通過預編譯器的編譯。現在很多宿主語言比如C++以及PASCAL等都支持多個聲明段。在這些聲明里,既可以定義全局變量也能夠定義局部變量,具體變量的命運原則和SQL語言的變量命名原則是一致的。
另外在應用程序開發時,往往在運行過程中會存儲不同的數據類型,目前ORACLE數據庫只能夠對可以識別的數據類型和有效的取值范圍進行操作,而ORACLE只能夠識別兩種有效數據類型,分為內部和外部,內部數據主要包括ORACLE自身可以識別的文本,字符等類型,而外部主要指的是宿主變量的類型。在聲明工作完成后,程序員還需要對ORACLE和宿主程序之間的通信區進行定義。這個通信區需要使用SQL包含代碼段進行創建,在創建通信區之后,宿主程序還需要連接到ORACLE數據上來才能夠對數據庫進行操作,此時也就是代碼連接階段。因此在連接之前需要執行一個SQL連接命令,完成對本地數據庫或者遠程數據庫的訪問。根據操作系統的不同,可以建立多個或者單個不同的數據庫連接。
3.2.2 數據操作代碼段
當代碼聲明段以及數據庫代碼連接段完成之后,就可以進行編寫數據操作代碼了,目前數據操作代碼段主要是由SQL語句創建編寫,這部分實際上也就是嵌入式SQL語言在數據庫應用程序開發上的主體。而數據操作代碼段主要包含對數據的查詢,刪除,更新,插入等工作。并且在宿主程序里返回操作結果,并對這些結果進行處理等。
4 具體應用實例分析
使用VC開發環境編寫一個基于嵌入式SQL語言的查詢ORACLE數據庫的表單,具體包括下面幾個步驟:其一是使用VC開發環境下的MFC框架向導來建立一個基于對話框的應用程序工程;其二就是在SETTING中設置數據庫的鏈接文件,選擇的鏈接文件名稱為oraSQL8. lib;其三就是創建兩個類,也就是對象,分別為WSHH1 PC 和WXM1 PC;其四就是在第一部就配置好的pro * c/ c++菜單上添加第三步創建的兩個類,并且設置這兩個類的輸入文件,文件名分別為wshh. Cpp和wxm. Cpp,并且在option選項中設置后綴名稱為*cpp*;其五就是根據宿主程序的需要,在其他相關程序文件中包含wshh. Cpp 和wxm. Cpp這兩個文件;其六就是選擇編譯就能夠完成對嵌入式SQL語言的應用。
5 總結
本文從PRO * C/ C++預編譯器在VC開發環境中的配置開始,詳細的介紹了預編譯的好處,以及有關嵌入式SQL語言的優勢,并且通過實例詳細介紹了嵌入式SQL語言在數據庫應用程序開發過程的詳細設置。這樣程序員就需要使用復雜的獨立的ORACLE開發工具來開發相應的數據庫應用程序,而是和高級語言諸如PASCLE和C/C++等面向對象語言一樣,植入SQL語言就能夠實現對數據庫的一體化的程序編寫。
參考文獻:
[1]晏慶.GKD-Base中嵌入式SQL關鍵技術的研究與實現[D].國防科學技術大學,2005.
[2]王旭卓,劉麗娜.嵌入式SQL語言在Oracle數據庫中的應用[J].才智,2009,12.
sql語言范文3
【關鍵詞】 PHP語言 MySQL數據庫 數據表 連接
一、引言
隨著時代的飛速發展,科學技術手段水平的不斷提高,人們對互聯網的要求也越來越高,各類管理系統也成為了現代科技不可或缺的產物。
以PHP+MySQL為基礎開發的管理系統,因為其獨特的優點成為了各大公司管理系統建設的首要選擇,而PHP與MySQL的連接更是各類管理系統的核心。
二、PHP語言簡介
PHP(超文本預處理器)是一種廣泛運用的開源腳本語言。語法吸收了C語言、Java和Perl的特點,可以嵌入到HTML中,利于學習,使用廣泛,主要適用于Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法,并提供了與各種數據庫連接的函數。PHP是完全免費的,可以不受任何限制的獲取源代碼和自用下載,使得PHP的使用效率很高。
三、MySQL數據庫簡介
MySQL是一種開放源代碼的關系型數據庫管理系統,由瑞典MySQL AB公司開發,MySQL數據庫因其體積小、速度快、總體擁有成本低而受到了中小企業的熱捧。MySQL數據庫是基于Linux操作系統開發出來的數據庫,眾所周知Linux是開放源碼的操作系統,所以MySQL數據庫也是開放源碼的免費數據庫,這也是MySQL數據庫的最大優點,雖然其功能的多樣性和性能的穩定性差強人意,但是依然有很多用戶在使用。
四、創建數據庫和數據表
以下操作均以本項目“飯卡智能管理系統”作為示例進行說明,數據庫名稱為ecard,用戶信息表名稱為:info_ user。
當然,在Mysql中創建數據庫和數據表最簡單的方法就是利用鼠標進行操作,而在這里,我主要談論的是利用SQL語句進行設計。
在MySQL中創建數據庫用CREATE DATABASE(ecard);語句實現。以防在后來數據庫操作中因編碼的問題而出現亂碼的情況,在這里,我建議此步驟可以利用手動方法建立數據庫,排序規則選擇utf8-general-ci;
數據庫建好之后就是創建數據表了,在Mysql中創建數據表的語句是:
CREATE TABLE info_user(ID INT(11) PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(25) NOT NULL,
Gender VACHAR(2) NOT NULL,
ID_card VARCHAR(35) NOT NULL ,
Phone VARCHAR(25) NOT NULL,
Password VARCHAR(25) NOT NULL,
Department VARCHAR(25) NOT NULL);
其中ID表示學號,Name表示姓名,Gender表示性別,ID_card表示身份證號,Phone表示聯系方式,Password表示密碼,Department表示院系。
到這里,數據庫和數據表就已經建立成功了。
五、PHP語言連接MySQL數據庫
在PHP中,要連接數據庫,首先必須得創建與數據庫對應的字段,這里主要討論如何連接數據庫,用到的語句為:
$link=mysql_connect(’localhost’,’root’,’’);連接數據庫
mysql_select_db(’ecard’,$link);選擇數據庫
$ s q l = " S E L E C T * F R O M i n f o _ u s e r W H E R E ID=binary(’{$ID}’)";數據庫查詢語句
$res=mysql_query($sql,$link)or die("查詢失敗".mysql_ error($link));判斷語句,如果執行成功則返回TRUE,執行不成功則返回FALSE
$arr=mysql_num_rows($res);返回結果集行的數目
$sql="INSERT INTO info_user(ID,Name,Gender,ID_ card,Phone,Password,Department) VALUES(’{$ID}’,’{$name}’,’{$gender}’,’{$ID_card}’,’{$Phone}’,’{$Password}’,’{$Department}’)";數據庫插入語句
至此,PHP語言連接MySQL數據庫成功。
六、結束語
學校在經費缺、人員少的情況下,利用信息化手段建設和應用飯卡管理系統,對于規范學校的管理系統具有極其重要意義。有利于提高飯卡的利用效率,提高學校后勤集團的工作效率和服務水平, 也給廣大師生提供了便利。
參 考 文 獻
sql語言范文4
(成都理工大學信息科學與技術學院,四川 成都 610059)
【摘 要】大數據時代,以圖片、文字等非結構化數據為主的大數據用傳統的存儲方式已不能滿足需要。本文對各種數據進行有效分析,提出了一種利用LabVIEW SQL Toolkit快速實現與數據庫連接進行相關操作的方法。以基于LabVIEW的失物招領平臺為例,實踐了該方法的具體應用,為LabVIEW訪問數據庫的程序設計提供幫助。
關鍵詞 LabVIEW;數據庫;LabVIEW;SQL;Toolkit;失物招領平臺
Research of Database Access Technology Based on LabVIEW SQL Toolkit
XIONG Jing ZHANG Liang REN Peng
(Chengdu University of Technology College of Electronics Engineering and Computer science, Chengdu Sichuan, 610059)
【Abstract】Today’s society is known as the big data era.In the face of the big data based on unstructured data such as text, images and so on,the traditional storage methods cannot meet the need. Research on various data effectively, this paper proposes a using LabVIEW SQL Toolkit fast implementation and the database connection, and relevant operation method.Finally, based on the LabVIEW platform for the lost and found, for example, show that the method is convenient and quick.It offers help to access the database programming in the LabVIEW environment.
【Key words】LabVIEW;Database;LabVIEW;SQL;Toolkit;Platform for the lost and found
0 引言
隨著大數據時代的到來,以圖片、文字等非結構化數據為主的大數據,傳統的存儲方式已不能滿足需要,本文介紹了利用LabVIEW的LabVIEW SQL Toolkit工具包對數據庫的相關操作,幫助用戶集中管理大量信息。
1 LabVIEW SQL Toolkit簡介
LabVIEW SQL Toolkit[1-4](也叫Database Connectivity工具包)是NI為LabVIEW用戶提供的一個專門和數據庫連接的工具包,即能快速連接本地,又能連接遠程數據庫,無需進行結構化查詢語言(SQL)編程就可以執行諸多常用的數據庫操作,如Microsoft Access、SQL Server和Oracle,而SQL的使用增加了高級數據庫操作的靈活性。
2 數據庫操作
2.1 連接數據庫
連接數據庫之前要創建數據庫。創建一個“失物信息.accdb”的Microsoft Access 2007數據庫對象,然后通過DB Tools Open Connection.VI的connection information字符串指定數據源,提高數據庫操作的移植性和靈活性,即不需要手動設置數據源也可對數據庫中文件進行操作,注意Provider應為“Microsoft.ACE.OLEDB.12.0”。
2.2 數據存儲
通過DB Tools Insert Data.VI完成數據的存儲,在“table”端指定操作表的名稱,“create table”端若為“T”,表示在表不存在的情況下將自動創建新表。數據庫以簇的形式管理數據,每個簇代表一個記錄,添加記錄時需調用捆綁.VI將獨立元素組合為簇進行存儲。數據庫不但能存儲字符、數據、波形等類型的數據,而且還能存儲圖片數據。利用讀取JPEG文件.VI、讀取PNG文件.VI等函數獲取圖片文件的圖像數據,圖像數據為一個包含圖像類型、深度、掩碼、顏色等元素的組合簇。
2.3 數據的顯示
顯示數據庫中數據需先指定數據表,通過DB Tools Select Data.VI從指定的表中提取數據,但是從表中提取的數據為變體,需使用Database Variant To Data Function.VI將變體轉化為通過“type”端所指定的數據類型,最后調用多列列表框的“ItemNames”屬性節點,將數據表中的數據顯示在列表框中。而對于所存儲的圖片數據,需使用繪制平滑像素圖.VI將圖像數據還原成圖片進行顯示。
2.4 查詢記錄
LabVIEW SQL Toolkit與SQL兼容,可以不使用SQL語句就能實現數據庫記錄的查詢、添加、修改以及刪除等操作。直接調用DB Tools Select Data.VI,在“condition”需通過where函數搜索條件。DB Tools Execute Query.VI也可通過SQL語言對記錄進行查詢,在“SQL query”輸入“select * from 表名”加 where條件,即可獲取指定表中滿足條件的記錄。
2.5 斷開連接
完成對數據庫訪問操作后,調用DB Tools Close Connection.VI斷開與數據庫的連接,釋放內存和所占用的系統資源。
3 應用案例
應用該LabVIEW SQL Toolkit設計了基于LabVIEW的失物招領平臺,包括用戶登錄、用戶管理、修改密碼、登記和查看失物信息、郵件發送、查看照片六大功能。圖2為系統的招領信息子VI:(1)設置多列列表框每列的列名;(2)實現了時間實時更新;(3)在列表框中實現對記錄的選擇,實現刪除、發送郵件等功能;事件結構的精確查詢分支,實現對數據庫中滿足條件的記錄的查詢及顯示。
為及時通知用戶,本系統采用SMTP(郵件傳輸協郵件發送方式通知用戶。以鍵選中狀態的快速跳轉方法實現通過回車鍵實現文本框之間的跳轉,其功能模塊如圖3所示?!坝脩舻卿洝弊覸I運行后,設置“用戶名”文本框的屬性節點KeyFocus為真,使其處于選中狀態,用戶即可直接輸入用戶名,然后點擊回車鍵,鍵選中狀態跳轉到“密碼”文本框,方便了用戶操作。
4 結語
實例證明,在LabVIEW中,通過調用LabVIEW SQL Toolkit具有如下的優點:①數據庫的使用方便了對大量信息進行集中管理;②不使用SQL語言也可對數據庫記錄進行查詢、添加、修改、刪除等操作;③數據庫不但能存儲顯示字符、數字,還可以對波形和圖片進行存儲顯示,拓寬了數據庫作用范圍。實例的郵件發送和快捷跳轉功能為操作人員帶來了方便,具有較強的實用性。
參考文獻
[1]錢思思,朱永生,等.利用LabVIEW SQL Toolkit對不同類型數據存取操作的方法研究[J].測控技術,2014,33(9):105-109..
[2]唐亞鵬,候媛彬.基于LabVIEW的實踐教學平臺與Access數據庫的開發[J].計算機技術與發展,2011,21(5):219-222.
[3]冉寶春,郭慶吉.應用LabSQL構建和訪問數據庫的方法[J].2005(6):48-50.
sql語言范文5
關鍵詞:SQL;優化策略;數據庫性能;謂詞
中圖分類號:TP301.6文獻標識碼:A
文章編號:1004-373X(2010)04-152-02
Optimization of SQL Query
ZHANG Min1,2
(1.Northwest University,Xi′an,710069,China;
puter Faculty Working Office,Xi′an Fanyi University,Xi′an,710105,China)
Abstract:Database performance issue has been the decision-makers and technical staff of the focus of common concern,affecting database performance is an important factor in the low-SQL query efficiency.In order to improve the implementation of database application system efficiency,from analysis of the process of query processing relational database query optimization techniques to start the discussion,pointing out that the relational database query optimization as a general principle.Optimization strategy in several studies,in time and space to improve the performance of the system,to a certain extent to improve efficiency of the query.
Keywords:SQL;optimization strategy;database performance;predicate
0 引 言
查詢是數據庫中最基本、最常用、最復雜的操作。在數據庫的管理信息系統中,查詢操作是所有數據庫操作中所占據比重最大的操作。當數據庫系統積累到一定程度,若查詢時采用單條順序掃描,那么掃描一遍所有的記錄可能就得花上幾十分鐘,甚至幾小時,這樣的系統就失去了現實的使用價值。采取什么樣的查詢策略,使查詢時間降為幾分鐘或者幾秒鐘,就是這里需要研究的查詢優化問題。
1 優化原理[1]
查詢優化力圖找出給定表達式等價,但執行效率更高的一個表達式,一個查詢往往會有許多實現方法,關鍵是如何找出一個與之等價的且操作時間又少的表達式,查詢優化關注的問題是怎樣省時、省空間以及效率高。優化的核心問題是盡可能減少查詢中各表的參與加工的數據量,從而達到優化時間和空間的目的。
2 SQL優化的方法
2.1 模糊匹配的避免
LIKE關鍵字支持通配符匹配,技術上稱為正則表達式。但這種匹配特別耗費時間,盡量避免使用模糊匹配。例:
SELECT*FROM student WHERErxscoreLIKE′4′
即使在rxscore 字段上建立了索引,在這種情況下也還是采用順序掃描的方式。
可改寫為:
SELECT*FROM student WHERE rxscore>′400′
這樣,在執行查詢時就會利用索引來查詢,顯然會大大提高速度。
2.2 邏輯表達式的等價變換
由于執行引擎對各種謂詞的處理方法不同,因此把邏輯表達式重寫成等價的且效率較高的表達式是提高查詢效率的有效方法,同時也是切實可行的[2]。通過查閱大量的文獻資料以及大量的實驗,分析了RDBMS執行引擎對各種謂詞執行效率的不同,總結出以下幾種邏輯表達式轉換規則:
2.2.1 將多個OR連接的表達式轉化為ANY表達式
當條件表達式中同層次上出現由連接詞OR連接的表達式,并且OR所連接的表達式的左表達式相同且謂詞符號也相同時,那么可以將這些表達式合并為一個右表達式用ANY來描述的表達式。例:
rxscore>400 OR rxscore>score+50 OR rxscore>score×2
可改寫為:
rxscore>ANY(400,score+50,score×2)
2.2.2 將ANY或ALL轉化為簡單的比較表達式
當謂詞的右表達式為ANY或ALL的形式,并且ANY(ALL)包含的各表達式均有固定值,并且可以比較大小,則可根據謂詞符號 (僅限于比較大小的操作符 ) 將ANY(ALL)重寫為簡單的比較表達式。例:
x>ANY(100,200,300)可改寫為:x>100;
x>ALL(100,200,300)可改寫為:x>300
2.2.3 將BETWEEN…AND轉化為AND連接的表達式
可以把由 BETWEEN expr1 AND expr2的形式重寫為用AND連接的兩個表達式,效率往往有一定的提高。例:
rxscore BETW EEN 300 AND 400
可改寫為:
rxscore>=30 AND rxscore
2.2.4 將IN謂詞表達式轉換為OR連接的謂詞表達式
例:年齡IN(20,30,40)
可寫為:年齡=20 OR年齡=30 OR 年齡=40
以上提到的4類謂詞重寫規則均有其特定的條件,在條件滿足的情況下才可以使用。對于簡單謂詞的重寫,每條規則提高的效率可能不太明顯,但如果查詢語句的WHERE條件同時使用多條規則進行重寫時,效率的提高將非??捎^。
2.3 子查詢合并
子查詢合并是將某些特定的子查詢重寫為等價的多個表的連接操作。子查詢合并的作用在于能使查詢語句的層次盡可能地減少,從而可提高查詢的效率。子查詢合并的一般規則為:
(1) 如果外層查詢的結果沒有重復,即SELECT子句中包含主碼,則可以合并其子查詢,并且合并后的SELECT子句前應加上DISTINCT標志;
(2) 如果外層查詢的SELECT子句中有DISTINCT標志,那么可以直接進行子查詢合并;
(3) 如果內部子查詢結果沒有重復元組,則可以合并。
例:查詢選修002號課程的學生基本信息。
用子查詢的方法如下所示,例:
SELECT student.sno,sname,age FROM student WHERE sno IN(SELECT sno FROM sc WHERE cno=′002′)
可改寫為:
SELECT student.sno,sname,age FROM student,sc WHERE student.sno=sc.sno AND cno=′002′
2.4 用集合運算來代替邏輯運算
0R在嵌套查詢中,表的順序存取對查詢效率可能產生致命的影響,避免這種情況的方法就是對連接的列進行索引。例如兩個表:student(sno,sname,age)和sc(sno,cno,score)。如果兩個表要做連接,就要在“sno”這個連接字段上建立索引。還可以使用并集來避免順序存取,盡管在所有檢查列上都有索引,但某些形式的WHERE子句強迫優化器使用順序存取。下面的查詢將強迫對student表執行順序操作:
SELECT*FROM student WHERE sno>′23005′AND sno
OR xb=′計算機系′
雖然在sno和系別名上都建有索引,但是在上面的語句中優化器還是使用順序存取的方法掃描整個表。因為這個語句要檢索的是分離的行的集合,所以應該改為如下語句:
SELECT*FROM student WHERE sno>′23005′AND sno
UNION SELECT*FROM student WHERE xb=′計算機系′
2.5 多表連接優化
最能體現查詢復雜性的就是多表連接,多表連接操作往往要耗費大量的CPU時間和內存,因此多表連接查詢性能優化往往是SQL優化的重點與難點[3]。
2.5.1 充分利用連接條件
在某種情況下,兩個表之間可能不只一個的連接條件,這時在WHERE子句中將連接條件完整的寫上,有可能大大提高查詢速度。例:
SELECT SUM(A.AMOUNT) FROM A,B WHERE
A.CARDNO=B.CARDNO SELECT SUM(A.AMOUNT) FROM A,B WHERE A.CARDNO=B.CARDNO AND
A.ACCOUNTNO=B.ACCOUNTNO
這里,第二句將比第一句執行快得多。
2.5.2 先篩選后連接
當查詢多個數據表時,要先過濾后再連接。例:
SELECT*FROM A,B WHERE A.INTID=B.INTADID AND A.INTID>1 AND YEAR(B.DATDATE)=2500
SELECT*FROM A,B WHERE A.INTID>1 AND YEAR(B.DATDATE)=2 500 AND A.INTID=B.INTADID它們的執行效率相差很大。第一個查詢語句首先將兩個數據表按照用戶ID進行連接,然后再將符合條件的記錄篩選。由于兩個數據表進行連接時記錄有些是以后還要篩選掉的,這顯然會占用更多的時間,且多個數據表連接是笛卡兒積運算,消耗的時間會隨著記錄個數的增加很快地增長。第二個查詢語句克服了這個缺點,首先篩選出符合條件的記錄,減少了進行連接的記錄個數,然后再執行連接查詢,大大提高了查詢效率。
3 結 語
查詢優化要抓住關鍵問題,對于數據庫應用程序,重點在于如何提高SQL的執行效率。在數據庫的開發和維護過程中,查詢的優化設計可以提高系統性能,對于數據量大的數據庫系統尤為重要。以上介紹的幾種優化策略使查詢在時間和空間上提高了系統的性能,在一定程度上提高了查詢效率。
參考文獻
[1]王珊,薩師煊.數據庫系統概論[M].4版.北京:高等教育出版社,2006.
[2]丁寶康,董健全.數據庫實用教程[M].2版.北京:清華大學出版社,2003.
[3]范劍波,張曉云.網絡數據庫技術與應用[M].西安:西安電子科技大學出版社,2004.
[4]劉志成,彭勇.數據庫系統原理與應用[M].北京:機械工業出版社,2007.
[5]羅運模.SQL Server數據庫系統基礎[M].北京:高等教育出版社,2006.
[6]宋瀚濤,李新社.數據庫編程與應用[M].北京:電子工業出版社,1998.
[7]史嘉權.數據庫系統概論[M].北京:清華大學出版社,2006.
sql語言范文6
關鍵詞:軟件技術;mysql數據庫;php語言
1 mysql數據庫概述
mysql是一個開放源碼的小型關聯式數據庫管理系統,開發者為瑞典mysql ab公司。mysql被廣泛地應用在internet上的中小型網站中。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了mysql作為網站數據庫?,F在mysql數據庫是甲骨文公司旗下的一款數據庫產品。
2 mysql數據庫輸出方案
2.1 從數據庫輸出至網頁腳本
mysql數據庫與php之間通過php內置函數進行交互(php語言對多種數據庫均留有接口),之后再一個.php文件下使用上述交互措施,代買如下:
<?php //假設mysql數據庫中有有一個叫user的數據庫,有一張login的表,表中有id,name,pw三個字段。
mysql_connect("localhost","root","")or die(mysql_error());//這里使用的是默認的mysql配置
mysql_select_db("user")or die(mysql_error());
mysql_query("set names utf8");//設定字符集
$command="select * from `login` where 1 order by `id`;";
$query=mysql_query($command);
while ($row=mysql_fetch_array($query))
{
?>
<?php echo $row['id'];?>
<?php echo $row['name'];?>
<?php echo $row[‘pw'];?>
<?php
}
?>
這樣便能在頁面經由服務器組件編譯后將login表中數據展現在一個網頁上。
2.2 從數據庫輸出至sql文件
作為mysql的一個方便之處,數據庫可以通過簡單地導入導出事先備份,mysql提供了mysqldump命令實現了這種備份功能,我們在服務器端下打開命令行(這里仍然使用上一個例子):
mysqldump -u root -p users login>userslogin.sql
這樣便會在文件目錄下找到一個名為userslogin.sql的文件,這個文本文件可以通過vi編輯器等軟件查看,同時也能被mysql數據庫加載恢復成數據庫中的表,方法為(這里假設文件源存放于d:\下):
mysql -u root -p
mysql>use user
mysql>source d:\userslogin.sql
這樣便能快速將一張表導入數據庫,但是同時這么做會覆蓋之前數據庫同名的表。
2.3 從數據庫導出至excel表格
眾所周知,excel與數據庫中表的結構是相差無幾的,因此,我們不由得聯想到是否者之間存在可以互換的方法。mysql在這里再一次展示了它強大的功能,它通過自身的xml編碼實現將數據庫表輸出至任何一個.xls的表格(仍然使用上面的例子):
alter table login character set gb2312 collate gb2312_chinese_ci;
select * into outfile 'login.xls' from login
alter table login character set utf8 collate utf8_general_ci;
這里要經過字符變換才能保證不輸出亂碼。