MYSQL--高级1

zstarling

    • IFNULL函数
    • limit 函数
    • left join (right join)(inner join)函数
    • sql 截取字符串:

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只过滤中间表的记录。
MYSQL--高级1_第1张图片
右连接:

  • 显示右表的全部行,显示左表的匹配行,若无匹配值,则左表显示为空值。
  • 查询过程:右表为主,遍历右表。

MYSQL--高级1_第2张图片
左连接:

  • 显示左表的全部行,显示右表的匹配行,若右表无匹配行,则显示空。
  • 左连接中,左表在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的长度。

你可能感兴趣的:(SQL,mysql,数据库,java)