Work with MySQL < Search_WHERE
WHERE 范围限定在 MySQL 属于核心部分,数据量基本上以万为单位计算,足够任何教程单独开一个专题章节!后面的查询内容基本围绕此展开。
在进行此部分内容学习时,我们推荐你先了解 Linux/Shell 命令是如何运行的,以及它的参数分割(传参)原理!
存入数据库的数据不意味着完全理想、安全,在正式生产环境你必须根据需求确定采用其他安全措施!
请注意,从此开始。我们将对 MySQL 关键词采用二级标题、应用环境采用三级标题的方式进行深入介绍!
sql
-- where_init.sql
-- 初始化示例环境
USE maic;
DROP TABLE IF EXISTS info;
CREATE TABLE info
(
name varchar(32) DEFAULT NULL,
id_number char(18) NOT NULL,
tel char(11) DEFAULT NULL
);
INSERT INTO info
VALUES
('小A','020104198008070432','13612312368'),
('小B','020104198002230756','15712312375'),
('小C','010455198912080431','15712312312'),
('小D','030455198912080421',NULL),
('小E','040455198912080421',NULL);
SELECT * FROM info;
-- 注意,这里 maic_user 表已经被更名为 profile
-- 如果忘记如何对表结构更名,请查阅 Frame_Table_MySQL
TRUNCATE profile;
INSERT INTO profile(id,uid,email,pwd,nick)
VALUES
(1,0,'h@maichc.club','xsadw','zomaii'),
(2,1,'he@maichc.club','xsadw','liubin'),
(3,2,'hel@maichc.club','xsadw',NULL),
(4,3,'hell@maichc.club','xsadw',NULL),
(5,4,'hello@maichc.club','xsadw',NULL);
WHERE 拓展介绍
使用 WHERE 意味着装载了一个应用环境,即WHERE关键词后均是应用环境。同时需要引入一个编程概念:任何关键词和应用环境都要附加参数,参数可以是程序返回值、变量或常量!
WHERE 的表达式如下:
sql
SELECT ... FROM ... WHERE 范围内的查询条件 {[命令] 命令参数}
无论你是否规定了WHERE范围,以下代码在特定条件下的选择效果等同!
sql
-- 提醒 tel 类型 CHAR(11) DEFAULT NULL
SELECT * FROM info WHERE tel;
SELECT * FROM info WHERE tel IS NOT NULL;
WHERE支持的部分运算符如下,你应该能明白科学性编程和业务性编程在指导上的一些大区别:
值得注意的是,逻辑符 必须出现在 常量 或 关键词 前!如 NOT NULL 、BETWEEN ... AND ... 和 NOT BETWEEN 等诸如此类的例子!
...
AND - [输出]与判断要求的并集`A∪B` OR - [输出]与判断要求的交集`A∩B` NOT - [输出]基于上面取反、补集`∁uA` XOR - [输出]如果结果包含一真、一假返回真,输出。
`+,−,∗,/,=` !=
逻辑运算符
数学运算符
关系运算符
完全查询
sql
--- WHERE 实际是一个循环取值的过程
--- 后面表达,运算结果为 True 才会输出
SELECT * FROM `profile`;
SELECT * FROM `profile`
WHERE TRUE;
SELECT * FROM `profile`
WHERE 1=1;
查询指定字段(列,填写表结构作为命令参数)
sql
SELECT nick "昵称 NULL为不可见",email "邮件地址"
FROM profile;
通过数学运算符方式查询
sql
SELECT * FROM profile WHERE nick="zomaii";
SELECT * FROM profile WHERE uid=1;
复合式查询
sql
--- 限制uid范围
SELECT
nick AS '用户昵称',
email AS '邮箱地址'
FROM maic.profile
WHERE uid >= 0 AND uid < 4;
--- 多条件限制
SELECT
nick AS '用户昵称',
email AS '邮箱地址'
FROM maic.profile
WHERE uid >= 0 AND nick IS NOT NULL;
多表查询
反单引号代表将关键词与表结构相分割,单引号或双引号代表字符串别名!
sql
-- DISTINCT代表去重复内容
SELECT DISTINCT
info.`name` AS 'info 表格的 name 数据',
`profile`.email AS 邮件
FROM
maic.info,
maic.`profile`;
最简单的查询学习以及完成,接下来是业务查询内容。
包括但不限于 ORDER BY 的排序 LIMIT x,x的取名次 AVG() 的求平均。
以及 LIKE '_','%' 的模糊搜索 和 IN() OR 的选项匹配。
你将会处理 时间、价格-浮点(整数)、字符串、邮箱、电话等,你需要明白匹配这些类型(需求)的表达方式!