wordpress 邀请码注册衔接搜索引擎优化包括哪些内容
基本MySQL语句
- SELECT
 - SELECT ······ FROM ······
 - 列的别名
 - 去除重复行
 - 空值
 - 着重号
 
- 算术运算符
 - 加法( + )
 - 减法( - )
 - 乘法( * )
 - 除法( / 或DIV)
 - 求模( % 或MOD)
 
- 比较运算符
 - 等于( = )
 - 安全等于( <=> )
 - 不等于( != 或 <> )
 - 小于( < )
 - 小于等于( <= )
 - 大于( > )
 - 大于等于( >= )
 - 属于( IN (value1,value2,...) )
 - 不属于( NOT IN (value1,value2,...) )
 - 为空( IS NULL )
 - 不为空( IS NOT NULL )
 - 最小值( LEAST(value1,value2,...) )
 - 最大值( GREATEST(value1,value2,...) )
 - 两值之间( value BETWEEN ······ AND ······ )
 - 模糊匹配( LIKE )
 - 正则表达式( REGEXP )
 
- 逻辑运算符
 - 逻辑非( ! 或 NOT )
 - 逻辑与( && 或 AND )
 - 逻辑或( || 或 OR )
 - 逻辑异或( XOR )
 
SELECT
SELECT ······ FROM ······
从表中查找某数据或者符合相关要求的数据。
SELECT 所查找的数据
FROM 数据表;
SELECT emp_id,emp_name
FROM emp;
 

# * 代表所有数据,即查找符合要求的所有数据列
SELECT *
FROM emp;
 

列的别名
用别名替换所要输出的数据列名。
SELECT 原要查询的数据列名 别名
FROM 数据表;
或
SELECT 原要查询的数据列名 AS 别名
FROM 数据表;
SELECT emp_name name,emp_id
FROM emp;
 

SELECT emp_name AS name,emp_id
FROM emp;
 

去除重复行
查找去除存在的重复行数据后的数据。
SELECT DISTINCT 所要查找的数据列
FROM 数据表;
SELECT DISTINCT salary
FROM emp;
 

空值
NULL 表示空值,空值代表里边没有数据,不代表它等于 0 ,同时空值也不代表空字符串,空字符串的长度是 0 ,而空值的长度为空,并且空值与任何数计算,计算结果都为空,空值在MySQL中也占有存储空间。
SELECT password*10
FROM t_user;
 

着重号
如果数据库表名或者其他名与数据库关键字冲突时,我们可以用着重号(``)将数据库表名或者其他名标注出来,让数据库得以知道该值不是数据库关键字。
SELECT password AS `order`
FROM t_user;
 

