IFNULL函数
ifnull(a,b)函数解释:
如果value1不是空,结果返回a
如果value1是空,结果返回b
limit 函数
limit n 子句表示查询结果返回前n条数据
offset n表示跳过x条语句
limit y offset x 分句表示查询结果跳过 x 条数据,读取前 y 条数据
left join (right join)(inner join)函数
以join后的表的on字段名为查找顺序。 表示查询表为join后的表,join前的表为被查询的表。
on后面的条件(on条件)和where条件的区别:
on条件:是过滤两个链接表笛卡尔积形成中间表的约束条件。 where条件:在有on条件的select语句中是过滤中间表的约束条件。在没有on的单表查询中,是限制物理表或者中间查询结果返回记录的约束。在两表或多表连接中是限制连接形成最终中间表的返回结果的约束。 从这里可以看出,将where条件移入on后面是不恰当的。推荐的做法是: on只进行连接操作,where只过滤中间表的记录。
右连接:
- 显示右表的全部行,显示左表的匹配行,若无匹配值,则左表显示为空值。
- 查询过程:右表为主,遍历右表。
左连接:
- 显示左表的全部行,显示右表的匹配行,若右表无匹配行,则显示空。
- 左连接中,左表在WHERE后后过滤,右表在on后过滤。
- 查询过程:左表为主表,遍历左表
FOR each row lt in LT {
// 遍历左表的每一行
BOOL b = FALSE;
FOR each row rt in RT such that P1(lt, rt) {
// 遍历右表每一行,找到满足join条件的行
IF P2(lt, rt) {
//满足 where 过滤条件
t:=lt||rt;//合并行,输出该行
}
b=TRUE;// lt在RT中有对应的行
}
IF (!b) {
// 遍历完RT,发现lt在RT中没有有对应的行,则尝试用null补一行
IF P2(lt,NULL) {
// 补上null后满足 where 过滤条件
t:=lt||NULL; // 输出lt和null补上的行
}
}
}
sql 截取字符串:
1、LOCATE(substr , str ):返回子串 substr 在字符串 str 中第一次出现的位置,如果字符substr在字符串str中不存在,则返回0;
2、POSITION(substr IN str ):返回子串 substr 在字符串 str 中第一次出现的位置,如果字符substr在字符串str中不存在,与LOCATE函数作用相同;
3、LEFT(str, length):从左边开始截取str,length是截取的长度;
4、RIGHT(str, length):从右边开始截取str,length是截取的长度;
5、SUBSTRING_INDEX(str ,substr ,n):返回字符substr在str中第n次出现位置之前的字符串;
6、SUBSTRING(str ,n ,m):返回字符串str从第n个字符截取到第m个字符(截取长度为m-n);
6、SUBSTR(str ,n ,m):返回字符串str从第n个字符截取m个字符(截取长度为m);
7、REPLACE(str, n, m):将字符串str中的n字符替换成m字符;
8、LENGTH(str):计算字符串str的长度。