MySQL必知必会笔记(二)SELECT语句 检索 排序 过滤 通配符搜索 正则表达式搜索

第四章 检索数

    检索单列

         SELECT columnOne FROM table;

    检索多列

         SELECT columnOne,columnTwo,columnThire FORM table;

    检索所有列

         SELECT * FROM products;         //一般,除非你确实需要表中的每个列,否则最好不要用*通配符

    检索不同的行 

        检索出来的数据不重复DISTINCT关键字,顾名思义返回不同的值

           SELECT DISTINCT columnOne FROM table  //检索出来的columnOne没有重复值

        DISTINCT关键字应用于所有列而不仅是前置它的列

        SELECT DISTINCT vend_idprod_price......要求vend_idprod_price这两列都不出现重复的

   限制结果条数

       sql语句后面加入下面sql语句

        LIMIT 5          显示结果的前5

        LIMIT 3,4        从行3开始的后4

        LIMIT 4 OFFSET 3 从行3开始的后4

第五章 排序检索数据

  子句     Sql语句是由子句构成,有些子句是必须的,有些事可选的。一个子句通常是由一个关键字和所提供的数据组成。

  按单列排序

 SELECT columnOne FROM table ORDER BY columnOne;  

 SELECT columnOne FROM table ORDER BY columnTwo //用非检索列也是可以的,如根据columnTwo

  按多列排序

 SELECT columnOne,columnTwo,columnThire FROM products ORDER BY prod_price,prod_name;

 排序是先根据前面的columnOne排序 ,如果一样再根据后面的columnTwo排序

  指定排序方向

 ASC 升序 默认    DESC 降序   关键字仅作用到直接位于前面的列名

 SELECT columnOne,columnTwo,columnThire FROM table ORDER BY columnOne ASC, columnTwo      DESC;   //先按columnOne正排序 再按columnTwo倒序排序

第六章 过滤数据

    使用WHERE 语句

        SELECT columnOne,columnTwo FROM table WHERE columnOne = 3;

WHERE子句操作符

        操作符           说明

        =                等于

        <>               不等于(数字比较)

        !=               不等于(数字和字符串比较)

        <                小于

        >                大于

        <=               小于等于

        >                大于

        >=               大于等于

BETWEEN 在指定的两个指之间 必须指定2个值。这两个值必须使用AND连接

        SELECT columnOne,columnTwo, FROM table WHERE columnOne BETWEEN 3 AND 8;  // 检索columnOne值为38之间的行

空值检查

        SELECT 语句中有一个子句检查具有NULL值的列,IS NULL子句。

        SELECT columnOne FROM table WHERE columnOne IS NULL  //检索 columnOne值为NULL的行

        注意:在数据库中NULL是不能被匹配和不匹配的语句找出来,所以一定要注意表中是否存在NULL值。

 

第七章 数据过滤

    组合WHERE子句

    组合方式

AND组合  OR组合

        必须满足所有条件

           SELECT columnOne,columnTwo,columnThire FROM table WHERE columnOne = 2009 AND columnTwo <= 10;     //检索columnOne =2009  columnTwo <= 10 的行

        满足任意一个条件

           SELECT columnOne,columnTwo,columnThire FROM table WHERE columnOne = 2009 OR columnTwo <= 10;//检索columnOne =2009  columnTwo <= 10 的行

    计算次序

        先计算AND再计算OR,不要过分依赖默认计算次序,可以使用括号改变计算次序,它能消除歧义。

    IN操作符    IN操作符用来指定范围,范围中的每个条件进行匹配。IN取合法值的逗号分隔的清单。

        SELECT columnOne,columnTwo FROM table WHERE columnOne IN (1002,1005,1006) ORDER BYcolumnTwo;     //检索columnOne100210051006的行并且按columnTwo分组

    IN操作符完成与OR相同的功能,优点如下:

        1 使用长的合法选项清单时,IN操作符的预防更清楚且直观

        2 使用IN时,计算的次序更容易管理(以为使用的操作符更少)

        3 IN操作符一般比OR操作符执行更快

        4 IN操作符最大的优点可以包含其他SELECT语句,使得能够更动态的创建WHERE子句。

    NOT操作符      WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件

        SELECT columnOne,columnTwo FROM table WHERE columnOne NOT IN (1002,1005,1006) ORDER BYcolumnTwo;     //检索columnOne100210051006的行并且按columnTwo分组

    MySQL支持使用NOTINBETWEENEXISTS子句取反。

 

