windows下Mysql学习:select查询检索数据库

2018-03-01 11:11:22来源:oschina作者:Zing丶人点击

分享

第一章 检索记录

is not null 可以用于判断某个字段不为空的条件;is null可以用于判断某字段为空的条件。不能使用=或!= 。
多列合并为一列时,mysql可以用concat函数。



总结:mysql使用concat函数连接多个列的数值;在BD2、Oracle和PostgreSql中,“||”是concat函数的简写方式;SQL Server中是“+” 。


3. 在select语句中使用条件逻辑



总结:case表达式必须用end结尾,最好在end后面取一个别名,不让会以整个条件作为列名。else条件可以不写,不满足条件的就返回null。


4. 限制返回行数



总结:


(1)limit可以设置一个或者两个参数。只有一个参数n时,代表取第一条到第n条数据;当有两个参数n和m时,代表取第n+1条到n+m条,第二个参数表示偏移量。为了获取n条数据以后的所有数据,网上很多说可以采用第二个参数设置-1。博主测试时不行,查阅很多资料了解到,这类语法只在mysql早期版本可行,在我测试的5.1版本只能将第二个参数设置很大,列如10000......。


(2)网上很多说limit用法与oracle中rownum用法类似,这种说法不严谨。只有在返回前n行的数据时,用法类似。想要获取第n(n>1)行的数据时,如果用rownum=5将回返回失败。这是因为Oracle的rownum数值,是在获取每行之后才赋予的,操作过程如下图:



5. 从表中随机返回n条数据




总结:


(1)mysql中order by后如果指定数字常量,则是根据select查询的列表中(就是select和from之间的列)对应位置的列值来排序,切此常量大于0,小于列数,不然会报错。特别注意的是,在数据上万的时候要避免使用order by rand(),因为这样会导致数据列被多次扫描。具体改进方法详看其他博主分析:http://www.piaoyi.org/php/MySQL-Order-By-Rand.html


(2)强调一下order by与limit混用陷阱。如果order by的字段有多条数据都有相同的值,mysql是会随机的顺序返回查询结果的,导致分页数据不正确。为了保证排序结果相同,可以额外加一个字段值不会重复排序条件,列如主键。


6. 按照模式搜索


mysql的模式匹配使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。不能使用=或!=;而使用like或not like比较操作符。由MySQL提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台