MySQL必知必会笔记(一)

 检索不同的行 

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

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

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

        SELECT DISTINCT vend_id,prod_price......要求vend_id,prod_price这两列都不出现重复的

  限制结果条数

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

        LIMIT         显示结果的前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 BY columnTwo;     //检索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 BY columnTwo;     //检索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控制字符,ASCII0到31和127

        [: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、付费专栏及课程。

余额充值