第八章 用通配符进行过滤

    LINK操作符

    通配符:用来匹配值的一部分的特殊字符。

    搜索模式:又字面值、通配符或两者组成构成的搜索条件

    %   任何字符出现任何位置区分大小写

        //检索jet开头的词或句子

        SELECT columnOne,columnTwo FROM table WHERE columnOne LINK ' jet% ';

        //检索以jet结尾的词或句子

        SELECT columnOne,columnTwo FROM table WHERE columnOne LINK ' %jet ';

        //检索以jet包含的词或句子

        SELECT columnOne,columnTwo FROM table WHERE columnOne LINK ' %jet% ';

        //检索以e开头,以u 结尾的词或句子

        //检索' e%u ';

    %还可以匹配0字符,注意尾空格会影响搜索模式的结果。

 

    _     匹配单个字符

        SELECT columnOne,columnTwo FROM table WHERE columnOne LINK '_abc'

        //匹配aabc eabc  eabc  等前面一个字母的词

    让like区分大小写的方法

        在WHERE和列名之间加BINARY关键字,或者再建立表时就指定区分大小写name varhar(50) binary

    使用通配符是有代价的,提供以下的技巧

        不要过度的使用通配符

        除非是必要的,否则通配符不要用在搜索模式的开始处

        仔细注意通配符的位置。不要放错位置

 

第九章 用正则表达式进行搜索

    仅支持正则表达式的一小部分

    基本字符匹配

    检索列prod_name包含1000 的所有行

        SELECT columnOne FROM table WHERE columnOne REGEXP '1000' ORDER BY columnOne

    .   匹配任意一个字符1000 2000 3000  a000

        SELECT columnOne FROM table WHERE columnOne REGEXP '.000' ORDER BY columnOne

    正则匹配不区分大小写 ,如想区分匹配可在REGEXP 后面加上BINARY关键字

    进行OR匹配

    为搜索两个或n个字符串之一

        SELECT columnOne FROM table WHERE columnOne REGEXP '1000|2000|3000' ;

    匹配单个字符

        SELECT columnOne FROM table WHERE columnOne REGEXP '[123] Ton';  //匹配1 Ton 2 Ton3 Ton

当有非匹配的内容时使用[],它是 | 的另一种形式,如1|2|3 Ton这时匹配的只有3带有Ton

        如果想要得到非匹配的内容可以使用[^123]的形式

    匹配范围      [0-9] [a-z][A-Z]

        SELECT columnOne FROM table WHERE columnOne REGEXP '[1-5] Ton' ;

    匹配特殊字符

        想要匹配 . [ ] | 这些字符串怎么办呢,可以在这些字符前加 \\ 进行转义,第一个\ mysql自己解释,第二个给正则解释的

        元字符           说明

        \\\           \

        \\f           换页

        \\n           换行

        \\r           回车

        \\t           制表

        \\v           纵向制表

 


    匹配字符串类

        自己经常使用的数字、所有字母或所有数字字母字符等的匹配。为了方便工作,可以使用预定义的字符集,称为字符集:

                         说明

        [:alnum:]        任意字母和数字,同[0-9a-zA-Z]

        [:alpha:]         任意字符,同[a-zA-Z]

        [:blank:]         空格和制表,同\\t

        [:cntrl:]          ASCII控制字符,ASCII031127

        [:digit:]          任意数字 [0-9]

        [:graph:]        [:print:]相同,但不包括空格

        [:lower:]        任意小写字母,同[:a-z:]

        [:print:]          任意可打印字符

        [:punct:]        既不在[:alnum:]有不在[:cntrl:] 的字符

        [:space:]        包括空格在内的任意空白字符,同[\\f\\n\\r\\t\\v]

        [:upper:]        任意大写字母[A-Z]

        [:xdigit:]         任意十六进制数字,同[a-fA-F0-9]

 

    匹配多个实例

        以前的匹配都是单次匹配。如果存在一个匹配,改行就检索出来,如果不存在,检索不出任何行。但有时需要对匹配的数目进行更强的控制。

    重复元字符

        元字符           

        *               0个或多个匹配    

        +               1个或多个匹配

        ?               0个或1个匹配

        {n}             指定数目匹配

        {n,}            不少于n个匹配

        {n,m}           匹配数目的范围 m不超过255

        列:SELECT columnOne FROM table WHERE columnOne REGEXP '\\([0-9] sticks?)\\';

Sticks?匹配的是 stick sticks(?号决定前面的s出现一次或0次)

        列:SELECT columnOne FROM table WHERE columnOne REGEXP '[[:digit:]]' ORDER BY columnOne;

[:digit:]匹配任意的数字,{4}要求前面匹配的数字出现4

 

    定位符

        前面的所有例子都是匹配一个串中的任意位置的文本。为了匹配特定位置的文本

        元字符            

        ^             文本的开始

        $            文本的结束

        [[:<:]]      词的开始

        [[:>:]]      词的结束

        例如:你要找一个数(包括以小数点开始的数)开始的所有产品,怎么办,前面都是在行内任意位置匹配。所以不行

                SELECT columnOne FROM table WHERE columnOne REGEXP '^[0-9\\ . ]';

 

        简单的正则测试,可以不在数据库操作的情况下练习

        SELECT 'hello'  REGEXP '[0-9]';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值