数据库笔记6(下半部分):检索 排序 过滤

简介:

第四章 检索数

   检索单列

     SELECT columnOne FROM table;

   检索多列

     SELECT columnOne,columnTwo,columnThire FORMtable;

  检索所有列

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

   检索不同的行 

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

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

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

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

  限制结果条数

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

    LIMIT5         显示结果的前5

     LIMIT3,4       从行3开始的后4

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

第五章 排序检索数据

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

 按单列排序

 SELECT columnOne FROM tableORDER BY columnOne;  

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

 按多列排序

 SELECTcolumnOne,columnTwo,columnThire FROM products ORDER BYprod_price,prod_name;

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

 指定排序方向

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

 SELECTcolumnOne,columnTwo,columnThireFROM table ORDER BY columnOne ASC,columnTwo      DESC;  //先按columnOne正排序再按columnTwo倒序排序

第六章 过滤数据

   使用WHERE 语句

       SELECT columnOne,columnTwo FROMtable WHERE columnOne =3;

WHERE子句操作符

       操作符          说明

       =              等于

       <>             不等于(数字比较)

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

       <              小于

       >              大于

       <=             小于等于

       >              大于

       >=             大于等于

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

       SELECT columnOne,columnTwo, FROMtable WHERE columnOneBETWEEN 3 AND 8; // 检索columnOne值为38之间的行

空值检查

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

       SELECT columnOneFROM table WHERE columnOne ISNULL;  //检索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 ORcolumnTwo <=10;//检索columnOne =2009  columnTwo <= 10 的行

   计算次序

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

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

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

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

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

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

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

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

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

       SELECT columnOne,columnTwo FROMtable WHERE columnOneNOT IN (1002,1005,1006) ORDERBYcolumnTwo;    //检索columnOne100210051006的行并且按columnTwo分组

   MySQL支持使用NOTINBETWEENEXISTS子句取反。

 

第八章 用通配符进行过滤

   LINK操作符

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

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

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

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

       SELECT columnOne,columnTwo FROMtable WHERE columnOne LINK ' jet% ';

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

       SELECT columnOne,columnTwo FROMtable WHERE columnOne LINK ' %jet ';

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

       SELECT columnOne,columnTwo FROMtable WHERE columnOne LINK ' %jet% ';

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

       //检索' e%u ';

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

 

   _    匹配单个字符

       SELECT columnOne,columnTwo FROMtable WHERE columnOne LINK '_abc'

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

   让like区分大小写的方法

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

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

       不要过度的使用通配符

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

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

 

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

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

   基本字符匹配

   检索列prod_name包含1000 的所有行

       SELECT columnOneFROM table WHERE columnOne REGEXP '1000' ORDERBY columnOne

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

       SELECT columnOneFROM table WHERE columnOne REGEXP '.000' ORDERBY columnOne

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

   进行OR匹配

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

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

   匹配单个字符

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

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

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

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

       SELECT columnOneFROM 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 columnOneFROM table WHERE columnOne REGEXP '\\([0-9] sticks?)\\';

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

       列:SELECT columnOneFROM table WHERE columnOne REGEXP '[[:digit:]]' ORDER BYcolumnOne;

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

 

   定位符

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

       元字符           

       ^           文本的开始

       $          文本的结束

       [[:<:]]     词的开始

       [[:>:]]     词的结束

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

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

 

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

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


本文转自    风雨萧条 博客,原文链接:  http://blog.51cto.com/1095221645/1545900      如需转载请自行联系原作者


相关文章
|
28天前
|
Go 数据库
数据库的实现【笔记】
数据库的实现【笔记】
12 0
|
28天前
|
数据库
数据库设计【笔记】
数据库设计【笔记】
11 0
|
2天前
|
SQL 关系型数据库 MySQL
排序与分页——“MySQL数据库”
排序与分页——“MySQL数据库”
|
1月前
|
存储 机器学习/深度学习 自然语言处理
社区供稿 | Yuan2.0大模型,联合向量数据库和Llama-index,助力检索增强生成技术
本文将以Yuan2.0最新发布的Februa模型为例进行测试验证,用更小规模的模型达到更好的效果。
|
2月前
|
存储 关系型数据库 MySQL
【2024】新建mysql数据库,如何选择字符集和排序规则
【2024】新建mysql数据库,如何选择字符集和排序规则
148 1
|
2月前
|
SQL 数据库管理
sqlite语句order by两个字段同时排序处理
sqlite语句order by两个字段同时排序处理
19 0
|
2月前
|
存储 数据库连接 数据库
数据存储与检索:Python 与数据库的交互
在当今的数据驱动世界中,有效地存储和检索数据是至关重要的。Python 作为一种强大的编程语言,提供了多种方式与数据库进行交互,使得处理和管理数据变得更加便捷。在本文中,我们将探讨 Python 与数据库交互的基本概念和技术,包括使用 Python 的数据库驱动程序、连接数据库、执行查询和操作数据等。
|
2月前
|
SQL 人工智能 运维
数据库基础入门 — SQL排序与分页
数据库基础入门 — SQL排序与分页
25 0
|
2月前
|
SQL 存储 数据库
【数据库SQL server】自学终极笔记
【数据库SQL server】自学终极笔记
93 0
|
3月前
|
SQL Dart 数据库
Flutter笔记: 在Flutter应用中使用SQLite数据库
Flutter笔记: 在Flutter应用中使用SQLite数据库
181 0