• 利用select语句对列进行过滤检索


    利用select语句对列进行过滤检索

    1.单纯直接的检索表中的列(单列,多列,全部列)
    2.对“单纯直接的检索表中的列” 的结果 排序输出 (order by)
    3.带有简单过滤条件的检索表中的列(单值匹配,范围匹配,不匹配,null匹配)(where语句)
    4.通过操作符实现更复杂过滤条件的检索表中的列 (利用AND,OR,NOT,IN操作符来组合简单的where过滤条件)

    1.单纯直接的检索表中的列(单列,多列,全部列)

    select语句:
    用途是从一个或者多个表中检索信息。
    ​检索信息至少需要两条信息:想检索什么 和 从哪里检索。

    1.1)检索单个列

    select <列名或者叫header> from <数据表名>; 
    # 表示从 数据表名 中检索一个名为 列名 的列。
    # 输出结果将会是那个列的所有数据,由于这里没有明确排序查询结果,则返回的数据的顺序没有任何意义或者规律。
    # sql 语句不区分大小写,但可以自我养成习惯,以增加程序可读性
    # sql 将忽略语句中的所有空格,所以可以转行写
    

    1.2)检索多个列

    select 列名1,列名2,列名3 from 数据表名; # 从同一个表中检索多个列,select语句结构不变,只是多加几个列名,之间用逗号分开。
    # sql 语句检索返回的是无格式的数据,对数据进行某种格式规范是一种表示的问题,而不是检索的问题。
    

    1.3)检索所有列

    select * from 数据表名; # 上述两种是指定返回所需的列,这里是自动检索一个数据表中所有的列。使用通配符*可以完成任务。
    # 同样这里列之间的顺序也没有意义
    # 对于通配符的表示要慎重,因为这样可能导致检索不需要的列而降低性能。
    # 使用通配符的好处在于可以检索出未知的列。		
    

    1.4)检索不同的行

    在表中,同一个id可能重复多次出现,比如说数据表记录着本月支出,可能在同一个id处多次消费,那么按照上面的检索出的会多次反复出现,现在想要每个id只出现一次的话:

    select distinct 列名 from 数据表名; # 这里的关键字distinct告诉MySQL只返回不同的列名就可以。
    # 一般这种用法只对一个列名有效,若是select后面跟两个列名,大多数的情况下所有行都会检索出来。
    

    1.5)检索部分行

    不加限制的select语句会返回所有匹配的行,现在为了返回某一行或者前几行,使用limit语句。

    select 列名 from 数据表名 limit 5; # 本句表示返回不多于前5行
    select 列名 from 数据表名 limit 4,5; # 本句表示返回从行4开始的5行,注意,数据表的第一行为行0
    # 当limit给出的范围过大,行数不够,填不满这个范围时,能返回多少就返回多少
    

    1.6)使用完全限定的表名

    之前基本上是针对一个数据库的一个数据表中的检索,这在涉及不同数据表 的检索中会用到
    ​在遇到不同的数据库和数据表存在时,可以加以限定

    select 数据表名.列名 from 数据表名;
    select 数据表名.列名 from 数据库.数据表名;
    

    2.对“单纯直接的检索表中的列” 的结果 排序输出 (order by)

    2.1)按某一个列的字母顺序排序

    之前的检索方法,返回的数据的顺序其实是 数据在底层表中出现的 顺序显示,可能是最开始输入的顺序,但如果后来进行过更新/删改的话,
    ​则会改变顺序,因为此过程未知,所以返回的数据的顺序无意义。

    select 列名1 from 数据表名 order by 列名2; # 这里表明按照列名2的数据的字母顺序来检索并返回列名1的数据
    # 列名1和列名2可以相同也可以不相同
    # 这里介绍概念子句(clause), from xx 和 order by xxx 都是子句
    

    2.2)按多个列排序

    select 列名1 from 数据表名 order by 列名2,列名3; 
    # 这里表明 先用列名2的数据的字母顺序对列名1的数据进行排序,当列名2中字母相同时,再用列名3的字母顺序进行排序
    # 假设列名2中所有值都是唯一的,那么根本不会用到列名3
    # 列名1可以出现在列名2,列名3中,但列名2与列名3一般不相同
    

    2.3)指定排序方向

    默认的排序方向时升序排序,但也可以指定为降序排序,这里要用到desc关键字。

    select 列名1,列名2 from 数据表名 order by 列名3 desc; # 按照列名3的降序排列
    select 列名1,列名2 from 数据表名 order by 列名3 desc, 列名4; # 按照列名3的降序排,若出现一样,则按照列名4的升序排列
    

    2.4)排序的用法之一:找最值

    select 列名1 from 数据表名 order by 列名2 desc limit 1; # 找到列名2的最大值对应的列名1
    

    3.带有简单过滤条件的检索表中的列(单值匹配,范围匹配,不匹配,null匹配)(where语句) 以及

    4.通过操作符实现更复杂过滤条件的检索表中的列 (利用AND,OR,NOT,IN操作符来组合简单的where过滤条件)

    数据库往往很大,一般不会检索所有的行,而是根据一定条件筛选出一些,那么就要设定过滤条件filter condition了。
    这里就要用到where语句,where子句中会指定过滤条件,where跟在from之后。
    过滤条件:

    # = 等于
    # != 不等于
    # <> 不等于
    # < 小于;<= 小于等于
    # > 大于;>= 大于等于
    # between 在指定的两个值之间
    

    用例子来说明用法

    # 筛选出prod_price=2.50的 prod_name和 prod_price并返回
    select prod_name, prod_price from products where prod_price=2.50; 
    
    # where 一定要放在ordey by 之前,意味着要先筛选再排序,否则会出问题
    select prod_name, prod_price from products where prod_nmae="fuses"; # sql 不区分大小写 所以Fuses也符合要求
    select prod_name, prod_price from products where prod_price<10;
    select prod_name, prod_price from products where prod_price!=2.50;
    select prod_name, prod_price from products where prod_price<>2.50;
    
    # 表示范围在5到10之间的都可以
    # 使用between一定要设置两个值,一个最小值一个最大值,两个值用and来连接,这种写法是包含两个极端值在内的
    select prod_name, prod_price from products where prod_price between 5 and 10; 
    
    # 用于检查是否有空值null的
    select prod_name, prod_price from products where prod_price is null; 
    ### 这里值得注意的是,如果设立过滤条件 !=5 的话,null是不符合条件的,因为是空值,数据库不知道它是否匹配,所以要单独考虑null
    
    ### where 的过滤条件可以连接起来使用,这里就会用到操作符 operator
    # and 操作符
    select prod_name, prod_price from products where prod_price=2.50 and vend_id=1003; # 表示要同时符合这个条件
    # or 操作符
    select prod_name, prod_price from products where prod_price=2.50 or vend_id=1003; # 表示符合一个就可以
    # and 与 or 同时使用的时候, 记得用括号来规定先后顺序
    select prod_name, prod_price from products where (vend_id=1002 or vend_id=1003) and prod_price=2.50; 
    # in 操作符
    # in 关键字可以用括号表示出范围,极端值也包含,好处在于方便并且在 in 的范围中可以包含其他的 select语句
    select prod_name, prod_price from products where vend_id in (1002,1003) order by prod_name;
    # not 相当于取反,往往与in 连在一起用非常方便
    select prod_name, prod_price from products where vend_id not in (1002,1003) order by prod_name;
    
  • 相关阅读:
    Openstack的项目管理方案
    Openstack的web管理端相关
    Openstack安全规则说明
    Openstack命令行删除虚拟机硬件模板flavor
    [转]java中的Static class
    [转]Activitys, Threads, & Memory Leaks
    [转]How to Leak a Context: Handlers & Inner Classes
    [原]Android打包之Eclipse打多渠道包
    [转]ubuntu下整合eclipse和javah生成jni头文件开发android的native程序
    Nao 类人机器人 相关资料
  • 原文地址:https://www.cnblogs.com/shiji-note/p/14370626.html
Copyright © 2020-2023  润新知