zoukankan      html  css  js  c++  java
  • 第二部分 检索和过滤数据

    检索单个列

    语法格式:SELECT 列名 FROM 表名;

    示例:从表products中检索一个名为prod_name的列。

    SQL语句:SELECT prod_name FROM products;

    检索多个列

    语法格式:SELECT 列名1,列名2 ,列名3 , FROM 表名;

    示例:从products表中检索出列名为 prod_id, prod_name, prod_price的信息。

    SQL语句:SELECT prod_id, prod_name, prod_price FROM products;

    如何检索出不同值的列表呢?

    解决办法是使用DISTINCT关键字,使得MySQL只返回不同的值。

    LIMIT限制输出结果

    示例1:使用SELECT语句检索单个列,LIMIT 5约束MySQL返回不多于5行。

    SQL语句:SELECT prod_name FROM products LIMIT 5;

    示例2:返回从第5行开始之后的5行表信息,第一个数为开始位置,第二个数为要检索的行数。

    SQL语句:SELECT prod_name FROM products LIMIT 5, 5;

    ORDER BY排序结果(ASC—升序,DESC—降序)

    示例1:对检索出的prod_name列以字母顺序降序排序数据。

    SQL语句:SELECT prod_name FROM products ORDER BY prod_name DESC;

    示例2:检索三列prod_id, prod_price, prod_name 信息,并按prod_price, prod_name两列对结果进行排序,即首先按价格,然后再按名称排序。

    SQL语句:SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price, prod_name;

    示例3:在products表中找出最贵物品的值

    SQL语句:SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;

    注意:LIMIT语句必须跟在ORDER BY子句之后,不可弄反

    WHERE过滤信息(''='' ''<='' ''>='' ''<>'' 'BETWEEN ... AND...')

    示例1:列出价格不等于10美元的所有产品

    SQL语句:SELECT prod_name, prod_price FROM products WHERE prod_price <> 10;

    示例2:返回没有价格的所有产品,空prod_price字段,并不等于价格为0

    SQL语句:SELECT prod_name FROM products WHERE prod_price IS NULL;

    示例3:列出价格为10美元以上且由1002或1003制造的所有产品

    SQL语句:SELECT prod_name, prod_price FROM products WHERE (vend_id = 1002 OR vend_id = 1003)AND prod_price >= 10;

    示例4:检索供应商1002和1003制造的所有产品

    SQL语句:SELECT prod_name, prod_price FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name;

    SQL语句:SELECT prod_name, prod_price FROM products WHERE vend_id =1002 OR vend_id =103 ORDER BY prod_name;

    备注:IN操作符完成与OR相同的功能。

    • 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观;
    • 在使用IN时,计算的次序更容易管理;
    • IN操作符一般比OR操作符清单执行更快;
    • IN的最大优点是可以包含其它SELECT语句,使得能够更动态地建立WHERE子句;

    用通配符进行过滤

    (1) 百分号(%)通配符,区分大小写

    解释:%表示任何字符出现任意次数。

    示例1:找出所有以茨jet起头的产品

    SQL语句:SELECT prod_id, prod_name FROM products WHERE prod_name LIKE 'jet%';

    示例2:匹配任何包含文本anvil的值,而不论它之前或之后出现什么字符

    SQL语句:SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '%anvil%';

    示例3:找出以s起头以e结尾的所有产品

    SQL语句:SELECT prod_name FROM products WHERE prod_name LIKE 's%e';

    注意:

    • 尾空格可能会干扰通配符匹配。比如'%anvil '
    • 虽然%通配符可以匹配任何东西,但NULL无法匹配

    (2) 下划线(_)通配符

    解释:下划线只匹配单个字符而不是多个字符。

    示例:输出prod_name中以ton anvil结尾产品,且首部只有一个字符,比如‘2 ton anvil’

    SQL语句:SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '_ ton anvil';

    用正则表达式进行搜索

    正则表达式是用来匹配文本的特殊串,即字符集合。前面所讲的比较和通配符寻找数据可以解决简单的问题,但随着过滤条件的复杂性的增加,WHERE子句本身的复杂性也必然增加,此时,使用正则表达式解决复杂的过滤条件更加有效。

    (1) 基本字符匹配:REGEXP

    示例1:检索列prod_name包含文本1000的所有行,比如”JetPack 1000“

    SQL语句:SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name;

    示例2:检索列prod_name包含文本000的所有行,比如”JetPack 1000“和”JetPack 2000“

    SQL语句:SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name;

    这里使用了正则表达式.000。”.“是正则表达式语言中一个特殊的字符,它表示匹配任意一个字符。

    注意:在SQL语句中LIKE匹配和正则表达式匹配恨形似,但其实它们之间有很大的区别。LIKE匹配整个列,如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不被返回,除非使用通配符。而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。那么,REGEXP能不能用来匹配整个列值(从而起与LIKE相同的作用)?答案是肯定的,使用^和$定位符即可。通俗讲,LIKE匹配整个串,而REGEXP匹配子串。利用定位符,通过^开始的每个表达式,用$结束每个表达式,可以使得REGEXP的作用与LIKE一样。另外一点就是,通配符%区分大小写,而正则表达式不区分大小写,如果要区分大小写,可使用BINARY关键字,比如WHERE prod_name REGEXP BINARY ‘JetPack .000'。

    (2) 进行OR匹配:使用字符'|'搜索两个串之一

    示例:输出产品名称为1000或者2000或者3000的产品

    SQL语句:SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000|3000' ORDER BY prod_name;

    (3) 匹配特定字符:使用[特定字符]完成

    示例:[123]匹配1或2或3,比如1 ton anvil或者2 ton anvil或者3 ton anvil,[^123]匹配1或2或3之外的任何东西

    SQL语句:SELECT prod_name FROM products WHERE prod_name REGEXP '[123]' ORDER BY prod_name;

    (4) 匹配范围:使用集合定义要匹配的一个或多个字符

    示例:匹配数字0到9

    SQL语句:SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] ton' ORDER BY prod_name;

    (5) 匹配特殊字符:\

    示例:找出包含'.'字符的值

    SQL语句:SELECT prod_name FROM products WHERE prod_name REGEXP '\.' ORDER BY prod_name;

    (6) 匹配字符类

     

     (7) 匹配多个实例

    比如“sticks?”匹配stick和sticks(s后的?使s可选,因为?匹配它前面的任何字符的0次或1次出现)

    示例:匹配连在一起的4位数字,比如1000或者2000,{4}要求它前面的字符(任意数字)出现4次

    SQL语句:SELECT prod_name FROM products WHERE prod_name REGEXP '[[:digit:]]{4}' ORDER BY prod_name;

     (8) 匹配特定位置的字符

    示例:找出一个数(包括以小数点开始的数)开始的所有产品

    SQL语句:SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\.]' ORDER BY prod_name;

    ----------------------------------- 心之所向,素履所往;生如逆旅,一苇以航。 ------------------------------------------
  • 相关阅读:
    如何在一个页面调用另一个页面
    CSS3新增的选择器和属性
    js中函数和方法的区别
    jQuery中哪几种选择器
    关于JS数组的栈和队列操作
    HDU1232 畅通工程(并查集)
    并查集
    有关素数的基础算法
    二分教室
    蚂蚁下桥(思维)
  • 原文地址:https://www.cnblogs.com/wzw0625/p/12604303.html
Copyright © 2011-2022 走看看