一、首先我们得先知道什么时候使用连接查询呢?
在我们所需要查询的数据不在同一张表格时,就需要我们使用到连接查询。
而连接查询就是将要查询的数据所在的表格连接成一张表格。
二、什么是内连接查询呢?
查询的信息来源于多张表格,就可以通过多表连接进行查询,一般适用于两张表格
1、内连接分3种:交叉连接,相等连接,自然连接
内连接的关键词:
CROSS JOIN 或 JOIN,NATURAL JOIN,ON则是连接表与表之间的条件
语法:SELECT table(表名)/column(列名)/* FROM table1 JOIN table2 ON
table1.column1=table2.column2
等价于
ELECT table(表名)/column(列名)/* FROM table1,table2 where
table1.column1=table2.column2
2、注意:column1,column2列名大多数时候基本相同,但也有不同,在不同时就要考虑是否符合逻辑
3、自然连接是一种比较特殊的连接,自然连接把两张表连接起来后会自动把重复的列删去,而普通的表不能
语法:SELECT table(表名)/column(列名)/* FROM table1 NATURAL JOIN table2
三、什么是多表连接查询呢?
查询的信息来源于多张表格,就可以通过多表连接进行查询,一般适用于三张或三张以上的表格
1、多表连接的语法
SELECT table(表名)/column(列名)/* FROM table1,table2,table3
where table1.column1=table2.column2 and table2.column2=table3.column3
2、注意1:表与表两两连接之后是跟的and不是ON
注意2:column1,column2,column3列名大多数时候基本相同,但也有不同,在不同时就要考虑是否符合逻辑
注意3:写列名的时候要表名是在哪个表里,比如:table1.column1
四、那到底该如何使用呢?可以接着往下看
1、
goods表
type表
那我们该如何把goods表和type表连接呈现出上面表所要的形式呢,首先我们可以分析是两张表连接,所以可以使用内连接方法,代入语法:
ELECT table(表名)/column(列名)/* FROM table1,table2 where
table1.column1=table2.column2
可得代码:
ELECT GoodsName 商品,TypeName 分类 FROM goods,type where
goods.TypeID=type.TypeID
2、
接下来让我们从第一题更深入一点,在第一题的基础是增加量了分类和统计数量,那么提到这两个我们可以想到,分类用group by 子句,统计数量我们可以用count()函数,那么我们可以从第一题的代码进行修改,从而得出代码:
ELECT ypeName 分类,count(TypeName) 数量 FROM goods,type where
goods.TypeID=type.TypeID group by 数量
3、user表
orders 表
ordersdetail表
goods表
第三题就比较难了,要连接四张表合成类似于最后一张表,所以我们分析得知要使用多表连接语法,那接下来让我们看看该怎么做,代入语法:
SELECT table(表名)/column(列名)/* FROM table1,table2,table3
WHERE table1.column1=table2.column2 and table2.column2=table3.column3
可得:
SELECT user.name,orders.OrderDate,goods.GoodsName,ordersdetail.Quantity
FROM user,orders,goods,ordersdetail
WHERE
user.UserID=orders.UserID and ordes.OrdersID=ordersdetail.OrdersID and
ordersdetail.GoodsID=goods.GoodsID