算术运算符
加法( + )
整数 + 整数 = 整数
 整数 + 浮点数 = 浮点数
 整数 + 非数值类型 = 整数/浮点数(‘0’ 、‘1’等可以转换为相应数值的转换后进行运算,‘a’、’%'等不可以转换为相应数值的当作 0 进行运算)
SELECT 所需查找的数据列 + 整数/浮点数
FROM 数据表;
SELECT salary+1000
FROM emp;
 

减法( - )
整数 - 整数 = 整数
 整数 - 浮点数 = 浮点数
 整数 - 非数值类型 = 整数/浮点数(‘0’ 、‘1’等可以转换为相应数值的转换后进行运算,‘a’、’%'等不可以转换为相应数值的当作 0 进行运算)
SELECT 所需查找的数据列 - 整数/浮点数
FROM 数据表;
SELECT salary-1000
FROM emp;
 

乘法( * )
整数 * 整数 = 整数
 整数 * 浮点数 = 浮点数
 浮点数 * 浮点数 = 浮点数
SELECT 所需查找的数据列 * 整数/浮点数
FROM 数据表;
SELECT emp_id,salary*4.78 AS salary
FROM emp;
 

除法( / 或DIV)
数 / 整数 = 浮点数(最多保留4位小数)
 数 / 整数1 = 它本身
 数 / 浮点数1 = 浮点数(数值为它本身,最多保留4位小数)
 0不能作为除数,否则计算结果为NULL
SELECT 所需查找的数据列 / 整数/浮点数
FROM 数据表;
SELECT emp_id,salary/4.78 AS salary
FROM emp;
 

求模( % 或MOD)
SELECT 所需查找的数据列
FROM 数据表
WHERE 某数据列 % 某值 = 某条件;
#筛选出id为偶数的员工的工资
SELECT emp_id,salary
FROM emp
WHERE emp_id % 2=0;
 

比较运算符
等于( = )
- 如果等号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。
 - 如果等号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。
 - 如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。
 - 如果等号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。
 - 不能直接进行比较 “NULL=NULL”,比较结果为 0 。
 
SELECT 1=1,1=3,2='b',2='2','a'='a','abd'='abcd',1+3=2+2,1+3=2+3,6=NULL,NULL=NULL
FROM DUAL;
 

安全等于( <=> )
- 如果等号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。
 - 如果等号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。
 - 如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。
 - 可以直接进行比较 “NULL=NULL”,比较结果为 1 。
 
SELECT 1=1,1=3,2='b',2='2','a'='a','abd'='abcd',1+3=2+2,1+3=2+3,6<=>NULL,NULL<=>NULL
FROM DUAL;
 

不等于( != 或 <> )
-  
用于判断两边的数字、字符串或者表达式的值是否不相等,如果不相等则返回1,相等则返回0。
 -  
不等于运算符不能判断NULL值。如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL。
 -  
如果等号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否不相等。
 -  
如果等号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。
 -  
如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。
 
SELECT 1!=1,1<>3,2!='b',2<>'2','a'!='a','abd'<>'abcd',1+3!=2+2,1+3<>2+3,6!=NULL,NULL<>NULL
FROM DUAL;
 

小于( < )
- 如果小于号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。
 - 如果小于号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。
 - 如果小于号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。
 - 如果小于号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。
 - 判断结果若小于则为1,若不小于则为0,但不能与 NULL 进行比较。
 
#筛选出工资小于3000的员工id,姓名和工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE salary < 3000;
 

小于等于( <= )
- 如果小于等于号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。
 - 如果小于等于号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。
 - 如果小于等于号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。
 - 如果小于等于号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。
 - 判断结果若小于等于则为1,若不小于等于则为0,但不能与 NULL 进行比较。
 
#筛选出工资小于等于3000的员工id,姓名和工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE salary <= 3000;
 

大于( > )
- 如果大于号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。
 - 如果大于号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。
 - 如果大于号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。
 - 如果大于号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。
 - 判断结果若大于则为1,若不大于则为0,但不能与 NULL 进行比较。
 
#筛选出工资大于3000的员工id,姓名和工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE salary > 3000;
 

大于等于( >= )
- 如果大于等于号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。
 - 如果大于等于号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。
 - 如果大于等于号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。
 - 如果大于等于号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。
 - 判断结果若大于等于则为1,若不大于等于则为0,但不能与 NULL 进行比较。
 
#筛选出工资大于等于3000的员工id,姓名和工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE salary >= 3000;
 

属于( IN (value1,value2,…) )
筛选出数据值= value1 或 =value2 或 =value3 ······的值,value1,value2,value3······没有先后顺序之分。
#筛选出工资为3000或4000或5000的员工id,姓名和工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE salary IN (3000,4000,5000);
 

不属于( NOT IN (value1,value2,…) )
筛选出数据值!= value1 和 !=value2 和 !=value3 ······的值,value1,value2,value3······没有先后顺序之分。
#筛选出工资不为3000、4000、5000的员工id,姓名和工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE salary NOT IN (3000,4000,5000);
 

为空( IS NULL )
判断值、字符串或表达式是否为NULL,为NULL则为1,不为NULL则为0。
#筛选出电话为NULL的员工的id和姓名
SELECT emp_id,emp_name
FROM emp
WHERE telephone-2000 IS NULL;
 

不为空( IS NOT NULL )
判断值、字符串或表达式是否为NULL,为NULL则为0,不为NULL则为1。
#筛选出电话不为NULL的员工的id和姓名
SELECT emp_id,emp_name
FROM emp
WHERE telephone-2000 IS NOT NULL;
 

最小值( LEAST(value1,value2,…) )
- 多个整数值进行比较,则输出值最小的整数。
 - 多个整数和浮点数值进行比较,则将值最小的以浮点型输出。
 - 多个表达式值进行比较,则将表达式计算后的最小结果值输出。
 - 多个字符串进行比较,则对每个字符同时进行比较,如果该字符最小,则认定该字符串最小,直接输出。
 - 如果进行比较的值存在空值,则直接将NULL值输出。
 
#筛选出多个值中的最小值
SELECT LEAST(1,2,3),LEAST(1.5,2,1),LEAST(1+4,NULL,1-9),LEAST('adsdftas','1375896','fesa')
FROM DUAL;
 

最大值( GREATEST(value1,value2,…) )
- 多个整数值进行比较,则输出值最大的整数。
 - 多个整数和浮点数值进行比较,则将值最大的以浮点型输出。
 - 多个表达式值进行比较,则将表达式计算后的最大结果值输出。
 - 多个字符串进行比较,则对每个字符同时进行比较,如果该字符最大,则认定该字符串最大,直接输出。
 - 如果进行比较的值存在空值,则直接将NULL值输出。
 
#筛选出多个值中的最大值
SELECT GREATEST(1,2,3),GREATEST(1.5,2,1),GREATEST(1+4,NULL,1-9),GREATEST('adsdftas','1375896','fesa')
FROM DUAL;
 

两值之间( value BETWEEN ······ AND ······ )
判断某值范围是否属于 [a,b] ,若属于则为1,若不属于则为0,同时a 和 b 必须满足 a<=b。
#筛选出工资属于[3000,4000]的员工id,姓名和工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE salary BETWEEN 3000 AND 4000;
 

模糊匹配( LIKE )
LIKE运算符主要用来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回0。如果给定的值或者匹配条件为NULL,则返回结果为NULL。
‘a%’:以 a 或 A 开头的字符串
‘%a%’:存在 a 或 A 的字符串
‘a%’:以 a 或 A 结尾的字符串
‘a%':第 2 个字符是 a 或 A 的字符串
‘__a%’:第 3 个字符是 a 或 A 的字符串
'_%’:第 2 个字符是 _ 的字符串
#名字是以 a 或 A 开头的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name LIKE 'a%';
 

#名字存在 a 或 A 的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name LIKE '%a%';
 

#名字是以 a 或 A 结尾的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name LIKE '%a';
 

#名字中第二个字母是 a 或 A 的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name LIKE '_a%';
 

#名字中第三个字母是 a 或 A 的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name LIKE '__a%';
 

#名字中第二个符号是 _ 的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name LIKE '_\_%';
 

#名字中第二个符号是 _ 的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name LIKE '_$_%' ESCAPE '$';
 

正则表达式( REGEXP )
- ‘^value’匹配以 value 后面的字符开头的字符串。
 - ‘value$’匹配以 value 前面的字符结尾的字符串。
 - ‘value1.value2’匹配 value1 和 value2之间存在一个字符的字符串。注:几个 ‘.’ 代表之间存在几个字符。
 - “[value1value2···]”匹配包含有 value1 或 value2 或 value3 的字符串。例如,“[abc]”匹配“a”或“b”或“c”,“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
 - ‘value1value2’匹配在 value2 之前存在零个或多个 value1 的字符串。例如,“x”匹配任何数量的‘x’字符,“[0-9]”匹配任何数量的数字,而“”匹配任何数量的任何字符。
 - ‘value+’匹配至少存在一个或多个value的字符串。
 - '[^…]匹配不包含[]内的任何一字符的字符串。
 - 'value{n}'匹配至少包含 n 次连续出现的 value 字符的字符串。
 - 'value{n,m}'匹配至少包含 n 次连续出现的 value 字符,并且至多包含 m 次连续出现的 value 字符的字符串。
 
#名字是以 a 开头的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name REGEXP '^a';
 

#名字是以 a 结尾的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name REGEXP 'a$';
 

#名字中存在 a、b、c 字母的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name REGEXP '[a-c]';
 

#名字中存在 a 和 c 且 两字符之间间隔一个字符的员工的id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name REGEXP 'a.c';
 

#名字中包含 a 和 x 且在 x 之前存在零个或多个 a 的员工的id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name REGEXP 'a*x';
 

#名字中包含一个或多个 if 的员工的id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name REGEXP 'if+';
 

#名字中不包含 if 的员工的id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name REGEXP '[^if]';
 

#名字中至少有 2 次连续出现a的员工的id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name REGEXP 'a{2}';
 

#名字中至少有 1 次,至多有 2 次连续出现a的员工的id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name REGEXP 'a{1,2}';
 

逻辑运算符
逻辑非( ! 或 NOT )
当给定的值为0时返回1;当给定的值为非0值时返回0;当给定的值为NULL时,返回NULL。
#联系方式不为NULL的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE !(telephone <=> NULL);
 

#联系方式不为NULL的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE telephone IS NOT NULL;
 

逻辑与( && 或 AND )
当给定的所有值均为非0值,并且都不为NULL时,返回1;当给定的一个值或者多个值为0时则返回0;否则返回NULL。
#姓名以 a 开头同时也以 a 结尾的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name LIKE 'a%' && emp_name LIKE '%a';
 

#姓名以 a 开头同时也以 a 结尾的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE emp_name LIKE 'a%' AND emp_name LIKE '%a';
 

逻辑或( || 或 OR )
当给定的值都不为NULL,并且任何一个值为非0值时,则返回1,否则返回0;当一个值为NULL,并且另一个值为非0值时,返回1,否则返回NULL;当两个值都为NULL时,返回NULL。
#工资为3000或5000的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE salary=3000 || salary=5000;
 

#工资为3000或5000的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE salary=3000 OR salary=5000;
 

逻辑异或( XOR )
当给定的值中任意一个值为NULL时,则返回NULL;如果两个非NULL的值都是0或者都不等于0时,则返回0;如果一个值为0,另一个值不为0时,则返回1。
#联系方式为NULL的员工id、姓名、工资
SELECT emp_id,emp_name,salary
FROM emp
WHERE (telephone XOR 1) IS NULL;
 

