Chinaunix首页 | 论坛 | 博客
  • 博客访问: 595381
  • 博文数量: 136
  • 博客积分: 893
  • 博客等级: 中士
  • 技术积分: 1001
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-31 09:18
个人简介

生命可以终止,梦想不会!

文章分类

全部博文(136)

文章存档

2016年(4)

2015年(2)

2014年(5)

2013年(7)

2012年(118)

分类:

2012-08-31 15:32:02

原文地址:mysql - select总结 作者:licong0527

    最近学习mysql, 回陆续整理我的学习笔记。没有什么技术难度,不过却在以后可以非常方便的使用。
    
    select语句:从表中检索一个或多个数据列。使用select时,要给出两个信息--选择什么以及从什么地方选择

    下面使用column_name代表列名,table代表表名:

      1.  select column_name from table;                                          //选择所有符合要求(单列)的行
      2.  select column_name, column_name1... from table;               //选择所有符合要求(多列)的行
      3.  select * from table;                                                            //选择所有符合要求(所有列)的行

      4.  select distinct column_name from table;                              //选择所有符合要求的,但不同的行  
     上面与1的区别是:如果选择某列的结果中有相同的行,可以用distinct删除重复的,只显示不同的行
      
      5.  select column_name from table limit number;                     //限制结果:选择符合要求的前number个结果
      6.  select column_name from table limit start_row, number;     //限制结果:选择符合要求的,从start_row行开始的number个结果
 
      7.  select table.column_name from database.table;                  //完全限定的表名、列名

      8.  select column_name from table order by column_name1;     //选择所有符合要求的行,并对结果按column_name1进行升序排序(默认)。column_name1可以等于column_name
      9.  select column_name from table order by column_name1, column_name2...;    //在8的基础上,对相同的行的结果按照column_name2进行升序排序(默认),以此类推

    10.  select column_name from table order by column_name1 desc; //选择所有符合要求的行,并对结果按column_name1进行降序排序
    11.  select column_name from table order by column_name desc, column_name2 desc;   //如果要对多个关键字降序排序,需要在每个关键字后面加上desc

    12.  select column_name from table order by column_name1 limit number;           //按照column_name1进行升序排序,并取结果的前number个数据
    13.  select column_name from table order by column_name1 desc limit number;           //按照column_name1进行降序排序,并取结果的前number个数据
      12、13两个可以用于取排序后最高或最低的结果。


    使用select语句的where子句指定搜索条件(如果需要排序,order by应该在where子句之后):

    where子句关系操作符:
    1.  select column_name from table where column_name1 = value;     //搜索指定列column_name1的值为value的行
    2.  select column_name from table where column_name1 != value;    //搜索指定列column_name1的值不为value的行
    上述1和2中的“=”和“!=”可以根据需求替换为“<>(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)”。
    3.  select column_name from table where column_name1 between value1 and value2;          //搜索指定列column_name1的值在范围value1到value2之间的行

    组合where子句(op为上述的子句操作符):
    1.  select column_name from table where column_name1 op1 value1 and column_name2 op2 value2;        //搜索指定列column_name1的值满足op1操作,并且column_name2的值满足op2操作,二者必须同时满足。and子句可以根据需求扩展为多个
    2.  select column_name from table where column_name1 op1 value1 or column_name2 op2 value2;           //搜索指定列column_name1的值满足op1操作,column_name2的值满足op2操作,二者中任意一个满足即可。or子句可以根据需求扩展为多个

    3.  select column_name from table where column_name1 op1 value1 or column_name2 op2 value2 and column_name3 op3 value3;                 //搜索指定列column_name2的值满足op2操作,并且column_name3的值满足op3操作,或者column_name1的值满足op1操作
    特别注意:and的优先级高于or, 所以先进行and操作,再进行or操作。
                    如果我们希望找出满足如下条件的结果:column_name1或column_name2中任意值成立,并且满足column_name3的值成立,这时,我们需要通过添加()来提高or的优先级,如下:
         select column_name from table where ( column_name1 op1 value1 or column_name2 op value2 ) and column_name3 op3 value3;

    4.  select column_name from table where column_name1 in ( value1, value2 );              //搜索指定列column_name1的值等于value1或value2,括号内为所有要进行匹配的清单
    in操作符等价于or操作,上式等价于:
         select column_name from table where column_name1 = value1 or column_name2 = value2;
    
    5.  select column_name from table where column_name1 not in (value1, value2 );           //搜索指定列column_name1的值不等于value1或value2, 括号内为所有要进行匹配的清单,not经常用于复杂的筛选中

    where中使用like以及通配符
    1.  select column_name from table where column_name1 like '...%';                   //搜索指定列column_name1中值以...(已知要匹配的内容)开头的行,%表示任何字符出现任意次数,%可以出现在要匹配内容的任意位置
    2.  select column_name from table where column_name1 like '_...';                      //搜索指定列column_name1中值以...(已知要匹配的内容)结尾的行,_表示任何字符出现一次,_可以出现在要匹配内容的任意位置
    _只匹配单个字符,而%可以匹配多个字符
    
    特别注意:由于一般搜索匹配指定了值,而通配符的值时未知的。所以通配符搜索的处理一般要比其他搜索所花时间更长,下面是一些使用通配符的技巧:
  • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
  • 在确实需要使用通配符时,除非绝对有必要,否则不要把通配符用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来时最慢的。
  • 自习注意通配符的位置。如果坊错位置,可能不会返回想要的数据。

阅读(849) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~