多表查询,子查询,及查询语句中语句执行的前后顺序和特色

对多张表进行查询操做
  查询方式1:
    笛卡尔积查询
      select * from 表1,表2;
      结果:让表1中的每一条记录和表2中每一条记录一次组合
      表1 n条记录
      表2 m条记录
      最终查询结果:n * m 条

    注意:
      1.观察笛卡尔积查询的最终结果,不少数据没有实际做用
      2.查询结果太多,对内存压力大

  笛卡尔积查询优化(内链接)
  加上条件
    隐式内链接
      select * from 表1,表2 where 表1.字段 = 表2.字段;

    显示内链接语法
      select * from 表1 inner join 表2 on 条件;
        注意:内链接语法条件过滤时,使用的是 on 关键字
        例1:select * from kecheng,teacher where kecheng.teacherid = teacher.tid;
        例2:select * from kecheng inner join teacher on kecheng.teacherid = teacher.tid;mysql

  外连接(outer join)(谁在前面就先显示哪一个表的数据)
    左外链接 ---- left outer join
      结果:
        以左表为准,左表中的全部数据都有 + 右表中符合条件的数据(链接条件on和判断条件where)
    右外链接 ---- right outer join
      结果:
        以右表为准,右表中的全部数据都有 + 左表中符合条件的数据

  外链接和内链接的区别:
    1.内链接获取的是严格符合条件的数据
    2.外链接获取的是严格符合条件的数据 + 左表(left)/右表(right)中不符合条件的数据

子查询:一个查询的结果做为另一个查询的条件(一个查询中包含另外一个查询)
    必须保证查询的结果为一个具体的值!!!(做为条件时)

难点:char与varchar的比较:
    相同点:两者都是存储文本(字符串)的
    不一样点:
      1.数据声明的长度范围不一样
        char --- 0 --- 255
        varchar --- 0 --- 65535
      拓展:varchar(10)
        长度:在mysql 4.0 以前表明的字节数
           在mysql 5.0 开始,表明字符数
      2.底层存储格式不一样
        char(10) ---- 'AB' ---- 'AB             '       (已经定义了长度了,就像数组同样,你不用也有)
        varchar(10) ---- 'AB' ---- '2AB'             (有算法封装了长度,你定义的长度是最大长度)
          A、varchar 空间分配更灵活
          B、虽然char可能浪费空间,可是效率高
            char 比 varchar 效率高
      3.何时使用 char? 何时使用 varchar?
        具体状况具体分析
          用于固定格式的数据 char
          不肯定格式 varchar

语句查询中的顺序:
  select D_*
    from 表名
    where A_条件
    group by B_字段
    having C_条件
    order by E_字段;

    0、先执行from
    一、执行where后的A_条件
    二、执行group by的 B_字段,拆分红子表
    三、执行having的C_条件,对子表进行筛选
    四、执行select的D_*,将子表合成一张表
    五、执行order by的E_字段,对4中的表进行排序(若是是用基础属性,就是按照符合条件的第一条的语句的基础属性在排序)

show create table 表名;
  显示全部的建表信息(可用于查询约束名等而后对约束进行操做)算法

limitsql

  select * from 表名 limit n, m;   用于显示数据库中从第(n+1)条数据开始的共m条语句数据库

相关文章
相关标签/搜索