|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
DBaaS系统其实具有更大的市场机遇:像其他云服务一样,DBaaS意味着更短的销售周期,更少的启动费用,持续不断的收入,也意味着比之前更多的客户。 本文针对MySQL数据库中的SELECT语句疾速精密把握。
MySQL中SELECT语句的基础语法是:
以下是援用片断:
SELECT[STRAIGHT_JOIN][SQL_SMALL_RESULT]
[SQL_BIG_RESULT][HIGH_PRIORITY]
[DISTINCT|DISTINCTROW|ALL]
select_list
[INTO{OUTFILE|DUMPFILE}file_nameexport_options]
[FROMtable_references[WHEREwhere_definition]
[GROUPBYcol_name,...][HAVINGwhere_definition]
[ORDERBY{unsighed_integer|col_name|formura}[ASC|DESC],...]
[LIMIT[offset,]rows][PROCEDUREprocedure_name]]
从这个基础语法能够看出,最复杂的SELECT语句是SELECTselect_list,实践上使用这个最复杂的SELECT语句,你也能够完成很多你等候的功效,起首你能使用它举行MySQL所撑持的任何运算,比方:SELECT1+1,它将前往2;其次,你也能使用它给变量赋值,而在php中,使用SELECT语句的这类功效,你就能够自在地使用MySQL的函数为PHP程序举行各类运算,并赋值给变量。在良多的时分,你会发明MySQL具有很多比PHP更加功效壮大的函数。
STRAIGHT_JOIN、SQL_SMALL_RESULT、SQL_BIG_RESULT、HIGH_PRIORITY是MySQL对ANSISQL92的扩大。假如优化器以非最好序次联合表,利用STRAIGHT_JOIN能够加速查询。
SQL_SMALL_RESULT和SQL_BIG_RESULT是一组绝对的关头词。它们必需与GROUPBY、DISTINCT或DISTINCTROW一同利用。SQL_SMALL_RESULT告诉优化器了局会很小,请求MySQL利用一时表存储终极的表而不是利用排序;反之,SQL_BIG_RESULT告诉优化器了局会很小,请求MySQL利用排序而不是做一时表。
HIGH_PRIORITY将付与SELECT比一个更新表的语句更高的优先级,使之能够举行一次优先的疾速的查询。
以上四个关头词的利用办法切实其实对照流畅。侥幸的是,在尽年夜多半情形下,在MySQL中我们完整能够选择不利用这四个关头词。
DISTINCT、DISTINCTROW对查询前往的了局集供应了一个最基础可是很有效的过滤。那就是了局会合只含非反复行。在这里要注重的是,对关头词DISTINCT、DISTINCTROW来讲,空值都是相称的,不管有几NULL值,只选择一个。而ALL的用法就有多此一举之嫌了。它对了局集的发生没有任何影响。
INTO{OUTFILE|DUMPFILE}file_nameexport_options,将了局集写进一个文件。文件在服务器主机上被创立,而且不克不及是已存在的。语句中的export_options部分的语法与用在LOADDATAINFILE语句中的FIELDS和LINES子句中的不异,我们将在MySQL进阶_LOADDATA篇中具体会商它。而OUTFILE与DUMPFILE的关头字的区分是:后前只写一行到文件,并没有任何列或行停止。
selectlist:个中能够包括一项或多项以下内容:
1、“*”,暗示依照createtable的按次分列的一切列。
2、依照用户所需按次分列的列名的清单。
3、可使用别号代替列名,情势以下:columnnameascolumn_heading。
4、表达式(列名、常量、函数,或以算术或逐位运算符毗连的列名、常量和函数的任何组合)。
5、外部函数或汇合函数。
6、上述各项的任何一种组合。
FROM:决意SELECT命令中利用哪些表。一样平常都请求有此项,除非select_list中不含列名(比方,只要常量、算术表达式等)。假如表项中有多个表,用逗号将之分隔。在关头词FROM前面的表的按次不影响了局。
表名能够给出相干别号,以便使表达明晰。这里的语法是tbl_name[AS]alias_name。比方:
selectt1.name,t2.salaryfromemployeeast1,infoast2wheret1.name=t2.name与selectt1.name,t2.salaryfromemployeet1,infot2wheret1.name=t2.name是完整等价的。
一切对该表的其他援用,比方在where子句和having子句中,都要用别号,别号不克不及以数字开首。
where子句设置了搜刮前提,它在insert,update,delete语句中的使用办法也与在select语句中的使用办法完整不异。搜刮前提紧跟在关头词where的前面。假如用户要在语句中利用多个搜刮前提,则可用and或or毗连。搜刮前提的基础语法是[not]expressioncomparison_Operatorexpression;[not]expression[not]like“match_string”;[not]expressionis[not]null;[not]expression[not]betweenexpressionandexpression;[not]column_namejoin_operatorcolumn_name;[not]boolean_expression。
and:用来联合两个前提,并在两个前提都是TRUE的时分前往了局。当在统一语句中利用多个逻辑运算符时,and运算符老是最优先,除非用户用括号改动了运算按次。
or:用来联合两个前提,当两个前提中有任一前提是TRUE的时分前往了局。当在统一语句中利用多个逻辑运算符时,运算符or一般在运算符and以后举行运算。固然用户可使用括号改动运算的按次。
between:用来标识局限上限的关头词,and前面跟局限下限的值。局限where@valbetweenxandy包括首尾值。假如between前面指定的第一个值年夜于第二个值,则该查询不前往任何行。
column_name:在对照中利用的列名。在会发生歧义时,必定要指明列地点的表名。
comparison_operator:对照运算符。见下表:
以下是援用片断:
标记意义
=即是
>年夜于
<小于
>=年夜于即是
<=小于即是
!=不即是
不即是
在对照char,varchar型数据时,“<”的意义是更靠近字母表头部,“>”代表更靠近字母表尾部。一样平常来讲,小写字母年夜于年夜写字母,年夜写字母年夜于数字,可是这大概依附于服务器上操纵体系的对照按次。
在对照时,开端的空格是被疏忽的。比方,“Dirk”即是“Dirk”。
在对照日期时,“<”暗示早于,“>”暗示晚于。
在利用对照运算符对照character和datetime数据时,需用引号将一切数据引发来。
expression:多是列名、常数、函数大概是列名或常数的恣意组合,和以算术运算符或逐位运算符毗连的函数。算术运算符以下表所示:
以下是援用片断:
标记意义
+加号
-减号
*乘号
/除号
isnull:在搜刮一个NULL值时利用。
like:关头词,对char、varchar和datetime(不包含秒和毫秒)可使用like,在MySQL中like也能够用在数字的表达式上。
当用户在搜刮datetime型数据时,最好是利用关头词like,由于完全的datetime纪录包括林林总总的日期组件。比方用户在列arrival_time中到场一个值“9:20”,而子句wherearrival_time=“9:20”却没有发明它,由于MySQL把录进的数据转换成了“Jan1,19009:20AM”。但是子句wherearrival_timelike“%9:20%”就可以找到它。
boolean_expression:前往“true”或“false”值的表达式。
match_string:由字符和通配符构成的串,用单引号或双引号引发来,是婚配形式。通配符以下表所示:
以下是援用片断:
标记意义
%0或多个字符的字符串
_任何一单个字符
not:否认任何逻辑表达式,或是关头词,
如like,null,between等。
groupby和having子句在select语句中利用,
能够将表分别成组并前往婚配having子句前提的组。
语法:select语句开首
groupby[all]aggregate_free_expression[,aggregate_free_expression]*
[havingsearch_conditions]
select语句开头
groupby:指定表将分别的组群,假如在select表项中包括汇合函数,则为各组盘算一个总计值。这些总计值的了局以新的列显现,而不是新的行。在having子句顶用户能够援用这些新的总计列。在groupby之前的select_list中可使用avg、count、max、min和sum等汇合函数。表能够被恣意列的组合分组。
all:在了局中包括一切组群的Transact-SQL扩大,这里的一切组群乃至包含那些被where子句所扫除的组群。假如同时利用having子句,将对all的意义举行否认。
aggregate_free_expression:不包括汇合函数的表达式,Transact-SQL扩大同意在用列称号分组的同时,用无汇合函数的表达式分组。
having:为groupby子句设置前提,相似于where为select语句设置前提的办法。having的查找前提能够包含汇合函数表达式。除此以外,它的查找前提与where查找前提不异。
orderby:按列分列了局。对select输入的列能够用列名、列别号或各位置来援用。比方:selectidasmyid,nameasmynamefrommytablegroupbyid、selectidasmyid,nameasmynamefrommytablegroupbymyid、selectidasmyid,nameasmynamefrommytablegroupby1这三句是完整等价的。固然,我们不同意用第三种用法,这将给程序的可读性带来欠好的影响。为了以降序分列,把DESC关头词加到orderby子句中你要排序的列名前。缺省是升序,你也能够用ASC关头词明白指定。
limit子句:用来限定select语句前往的行数。limit取1个或2个数字参数,假如给定2个参数,第一个指定要前往的第一行的偏移量,第二个指定前往行的最年夜数量。初始行的偏移量是0(不是1)。假如给定一个参数,它指出偏移量为0的前往行的最年夜数量。也就是说limit5和limit0,5完整等价。
至于procedure关头词的寄义,我也没弄得太分明,好象是对存储历程的撑持,而MySQL自己不撑持存储历程,看来是为了未来扩大的必要而保存的吧。
这种服务也提供了足够的监控功能来跟踪性能和使用情况,在问题发生时将发出通知并生成一定深度的分析报告。 |
|