MySQL基础归纳--第二卷

1.位运算符

位运算符是在二进制数上进行计算的运算符。位运算符会先将操作数变成二进制数,然后进行位运算, 最后将计算结果从二进制变回十进制数。

 1.1按位与运算符

按位与(&)运算符将给定值对应的二进制数逐位进行逻辑与运算。当给定值对应的二进制位的数值都为1时,则该位返回1,否则返回0;

mysql> SELECT 1 & 10, 20 & 30; 
+--------+---------+
| 1 & 10 | 20 & 30 |
+--------+---------+
| 0      | 20      | 
+--------+---------+
1 row in set (0.00 sec)
1 的二进制数为 0001 10 的二进制数为 1010 ,所以 1 & 10 的结果为 0000 ,对应的十进制数为 0;
20 的二进制 数为10100 30 的二进制数为 11110 ,所以 20 & 30 的结果为 10100 ,对应的十进制数为 20;

1.2按位或运算符

按位或(|)运算符将给定的值对应的二进制数逐位进行逻辑或运算。当给定值对应的
二进制位的数值有一个或两个为 1 时,则该位返回 1 ,否则返回 0,然后再返回对应的十进制数
mysql> SELECT 1 | 10, 20 | 30; 
+--------+---------+
| 1 | 10 | 20 | 30 | 
+--------+---------+
| 11     | 30      | 
+--------+---------+
1 row in set (0.00 sec)
1的二进制数为 0001 10 的二进制数为 1010 ,所以 1 ^ 10 的结果为 1011 ,对应的十进制数为 11 20 的二进 制数为10100 30 的二进制数为 11110 ,所以 20 ^ 30 的结果为 01010 ,对应的十进制数为 10

按位异或:也是跟上述一个道理,只不过是在两个数的二进数进行的是异或的操作,然后结果的二进制再转为十进制数;

1.3按位取反符号

按位取反(~)运算符将给定的值 的二进制数逐位进行取反操作,

1.4 按位右移符号

按位右移(>>)运算符将给定的值的二进制数的所有位右移指定的位数。右移指定的 位数后,右边低位的数值被移出并丢弃,左边高位空出的位置用0 补齐。
1 的二进制数为 0000 0001 ,右移 2 位为 0000 0000 ,对应的十进制数为 0
4 的二进制数为 0000 0100 ,右移 2 位为0000 0001 ,对应的十进制数为 1
按位左移也是差不多道理,只是左移两位,低位补充0;

2.运算符的优先级

————————————————————————————————————————

 REGEXP正则表达式的补充:

 


3.排序数据order by

3.1排序规则

使用 ORDER BY 子句排序
ASC ascend : 升序
DESC descend : 降序
ORDER BY 子句在 SELECT 语句的结尾。默认某列明orderby后面没有标明asc还是DESC,默认是升序排序

3.2单例排序

SELECT employee_id, last_name, salary*12 annsal FROM employees ORDER BY annsal;

 3.3多列排序的原理

可以使用不在 SELECT 列表中的列排序。
在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第 一列数据中所有值都是唯一的,将不再对第二列进行排序。
SELECT last_name, department_id, salary FROM employees ORDER BY department_id, salary DESC;

 

4.limit分页操作

4.1分页格式

LIMIT [ 位置偏移量 ,] 行数
偏移量可以不加,若limit后面只有一个数,默认是行数;
--前10条记录: 
SELECT * FROM 表名 LIMIT 0,10; 
--或者
SELECT * FROM 表名 LIMIT 10;
--第11至20条记录: 
SELECT * FROM 表名 LIMIT 10,10;
--第21至30条记录:
 SELECT * FROM 表名 LIMIT 20,10;
MySQL 8.0 中可以使用 “LIMIT 3 OFFSET 4” ,意思是获取从第 5 条记录开始后面的 3 条记录,和 “LIMIT 4,3;”返回的结果相同。

4.2分页显示公式

分页显式公式 :(当前页数 -1 * 每页条数,每页条数
SELECT * FROM table
LIMIT (PageNo - 1 )*PageSize,PageSize;

当前页数指的是:以pagesize为一个页的下一页

比如

查询第1条到第10条的数据的sql是:select * from table limit 0,10;   ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;

查询第10条到第20条的数据的sql是:select * from table limit 10,20;  ->对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;
 

注意:LIMIT 子句必须放在整个SELECT语句的最后!

 使用limit的好处 :约束返回结果的数量可以 减少数据表的网络传输量 ,也可以 提升查询效率

4.3 limit的拓展使用

如果是 Oracle,你需要基于 ROWNUM 来统计行数:

SELECT rownum,last_name,salary FROM employees WHERE rownum < 5 ORDER BY salary DESC;  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值