mysql-检索数据(select)

一、select的基本检索

1、检索单个列:select columnname from markname;

       并没有过滤以及排序等操作,字节返回。

 

2、检索多个列:select columnname1,columnname2,columnname3 from markname;

        检索多个列,在列名之间加上逗号

 

3、检索所有列:select * from markname;

           *为通配符,匹配所有,使用通配符,返回表中所有列,列的顺序一般是列在表定          义中出现的顺序

 

4、检索不同的行:select distinct columnname from markname;

        使用distinct关键字,使Mysql只返回不同的值,也就是去重。

        使用distinct还可以应用于多列,诸如:

        select distinct columnname1,columnname2 from markname;

        那么以上语句的结果是除非指定的两个列内容都不同,后者所有行都将被检索出来(即必须所有列中的内容都不同才会被去重)

 

5、限制结果:select columnname from markname limit num;

        使用以上语句返回不多于num行的数据。但是如果你想得到下一个5行,可以指定检索的开始行和行数:

       select columnname from markname limit num1,num2;

       从第num1行开始,去num2行

       也可以这样:

       select columnname form markname limit num1 offset num2;

          从第num2行开始,取num1行

 

6、使用完全限定的表名:

           select markname.columnname from markname;

       使用限定的列名可以避免同名带来的问题

 

二、排序检索数据order by

    使用order by关键字,取一个或多个列的名字,据此对输出进行排序,如下:

    select columnname from markname order by columnname;

    这条语句指定了对columnname进行排序(字符串的话按字母顺序排)

    也可以按照多个列排序,多个列之间用逗号隔开即可。如下:

    select columnname1,columnname2,columnname3 from markname order by  columnname1,columnname2;

    上述语句只会在columnname1相同时才会按columnname2进行排序。

 

    默认为升序(ASC),也可以调成降序(DESC)如下:

    select columnname1,columnname2,columnname3 from markname order by columnname1 desc,columnname2;(对columnname1进行降序排序,对columnname2进行默认的升序排序)

    select columnname1 from mark order by columnname1 desc limit 1;

    仅仅返回一行最少的那一个。

 

三、过滤数据where

   我们可以再select语句中,通过在where子句中使用指定的搜索条件进行过滤:

   select columnname1,columnname2 from markname where columnname1=1.0;

   该语句可以从mark表中检索出两个列,但不会返回所有行,仅仅返回columnname为1.0的数据。

   在同时使用order by 和where子句时,应该让order位于where之后。

   Mysql支持的所有条件操作符:

    操作符                                                        说明

     =                                                             等于

     <>                                                         不等于

       !=                                                         不等于

        <                   小于

       <=                小于等于

     BETWEEN           在两者之间 

 

   1、检查单个值

    select prod_name,prod_price from products where prod_name='Fuses';

    上述语句是通过检查prod_name='Fuses',返回prod_name的值为Fuses的一行数据,Mysql在执行匹配时,数据是区分大小的。

 

   2、不匹配检查:

    select vend_id,prod_name form products where vend_id<>1003;(或使用!=)

 

   3、范围值检查:为了检查某个范围的值,我们使用between...and操作符,他需要两个值,即范围的开始和结束值,如下:

    select prod_name,prod_price from products where prod_proce between 5 and 10;

 

   4、空值检查:在创建表时,表设计人员可以指定其中的列是否可以不包含值,在一个列不包含值时,称其为包含空值NULL。

    select prod_name from products where prod_price is null;(用is 不用=)

 

   5、我们可以使用以AND子句或OR子句的方式使其具备多个where子句。

     AND(与操作符):为了通过不止一个列进行过滤,可以使用AND操作符和where子句附加条件,表示多个条件必须同时满足如下:

    select prod_id,prod_price,prod_name from products where vend_id =1003 and prod_price <=10;

    OR同理

    

   6、计算次序:where可以包含任意数目的and和or操作符,并且允许两者结合以进行复杂和高级的过滤。

    但是组合的时候会出现次序问题,and的优先级高于or。

    可以利用括号来改变计算的优先级关系

 

   7、in操作符:in操作符从来指定条件范围,范围中的每个条件都可以进行匹配,in取合法值的由逗号分割的清单,全都括在括号中。 

    select prod_name,prod_price from products where vend_id in(1002,1003) order by prod_name;

    in中还可以包含其他的select语句,使得更动态的建立where子句。

 

   8、not操作符:用它来否定它之后说跟的任何条件

    select rod_name,prod_price form products where vend_id not in(1002,1003) order by prod_name;

    与7中的in功能相反

  

四、用通配符进行过滤

  1、like操作符:通配符用来匹配值的一部分的特殊字符。通配符本身实际是SQL的where子句中有特殊含义的字符,sql支持的通配符如下:

    a.百分号(%)通配符:%表示任何字符出现的任意次数。

      select prod_id,prod_name from products where prod_name like 'jet%';

    以上语句使用了搜索模式‘jet%’,在执行这条子句时,将检索任意jet开头的词,%告诉mysql接收jet之后的任意字符,不管他有多少个字符。%区分大小写。

    %123:表示以123结尾的;   %123%:表示词中包含123的;  123%:以123开头的

 

  2、下划线_通配符:

    它只陪陪单个字符而不是多个字符。

    select prod_id,prod_name from products where prod_name like '_ton anvil'

    可以匹配到prod_name中带有?ton anvil的数据

  

posted @ 2018-01-24 16:24  彩电  阅读(474)  评论(0编辑  收藏  举报