多表连接 建立索引 多表连接怎么才能实现
转载
1、 连接多个表:
(1) 笛卡尔连接:第一个表中有m条记录,第二个表中有n条记录,结果是m*n条
Ø传统方法——。。。FROM 表1,表2
ØJOIN方法——。。。FROM 表1 CROSS JOIN 表2
(2) 相等连接:将表中有公共列存储了相同的数据的两个或多个表连接起来。
Ø传统方法——使用笛卡尔连接后再使用WHERE子句。。。。。WHERE book.id=order.id
ØJOIN方法——可以使用三种JOIN关键字来创建相等连接:
NATURAL JOIN—将包括一个同等命名和定义的字段的两个表之间自动创建连接
SELECT TITLE,PUBID,NAME FROM PUBLISHER NATURAL JOIN BOOKS;
|
JOIN…USING—使用USING子句可以根据在两个表中具有相同名称和定义的列创建连接
SELECT TITLE,PUBID,NAME FROM BOOKS JOIN PUBLISHER USING(PUBID);
|
JOIN…ON—当USING子句中连接的表没有包括一个同等命名和定义的字段时,必须添加一个WHERE子句或者向JOIN关键字添加ON子句
SELECT TITLE,NAME FROM BOOKS B JOIN PUBLISHER P ON B.PUBID=P.PUBID;
|
v规则:如果在FROM子句中指定了一个表别名,那么只要在这个SQL语句中引用这个表,就必须使用这个别名。
(3) 不等连接:在不能使用等号连接相关列的时候,也就是表中不存在可以连接的相同行的时候,我们可以使用“不等连接”,它允许将一个范围的最小值存储在记录的一列,这个范围的最大值存储在另一列。例:
books表结构:title ,retail;promotion表结构:gift ,minretail ,maxretail。要根据书的价格来判断客户能够得到什么礼品。也可使用JOIN连接。
SELECT TITLE,GIFT FROM BOOKS,PROMOTION
WHERE RETAIL BETWEEN MINRETAIL AND MAXRETAIL;
|
(4) 自我连接:一个表中的数据引用了同一个表中存储的其他数据
例:customers表referred列存储了介绍该新客户的个人的客户号
SELECT R.FIRSTNAME,R.LASTNAME,C.LASTNAME REFERRED
FROM CUSTOMERS C JOIN CUSTOMERS R ON C.REFERRED=R.CUSTOMER#;
|
(5) 外部连接
(6) 集合运算符:用来结合两个或多个select语句的结果
UNION——返回两个查询的结果,如果存在重复记录,则将删除它们
UNION ALL——在结果中包含重复的记录
INTERSECT——只列出两个查询都返回的记录
MINUS——将从输出中删除第二个查询的结果
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。