MySQL学习笔记(一) 运算符、NULL、ORDER BY、LIMIT

本文旨在自用,记录之前学习MySQL不知道的小Tips,非系统学习。



示例数据

示例数据会根据后期需求改动,部分结果图中的非重要数据可能会存在变动。

-- ----------------------------
-- Table structure for userinfo
-- ----------------------------
DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `lastname` varchar(30) NOT NULL, -- 姓氏
  `firstname` varchar(30) NOT NULL, -- 名字
  `birth` date NOT NULL, -- 出生日期
  `sex` enum('F','M') NOT NULL, -- 性别
  `phone` varchar(20) NOT NULL, -- 电话号码
  `native_place` varchar(20) DEFAULT NULL, -- 籍贯
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of userinfo_copy
-- ----------------------------
INSERT INTO `userinfo` VALUES ('1', 'Ma', 'A', '1980-03-07', 'F', '12345678900', 'Beijing');
INSERT INTO `userinfo` VALUES ('2', 'Ma', 'B', '1999-06-07', 'M', '12345678901', 'ShangHai');
INSERT INTO `userinfo` VALUES ('3', 'Ma', 'C', '1994-05-24', 'M', '12345678902', null);

笔记(三)加入数据:

INSERT INTO `userinfo` VALUES ('4', 'Ma', 'Deta', '1982-01-07', 'F', '12345678903', 'Beijing');
INSERT INTO `userinfo` VALUES ('5', 'Ma', 'Ella', '1988-02-08', 'F', '12345678904', 'Beijing');
INSERT INTO `userinfo` VALUES ('6', 'Lee', 'Fiona', '1992-03-21', 'F', '12345678905', 'HongKong');
INSERT INTO `userinfo` VALUES ('7', 'Kin', 'Gina', '2002-11-16', 'F', '12345678906', 'HongKong');
INSERT INTO `userinfo` VALUES ('8', 'Waston', 'Hana', '1960-08-07', 'F', '12345678907', NULL);

· 运算符

1. 算数运算符

运算符含义
+
-
*
/除法
DIV整除
%模运算(除法取余)

2. 比较运算符

运算符含义
<小于
<=小于等于(不大于)
>大于
>=大于等于(不小于)
=等于
<=>等于(可用于NULL)
<> 或 !=不等于

3. 逻辑运算符

运算符含义
AND
OR
XOR异或
NOT

· NULL

NULL的含义是“无值”或“未知值”。所以,NULL和“已知值”或NULL本身比较,结果都是未知的,即为NULL。
但是,比较运算符“<=>”、IS NULL、IS NOT NULL可用于NULL的比较。

SELECT
	NULL < 0,
	NULL > 0,
	NULL = 0,
	NULL <> 0,
	NULL = NULL,
	NULL <> NULL,
	NULL <=> NULL,
	NULL IS NULL,
	NULL IS NOT NULL

结果如下所示:

NULL的运算

PS:NUL为零值字节,等于转义字符\0。


· 服务器获得的结果是无序的

未指定返回顺序时,服务器从数据库获得的结果不能保证有序。

1. 基本排序

结果的顺序,需要在查询语句后添加ORDER BY字句,ASC为升序,DESC为降序。
ORDER BY后可添加多个条件,即对排序中条件相同的结果进行二次排序。

-- 查询籍贯不为空的信息,顺序:先根据姓氏升序,同姓氏的再根据名字降序。
SELECT * FROM userinfo WHERE native_place IS NOT NULL ORDER BY lastname ASC, firstname DESC;

在这里插入图片描述

2. NULL值先后顺序

希望出现NULL值的排在后面时,可以使用:

SELECT * FROM userinfo ORDER BY IF(native_place IS NULL,1,0), lastname ASC, firstname DESC;

在这里插入图片描述
IF(条件,A,B)函数:条件为true时返回A;为false时返回B。
则,native_place 为NULL时条件为true,返回1;不为NULL时返回0。默认为升序,0在1之前,故NULL值排在后面。

3. 随机顺序

SELECT * FROM userinfo ORDER BY RAND();

3. 查询结果个数限制

SELECT * FROM userinfo ORDER BY id LIMIT 2; -- 返回查询的前2个结果
SELECT * FROM userinfo ORDER BY id LIMIT 1,2; -- 跳过查询的前1个结果,返回之后的前2个结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值