首页 > 代码库 > 多表查询,子查询,及查询语句中语句执行的先后顺序和特点

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

对多张表进行查询操作
  查询方式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;

  外链接(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
    1、执行where后的A_条件
    2、执行group by的 B_字段,拆分成子表
    3、执行having的C_条件,对子表进行筛选
    4、执行select的D_*,将子表合成一张表
    5、执行order by的E_字段,对4中的表进行排序(如果是用基础属性,就是按照符合条件的第一条的语句的基础属性在排序)

show create table 表名;
  显示所有的建表信息(可用于查询约束名等然后对约束进行操作)

limit

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

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