SQL基本语法

发布 2021-05-11 05:20:28 阅读 9007

select[top 正整數] [distinct | all][ 欄位。

from[資料表,..

where條件式 ]

group by[欄位,..

h**ing條件式 ]

order by[ 欄位 desc | asc ,.

limit[start,] count ]

] 內的代表不一定要有,但在select之後的欄位顯示,如果沒有設定欄位,則一定要填上*。

代表全部。強烈建議,一定要下where語法,在一般的小資料庫(例:北風資料庫)中,不下where不會有問題。

但在資料破萬、十萬以上的資料庫中,會影響到伺服器效能。

嚴重時,會造成伺服器系統當機,需重新開機。

如果真的有需要執行會影響到效能的指令,可在離峰時期執行,或將資料copy至另一台電腦,於該電腦執行。亦可將sql指令分解拆散,縮小範圍,改由程式一句一句慢慢執行,將伺服器的cpu使用量分散開來。

一個完整sql指令文字長度,盡量避免超過255個字元。

若欄位名稱為sql的關鍵字,可以使用 [ 將欄位名稱放在其中。

舉凡資料表,大致上都會有一個隱性的欄位,只要不對資料表做排序,一般都會先以該欄位做排序。

該欄位是以採用先進先出的方法做處理。除了特定資料庫可以呼叫出來,一般資料庫都無法顯現出來。

查詢資料時,盡量在最少的查詢次數中,查到最大且最有效的資料,除非特殊情況,否則盡量使用這個原則。

善用case...when...then語法,可以增加查詢的效率,亦同時減少查詢的次數。

查詢資料表,以pk為第一優先,再來是index,再來是fk,其餘放最後。

當where的條件式很多時,善用 ( 可以提高查詢的效率。

盡量避免null值,null值在查詢時,容易產生一些不明的錯誤,或讓資料產生偏差。

all:取得全部記錄(預設)

distinct:去除重覆記錄。

條件式:h**ing 通常是配合 group by ,在group by後,找出符合的條件內容,專門用統計函式的結果值作為條件。

where 則只是單純的在 group by 前,找出符合條件的內容,在這不能使用統計函數。

下條件式時,盡量以index欄位為主,提高效率。

同時避免對該欄位做函式變化。

例:設定name欄位為index,並對該欄位做where

like '一%'

like '一%'

此兩種方法,第一種會比第二種有效率,且省時間。

使用第二種方法時,資料庫會將該欄位不當做index,反而會增加select的負擔。

排序:desc:由大排到小。

asc:由小排到大(預設)

limit語法,只限定在postgre sql和mysql中使用,類似top

但可設定起始記錄。

select * from a limit 2, 3

意即為由第二筆記錄開始,往下抓三筆,只會顯示出此三筆記錄。

select * from a order by limit 3

意即只會抓排序後的前三筆記錄。

結合(合併)資料表。

合併資料表有兩種方法,一種使用where,一種使用join。

where的方法又稱為外結合,會受到資料庫不同,而受限無法使用。

join因為通用語法(ansi/sql92),且可定義合併時的先後順序和比重,以便達成最佳化,所以一般較推薦使用此方法。

join在部份資料庫系統會無法使用,目前老舊db2無法使用!!!

where無法像join一般,可以定義合併時的權重、先後順序,但where並不受限於資料庫。

不過依舊要注意,有些資料庫,並無法使用完整的where合併語法。

在oracle中使用where做合併時,需注意不使用 * 而是使用+)

在一些老舊的資料庫中,會無法使用join語法,亦無在使用左(右)合併等語法。)

同時,where中的左、右合併,亦無法使用。)

目前得知在老舊的db2中,有此問題存在)

當左右點併語法無法使用時,可使用子查詢來替代語法;雖然沒有合併語法完整,但所取得的資料範圍,也是相同的。)

語法一:select

from table1 , table2

where

語法二:select

from table1 inner join table2 on

在合併資料表中,有五種合併結構。

join合併時,以左右兩側都相等,才結合取出,取得的筆數為最少。

select , from a inner join b on

select , from a , b where

join以左邊的資料表為主,可查出右邊的資料表為null的記錄。

select , from a left join b on

select , from a , b where

join以左邊的資料表為主,可查出左邊的資料表為null的記錄。

select * from a right join b on

