本文旨在自用,记录之前学习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
结果如下所示:
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个结果