多表查询
1、认识多表查询
多表查询指的就是同时从多张数据表中取出数据并且显示的一种操作。
SQL语句的格式:
【③选出所需要的数据列】SELECT [DISTINCT] * | 列 [别名],列 [别名],列 [别名]…
【①确定数据来源】FROM 表名称 [别名] , 表名称 [别名]…
【②筛选数据行】WHERE 限定条件(s);
【④数据排序】ORDER BY 排序字段[ASC | DESC] ,排序字段 [ASC | DESC] …;
利用emp和dept两张表进行多表查询。
emp表中数据量
dept表中的数据量
范例:实现emp和dept表的多表查询
emp表和dept表的多表查询最后产生56条记录,之所以会出现这样的情况,主要与数据库的产生原理有关———数学的集合,这样的集合操作,会将两个集合(数据表)的统一查询,作为乘法的形式出现(笛卡尔积),在任何情况下进行多表查询都会出现笛卡尔积的问题。事实上有些笛卡尔积的产生对用户而言是没有任何实质上的用处的,所以需要想办法去消除,如果想要消除笛卡尔积,必须要有关联字段。
只要是多表查询,这多张表之间一定存在有关联关系,没有关联关系是不可以进行多表查询的。
实际上笛卡尔积的存在对整个程序的影响是相当巨大的,即便现在可以消除掉显示的笛卡尔积,但是从本质上讲,永远无法避免笛卡尔积。
效率性能问题
在Oracle的样本数据中有sh/sh的大数据用户
范例:利用costs和sales表进行多表查询
上面的案例虽然显示的消除了笛卡尔积,但是,笛卡尔积却一直存在着,是永远无法消除的,表的数据量小的话还可以承受,如果数据量一大,那么多表查询会带来严重的性能问题(上面的查询操作,用时2分钟左右)。
如果要想判断程序慢有两个方式: