如何使用SQL查詢語句
一、 簡單查詢 簡單的Transact-SQL查詢只包括選擇列表、FROM子句和WHERE子句。
它們分別說明所查詢列、查詢的表或視圖、以及搜索條件等。例如,下面的語句查詢testtable表中姓名為“張三”的nickname字段和email字段。
SELECT nickname,emailFROM testtableWHERE name='張三'(一) 選擇列表選擇列表(select_list)指出所查詢列,它可以是一組列名列表、星號、表達式、變量(包括局部變量和全局變量)等構成。 1、選擇所有列例如,下面語句顯示testtable表中所有列的數據:SELECT *FROM testtable 2、選擇部分列并指定它們的顯示次序查詢結果集合中數據的排列順序與選擇列表中所指定的列名排列順序相同。
例如:SELECT nickname,emailFROM testtable 3、更改列標題在選擇列表中,可重新指定列標題。定義格式為:列標題=列名列名 列標題如果指定的列標題不是標準的標識符格式時,應使用引號定界符,例如,下列語句使用漢字顯示列標題:SELECT 昵稱=nickname,電子郵件=emailFROM testtable 4、刪除重復行SELECT語句中使用ALL或DISTINCT選項來顯示表中符合條件的所有行或刪除其中重復的數據行,默認為ALL。
使用DISTINCT選項時,對于所有重復的數據行在SELECT返回的結果集合中只保留一行。 5、限制返回的行數使用TOP n [PERCENT]選項限制返回的數據行數,TOP n說明返回n行,而TOP n PERCENT時,說明n是表示一百分數,指定返回的行數等于總行數的百分之幾。
例如:SELECT TOP 2 *FROM testtableSELECT TOP 20 PERCENT *FROM testtable(二)FROM子句 FROM子句指定SELECT語句查詢及與查詢相關的表或視圖。在FROM子句中最多可指定256個表或視圖,它們之間用逗號分隔。
在FROM子句同時指定多個表或視圖時,如果選擇列表中存在同名列,這時應使用對象名限定這些列所屬的表或視圖。例如在usertable和citytable表中同時存在cityid列,在查詢兩個表中的cityid時應使用下面語句格式加以限定:SELECT username,citytable。
cityidFROM usertable,citytableWHERE usertable。cityid=citytable。
cityid在FROM子句中可用以下兩種格式為表或視圖指定別名:表名 as 別名表名 別名(二) FROM子句FROM子句指定SELECT語句查詢及與查詢相關的表或視圖。 在FROM子句中最多可指定256個表或視圖,它們之間用逗號分隔。
在FROM子句同時指定多個表或視圖時,如果選擇列表中存在同名列,這時應使用對象名限定這些列所屬的表或視圖。例如在usertable和citytable表中同時存在cityid列,在查詢兩個表中的cityid時應使用下面語句格式加以限定:SELECT username,citytable。
cityidFROM usertable,citytableWHERE usertable。cityid=citytable。
cityid在FROM子句中可用以下兩種格式為表或視圖指定別名:表名 as 別名表名 別名例如上面語句可用表的別名格式表示為:SELECT username,b。 cityidFROM usertable a,citytable bWHERE a。
cityid=b。cityidSELECT不僅能從表或視圖中檢索數據,它還能夠從其它查詢語句所返回的結果集合中查詢數據。
例如:SELECT a。au_fname+a。
au_lnameFROM authors a,titleauthor ta(SELECT title_id,titleFROM titlesWHERE ytd_sales>10000) AS tWHERE a。au_id=ta。
au_idAND ta。 title_id=t。
title_id此例中,將SELECT返回的結果集合給予一別名t,然后再從中檢索數據。
如何使用SQL語言實現各種數據庫查詢操作
我們在數據庫中創建名為Store_Information的如下數據表。
Store_Information Store_Name Sales Date Los Angeles $1500 Jan-10-2000 San Diego $250 Jan-11-2000 Los Angeles $300 Jan-12-2000 Boston $700 Jan-12-2000 SQL語言中用于數據庫查詢的最簡單的命令就是SELECT…FROM,語法格式為: SELECT "column_name" FROM "table_name" 例如,如果我們希望查詢Store_Information數據表中所有的商店名稱時,可以使用如下命令: SELECT store_name FROM Store_Information 查詢結果顯示為: Store_Name Los Angeles San Diego Los Angeles Boston 如果用戶希望一次查詢多個字段,可以將所要查詢的字段名稱依次加入SELECT關鍵字之后,中間用“,”隔開即可。 DISTINCT SELECT關鍵字支持用戶查詢數據表中指定字段的所有數據,但是這樣有時就會不可避免的出現重復信息。
如果用戶希望只查詢那些具有不同記錄值的信息的話,可以使用SQL語言的DISTINCT關鍵字。語法格式如下: SELECT DISTINCT "column_name" FROM "table_name" 例如,我們可以使用以下命令查詢Store_Information數據表具有不同記錄值的所有記錄。
SQL語句如何更改數據庫名
一、更改數據庫名 sp_renamedb 更改數據庫的名稱。
語法 sp_renamedb [ @dbname = ] ' old_name ' , [ @newname = ] ' new_name ' 參數 [ @dbname = ] ' old_name ' 是數據庫的當前名稱。 old_name 為 sysname 類型,無默認值。
[ @newname = ] ' new_name ' 是數據庫的新名稱。 new_name 必須遵循標識符規則。
new_name 為 sysname 類型,無默認值。 返回代碼值 0 (成功)或非零數字(失敗) 權限 只有 sysadmin 和 dbcreator 固定服務器角色的成員才能執行 sp_renamedb。
示例 下例將數據庫 accounting 改名為 financial。 EXEC sp_renamedb ' accounting ' , ' financial ' 二、更改表名或列名 sp_rename [ @objname = ] ' object_name ' , [ @newname = ] ' new_name ' [ , [ @objtype = ] ' object_type ' ] ///////////////////////////////////////////// A。
重命名表下例將表 customers 重命名為 custs。EXEC sp_rename ' customers ' , ' custs ' B。
重命名列下例將表 customers 中的列 contact title 重命名為 title。 EXEC sp_rename ' customers。
[contact title] ' , ' title ' , ' COLUMN '。
如何在mybatis中調試查看生成的sql語句
用過Hibernate的人都知道,hibernate 是可以配置 show_sql 顯示 自動生成的SQL 語句,用format_sql 可以格式化SQL 語句,但如果用 mybatis 怎么實現這個功能呢, 在網上搜索了下,基本都是通過配置日志來實現的,比如配置我們最常用的 *ties 來實現。
*ties 內容
*tegory=info, stdout , R
*=*eAppender
*=*nLayout
*sionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
*er.R=*ollingFileAppender
*=D:/my_*
*=*nLayout
*sionPattern=%d-[TS] %p %t %c - %m%n
*=debug
*DataSource=debug
*Runner=debug
*ClientDelegate=debug
*tion=debug
*ent=debug
*edStatement=debug,stdout
Oracle數據庫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創建的索引。
Select * from employee where first_name ='Beill' and last_name ='Cliton'; 遇到下面這種情況又如何處理呢?如果一個變量(name)中存放著Bill Cliton這個員工的姓名,對于這種情況我們又如何避免全程遍歷,使用索引呢?可以使用一個函數,將變量name中的姓和名分開就可以了,但是有一點需要注意,這個函數是不能作用在索引列上。 下面是SQL查詢腳本: select * from employee where first_name = SUBSTR('&&name',1,INSTR('&&name',' ')-1) and last_name = SUBSTR('&&name',INSTR('&&name',' ')+1) 3。
帶通配符(%)的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')。