學(xué)習(xí)MYSQL之認(rèn)真掌握SELECT語句的使用方法,SELECT語句是我們經(jīng)常用到的!應(yīng)該熟練加以掌握!
站在用戶的角度思考問題,與客戶深入溝通,找到玄武網(wǎng)站設(shè)計與玄武網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋玄武地區(qū)。
本文針對MySQL數(shù)據(jù)庫中的SELECT語句快速精細(xì)掌握。
MySQL中SELECT語句的基本語法是:
SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT]
[SQL_BIG_RESULT] [HIGH_PRIORITY]
[DISTINCT|DISTINCTROW|ALL]
select_list
[INTO {OUTFILE|DUMPFILE} 'file_name' export_options]
[FROM table_references [WHERE where_definition]
[GROUP BY col_name,...] [HAVING where_definition]
[ORDER BY {unsighed_integer|col_name|formura} [ASC|DESC],...]
[LIMIT [offset,] rows] [PROCEDURE procedure_name]]
從這個基本語法可以看出,最簡單的SELECT語句是SELECT select_list,實(shí)際上利用這個最簡單的SELECT語句,你也可以完成許多你期待的功能,首先你能利用它進(jìn)行MySQL所支持的任何運(yùn)算,例如:SELECT 1+1,它將返回2;其次,你也能利用它給變量賦值,而在PHP中,運(yùn)用SELECT語句的這種功能,你就可以自由地運(yùn)用MySQL的函數(shù)為PHP程序進(jìn)行各種運(yùn)算,并賦值給變量。在很多的時候,你會發(fā)現(xiàn)MySQL擁有許多比PHP更為功能強(qiáng)大的函數(shù)。
STRAIGHT_JOIN、SQL_SMALL_RESULT、SQL_BIG_RESULT、HIGH_PRIORITY是MySQL對ANSI SQL92的擴(kuò)展。如果優(yōu)化器以非最佳次序聯(lián)結(jié)表,使用STRAIGHT_JOIN可以加快查詢。
SQL_SMALL_RESULT和SQL_BIG_RESULT是一組相對的關(guān)鍵詞。它們必須與GROUP BY、DISTINCT或DISTINCTROW一起使用。SQL_SMALL_RESULT告知優(yōu)化器結(jié)果會很小,要求MySQL使用臨時表存儲最終的表而不是使用排序;反之,SQL_BIG_RESULT告知優(yōu)化器結(jié)果會很小,要求MySQL使用排序而不是做臨時表。
HIGH_PRIORITY將賦予SELECT比一個更新表的語句更高的優(yōu)先級,使之可以進(jìn)行一次優(yōu)先的快速的查詢。
以上四個關(guān)鍵詞的使用方法的確比較晦澀。幸運(yùn)的是,在絕大多數(shù)情況下,在MySQL中我們完全可以選擇不使用這四個關(guān)鍵詞。
DISTINCT、DISTINCTROW對查詢返回的結(jié)果集提供了一個最基本但是很有用的過濾。那就是結(jié)果集中只含非重復(fù)行。在這里要注意的是,對關(guān)鍵詞DISTINCT、DISTINCTROW來說,空值都是相等的,無論有多少NULL值,只選擇一個。而ALL的用法就有畫蛇添足之嫌了。它對結(jié)果集的產(chǎn)生沒有任何影響。
INTO {OUTFILE|DUMPFILE} 'file_name' export_options,將結(jié)果集寫入一個文件。文件在服務(wù)器主機(jī)上被創(chuàng)建,并且不能是已經(jīng)存在的。語句中的export_options部分的語法與用在LOAD DATAINFILE語句中的FIELDS和LINES子句中的相同,我們將在MySQL進(jìn)階_LOAD DATA篇中詳細(xì)討論它。而OUTFILE與DUMPFILE的關(guān)鍵字的區(qū)別是:后前只寫一行到文件,并沒有任何列或行結(jié)束。
Select list:其中可以包含一項(xiàng)或多項(xiàng)下列內(nèi)容:
1、“*”,表示按照create table的順序排列的所有列。
2、按照用戶所需順序排列的列名的清單。
3、可以使用別名取代列名,形式如下:column name as column_heading。
4、表達(dá)式(列名、常量、函數(shù),或以算術(shù)或逐位運(yùn)算符連接的列名、常量和函數(shù)的任何組合)。
5、內(nèi)部函數(shù)或集合函數(shù)。
6、上述各項(xiàng)的任何一種組合。
1 mysql 的存儲過程里,沒有固定的輸出語句,要輸出內(nèi)容,使用 select .. 形式即可;
select var_a;
select column_a from tb_a limit 2;
2 存儲過程里,如果只是輸出內(nèi)容(不進(jìn)行捕獲),用上邊1中的select即可;如果調(diào)用存儲過程后對輸出的值進(jìn)行后續(xù)捕獲,則需使用 out 指定輸出參數(shù);
3 @var_a 表示這是個會話變量,在存儲過程里可以直接設(shè)置值而不用聲明,如
set @var_a = 10;
但并不推薦在存儲過程里使用會話變量(因?yàn)檫@種變量在同一個mysql連接是都是生效的,執(zhí)行完存儲后仍存在),推薦使用聲明式的臨時變量,即以下方式:
declare var_a int;
set var_a = 10;
4 示例
drop PROCEDURE p_a;
create PROCEDURE p_a(out aa int)
begin
declare bb int;
set bb = 10;
select bb;
select * from t_student limit 1;
select CURRENT_DATE();
set aa = bb;
end;
#調(diào)用
set @temp = 50;
call p_a(@temp);
select @temp; #@temp 為會話變量,由存儲過程返回重設(shè)值了。
希望能解決您的問題。
需要的,不可能一邊開發(fā)一邊看手冊,其實(shí)常用的語法也不多,我學(xué)的時候一個星期就記得差不多了
增加一個新的AUTO_INCREMENT整數(shù)列,命名為c。
注意,我們索引了c,因?yàn)锳UTO_INCREMENT柱必須被索引,并且另外我們聲明c為NOT NULL,因?yàn)樗饕说牧胁荒苁荖ULL。
當(dāng)你增加一個AUTO_INCREMENT列時,自動地用順序數(shù)字填入列值。
喜歡的話就認(rèn)真鉆研下去,不喜歡的話就早點(diǎn)放棄,免得浪費(fèi)時間。全世界都在用 mysql,學(xué)它沒錯的。
人生重要之事乃在于有一個明確的方向,以及朝目標(biāo)的前進(jìn)的決心。