内连接查询
内连接查询分为交叉连接(笛卡尔积)、相等连接和自然连接。
1、交叉连接(笛卡尔积)
交叉连接即笛卡儿乘积,是指两个关系中所有元组的任意组合。
语法
SELECT fieldlist FROM table1 CROSS JOIN table2;
SELECT fieldlist FROM table1,table2;
一般情况下,交叉查询是没有实际意义的,容易造成数据的冗余,查询效率非常低
2、内连接
内连接是指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件,将两张表的列组合在一起形成新的结果表,也可以说成等值连接
内连接的连接条件是将两个表的之间的关联列连接起来,通常为主键与外键连接
语法
SELECT fieldlist FROM
table1 (INNER) JOIN table2
ON table1.column1=table2.column2
(WHERE condition);
其中括号中的内容可以省略。
为了方便操作,可以给表取别名,用简单字母代替复杂的表名
如 orders(订单表)可以写成 orders o,后面的o即别名。
注意:选择的列两张表都有时,要选择其中一张表的列
如:orders(订单表)o 和ordersdetail(订单详情表) od 中都有goodsID时要写成
SELECT o.goodID
3、自然连接
自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。而等值连接并不去掉重复的属性列。
语法
SELECT fieldlist FROM table1 NATURAL JOIN table2 (WHERE condition)
多表连接查询
查询的信息来源于多张表时可以通过两两相连的方式来建立多表查询
1、多表连接查询方法
语法:
SELECT fieldlist FROM
table1 JOIN table2 ON
table1.column1=table2.column2_1
JOIN table3 ON
table2.column2_2=table3.column3
(WHERE condition)
2、简单多表查询
语法:
SELECT fieldlist FROM
table1,table2,table3
WHERE table1.column1=table2.column2_1
AND table2.column2_2=table3.column3
(AND 其他条件)