select , from a , b where

outer join

同時取得左右側資料表的資料,需指定做連結的欄位,左右兩側都有可能有null記錄。

select * from a full outer join b on

where無此方法)

join(不建議使用,此方法為挑戰電腦極限,取出來的資料也較無意義)

同時取得左右側資料表的資料,不需指定連結的欄位,取得總筆數=a筆數*b筆數。

select * from a cross join b

select , from a , b

三個資料表做結合:

select * from (a left join b on right join c on

四個資料表做結合:

select * from d inner join ((a left join b on right join c on on

合併時的小技巧。

select , from a inner join b on inner c on >0and like 'd%'

可以修改為下面的句子,會較有效率。

select , from a inner join b on >0inner c on where like 'd%'

在合併時,就同時去除不合的記錄,以提高合併時的效率。

合併資料表。

合併時有三種結構:聯集(union)、差集(difference)、交集(intersection)

聯集(union):

select from a union select from b 此語法會將a和b的資料全秀出來。

差集(difference):

select from a except select from b (db2,postgre sql)

select from a minus select from b (oracle)

此語法會將沒在b出現過的全秀出來。

可用子查詢來取代。

select * from a where not in(select from b)

交集(intersection):

select from a intersect select from b

此語法會將有在b出現過的全秀出來。

可用子查詢來取代。

select * from a where in(select from b)

子查詢。子查詢在資料筆數過多的資料庫中,是一個可以提高效率的語法。

同時用法也很多種,需視使用者所要的資料而做變化。

select * from in (select from b where >50)

select * from (select , from a where >100) as atemp

inner join (select from b where between 1 and 60) as btemp on

先降低記錄數量,縮小範圍,再做結合,會比一開始就做結合還有效率。

在oracle中,子查詢是相當好用的語法,可以減少db server的負擔。

在一般db中,子查詢的條件只能是一個,但在oracle中,子查詢的條件可以不止一個。

例:select * from a where ( in (select from b)

這個法語可以一次找出在a table中,id和dept同時和b table相同的記錄。

欄位別名。select as [編號] from a

select [學生資料表].id as [編號] from a as [學生資料表]

select [學生資料表].id [編號] from a [學生資料表]

select [編號]=[學生資料表].id from a [學生資料表]

別名不建議使用中文,請盡量使用英文,亦避免使用數字做為開頭。

同時避使用特殊字元,例》<◎

在此使用中文是為了明顯區分。

group by 分組。

做group by時,如果有欄位沒有呈現在group by裡面,但又想要將資料呈現在畫面時。

可以使用max、min等函數,將欄位呈現出來。

下列三種,只能在oracle和db2中使用。

依rollup中的內容順序,列出各小計和總合計。

select 月,商品,sum(數量) from [order] group by rollup(月,商品)

依cube中的內容順序,列出各小計和總合計。

select 月,商品,sum(數量) from [order] group by cube(月,商品)

依grouping sets中的內容順序,列出總合計。

select 月,商品,sum(數量) from [order] grouping sets((月,商品),(

排序。select , as [allprice] from a order by [allprice]

select , as [allprice] from a order by 3

排序時,欄位名可以整數取代,此整數同欄位的順序。

使用select將資料copy至新的資料表或其他儲存媒體。

限定postgre sql 、 sql server 、 ms access使用。

select * into [new_table] from a

select * into [excel 8.0;database= from a

select * into [驅動程式;database=檔案名稱。副檔名] from a

bcp匯入匯出備份指令,限定sql server

bcp datafile

SQL基本语法

创建 sql语言中的createtable语句被用来建立新的数据库 create table语句的使用格式如下 create table tablename column1 data type,column2 data type,column3 data type 现举例如下 create tabl...

SQL语言基本语法

sql语言是用于查询关系数据库的标准语言,它包括若干关键字和一致的语法,便于数据库元件 如表 索引 字段等 的建立和操纵。sql语言有四种基本的对数据表操作的语句 insert,update,delete和select语句,下面将逐一介绍。1.insert语句。insert into table n...

sql查询基本语法

1 计算列。select from emp 表示所有的。from emp 表示从emp表查询。select empno,ename from emp select ename,sal 12 as 年薪 from emp as可以省略,记住 年薪 不要写成 年薪 也不要写成年薪,方便移植。select...