MySQL进阶_SELECT篇

  源头:网海拾贝




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,实践上运用这个最复杂的SELECT语句,你也可以完成良多你等待的恪守,首先你能运用它终了MySQL所支撑的任何运算,例如:SELECT 1 1,它将前往2;其次,你也能运用它给变量赋值,而在PHP中,运用SELECT语句的这种恪守,你就可以自由地运用MySQL的函数为PHP措施终了各种运算,并赋值给变量。在良多的时刻,你会发现MySQL拥有良多比PHP更为恪守强盛的函数。

STRAIGHT_JOIN、SQL_SMALL_RESULT、SQL_BIG_RESULT、HIGH_PRIORITY是MySQL对ANSI SQL92的扩展。若是优化器以非最佳次序递次结合表,运用STRAIGHT_JOIN可以加快盘查。

SQL_SMALL_RESULT和SQL_BIG_RESULT是一组相对的关键词。它们必需与GROUP BY、DISTINCT或DISTINCTROW一同运用。SQL_SMALL_RESULT见知优化器下场会很小,要求MySQL运用姑且表存储终极的表而不是运用排序;反之,SQL_BIG_RESULT见知优化器下场会很小,要求MySQL运用排序而不是做姑且表。

HIGH_PRIORITY将付与SELECT比一个更新表的语句更高的优先级,使之可以终了一次优先的快速的盘查。
以上四个关键词的运用方法几乎比拟流利。幸运的是,在绝年夜少数状态下,在MySQL中我们完全可以选择不运用这四个关键词。
DISTINCT、DISTINCTROW对盘查前往的下场集供给了一个最根底但是很有效的过滤。那便是下场齐集只含非反复行。在这里要详细的是,对关键词DISTINCT、DISTINCTROW来说,空值都是相称的,无论有几多NULL值,只选择一个。而ALL的用法就有弄巧成拙之嫌了。它对下场集的孕育发作没有任何影响。

INTO {OUTFILE|DUMPFILE} 'file_name' export_options,将下场集写入一个文件。文件在效劳器主机上被竖立,并且不克不及是已经存在的。语句中的export_options部分的语法与用在LOAD DATAINFILE语句中的FIELDS和LINES子句中的不异,我们将在MySQL进阶_LOAD DATA篇中过细批评辩说它。而OUTFILE与DUMPFILE的关键字的区别是:后前只写一行到文件,并没有任何列或行终了。

select list:其中可以包孕一项或多项下列内容:
1、“*”,表示依照create table的顺序布列的完整绝对列。
2、依照用户所需顺序布列的列名的清单。
3、可以运用别号替换列名,方法如下:column name as column_heading。
4、表达式(列名、常量、函数,或以算术或逐位运算符毗邻的列名、常量和函数的任何组合)。
5、内部函数或聚集函数。
6、上述各项的任何一种组合。

FROM:决意SELECT命令中运用哪些表。日常寻常都要求有此项,除非select_list中不含列名(例如,只要常量、算术表达式等)。若是表项中有多个表,用逗号将之分隔隔离分散。在关键词FROM前面的表的顺序不影响下场。

表名可以给出相干别号,以便使表达了了。这里的语法是tbl_name [AS] alias_name。例如:
select t1.name,t2.salary from employee as t1,info as t2 where t1.name=t2.name与select t1.name,t2.salary from employee t1,info t2 where t1.name=t2.name是完全等价的。

完整绝对对该表的其他援用,例如在where子句和having子句中,都要用别号,别号不克不及以数字扫尾。

where子句设置了搜刮条件,它在insert,update,delete语句中的操纵方法也与在select语句中的操纵方法完全不异。搜刮条件紧跟在关键词where的前面。若是用户要在语句中运用多个搜刮条件,则可用and或or毗邻。搜刮条件的根底语法是[not] expression comparison_operator expression;[not] expression [not] like “match_string”;[not] expression is [not] null;[not] expression [not] between expression and expression;[not] column_name join_operator column_name;[not] boolean_expression。

and:用来结合两个条件,并在两个条件都是TRUE的时刻前往下场。当在分比方语句中运用多个逻辑运算符时,and运算符总是最优先,除非用户用括号改动了运算顺序。

or:用来结合两个条件,当两个条件中有任一条件是TRUE的时刻前往下场。当在分比方语句中运用多个逻辑运算符时,运算符or但凡在运算符and之落后走运算。固然用户可以运用括号改动运算的顺序。

between:用来标识范围下限的关键词,and前面跟范围下限的值。范围where @val between x and y包孕首尾值。若是between前面指定的第一个值年夜于第二个值,则该盘查不前往任何行。

column_name:在比拟中运用的列名。在会孕育发作比方义时,肯定要指明列地址的表名。

comparison_operator:比拟运算符。见下表:
标识表记标帜 意义
= 便是
> 年夜于
< 小于
>= 年夜于便是
<= 小于便是
!= 不便是
<> 不便是

在比拟char,varchar型数据时,“<”的意思是更接近字母表头部,“>”代表更接近字母表尾部。日常寻常来说,小写字母年夜于年夜写字母,年夜写字母年夜于数字,但是这可以寄予于效劳器上操纵体系的比拟顺序。
在比拟时,末端的空格是被疏忽的。例如,“Dirk”便是“Dirk ”。
在比拟日期时,“<”表示早于,“>”表示晚于。

在运用比拟运算符比拟character和datetime数据时,需用引号将完整绝对数据惹起来。

expression:可所以列名、常数、函数年夜约是列名或常数的随便组合,以及以算术运算符或逐位运算符毗邻的函数。算术运算符如下表所示:
标识表记标帜 意义
加号
- 减号
* 乘号
/ 除号
is null:在搜刮一个NULL值时运用。

like:关键词,对char、varchar和datetime(不包孕秒和毫秒)可以运用like,在MySQL中like也可以用在数字的表达式上。
当用户在搜刮datetime型数据时,最好是运用关键词like,因为齐备的datetime记载包孕各种各式的日期组件。例如用户在列arrival_time中加入一个值“9:20”,而子句where arrival_time=“9:20”却没有发现它,因为MySQL把录入的数据转换成了“Jan 1,1900 9:20AM”。但是子句where arrival_time like“%9:20%”就能找到它。
boolean_expression:前往“true”或“false”值的表达式。
match_string:由字符和通配符组成的串,用单引号或双引号惹起来,是婚配情势。通配符如下表所示:
标识表记标帜 意义
% 0或多个字符的字符串
_ 任何一单个字符




版权声明: 原创作品,许愿转载,转载时请务必以超链接方法标明文章 原始来由 、作者信息和本声明。否则将穷究功令责任。

posted @ 2011-03-07 20:22  蓝色的天空III  阅读(235)  评论(0编辑  收藏  举报