当前位置:Gxlcms > 数据库问题 > MariaDB SQL INNER JOIN

MariaDB SQL INNER JOIN

时间:2021-07-01 10:21:17 帮助过:7人阅读

能够随着数据量的增长进行处理,而不会失败。一个设计良好的关系型数据库或者应用程序被称作扩展性好。

 

创建连接


 

创建连接非常简单,必须包含所有指定的表,并且说明它们是如何关联起来的。

SELECT vend_name, prod_name, prod_price
FROM vendors, products
WHERE vendors.vend_id = products.vend_id
ORDER BY vend_name, prod_name;

 

例子(以下是在不同库里面的两张不同表):

mysql> select appKeyInfo.appKey, businessId,appName, infoType, appKeyInfo.remark 
from appKeyInfo,crowdRewards.businessInfo 
where appKeyInfo.appKey=businessInfo.appKey and infoType=4 
order by appKeyInfo.id desc 
limit 10;
+------------+------------+---------+----------+-----------------------------------------+
| appKey     | businessId | appName | infoType | remark                                  |
+------------+------------+---------+----------+-----------------------------------------+
| 1194641763 | 133        |         | 4        | zhiyonginfom                            |
| 3217703708 | 132        |         | 4        | 测试使用                                |
| 1029667166 | 0          |         | 4        | sichuanyinyue                 |
| 3927050004 | 130        |         | 4        | 546546546                               |
| 1966753355 | 129        |         | 4        | king                                    |
| 2740425196 | 128        |         | 4        | 666663321                               |
| 2496853641 | 127        |         | 4        | 6666633                                 |
| 751377797  | 126        |         | 4        | 66666                                   |
| 1031297745 | 125        |         | 4        | qqqaaa                                  |
| 2061454479 | 124        |         | 4        | qqq                                     |
+------------+------------+---------+----------+-----------------------------------------+
10 rows in set (0.08 sec)

其中,

desc appKeyInfo;
+-----------------+---------------------+------+-----+---------+----------------+
| Field           | Type                | Null | Key | Default | Extra          |
+-----------------+---------------------+------+-----+---------+----------------+
| id              | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| appKey          | int(10) unsigned    | NO   | UNI | 0       |                |
| appName         | varchar(32)         | NO   |     |         |                |
| remark          | varchar(32)         | NO   |     |         |                |
| infoType        | tinyint(4) unsigned | NO   |     | 0       |                |
| appLogo         | varchar(128)        | NO   |     |         |                |
+-----------------+---------------------+------+-----+---------+----------------+
6 rows in set (0.06 sec)
desc businessDemo;
+-------------------+------------------------+------+-----+---------+----------------+
| Field             | Type                   | Null | Key | Default | Extra          |
+-------------------+------------------------+------+-----+---------+----------------+
| id                | int(10) unsigned       | NO   | PRI | NULL    | auto_increment |
| name              | varchar(64)            | NO   |     |         |                |
| appKey            | int(10) unsigned       | NO   |     | 0       |                |
| businessID        | int(10) unsigned       | NO   |     | 0       |                |
| remark            | varchar(128)           | NO   |     |         |                |
+-------------------+------------------------+------+-----+---------+----------------+
5 rows in set (0.04 sec)

 

使用WHERE来设置连接关系看起来有些奇怪,不过事实上有一个很好的理由支持这种做法。记住,当表通过SELECT语句连接起来时,关系的组织是动态。...事实上,你将第一个表中的每一行同第二个表中的每一行进行对比,WHERE事实上就是一个过滤器,使其仅仅包含匹配制定过滤器条件(连接条件)的行。没有WHERE子句,第一个表的每一行将匹配第二个表中的每一行,无论它们是否符合逻辑。

笛卡尔乘积(Cartesian product)没有使用连接条件的表关系的返回结果。返回的行数时第一个表的行数乘以第二个表的行数。

 

不要忘记WHERE子句,确保所有的连接都包含WHERE子句,否则MariaDB将返回超出你所需的数据。类似的,确保正确使用WHERE子句,错误的过滤条件将会导致MariaDB返回错误数据。

交叉连接(Cross Joins)这种就是笛卡尔乘积的连接类型。

SELECT vend_name, prod_name, prod_price
FROM vendors, products
ORDER BY vend_name, prod_name;

 

内连接


SELECT vend_name, prod_name, prod_price
FROM vendors INNER JOIN products
ON vendors.vend_id = products.vend_id;

另外,跨库的连接

select dataBaseName1.appKey,dataBaseName2.tableName2.appKey 
from tableName1 inner join dataBaseName2.tableName2
on appKeyInfo.appKey=dataBaseName2.tableName2.appKey;

等值连接(equiljoin)一个基于测试两表相等的连接。这种连接也被称作内连接。

这里的两个表关系被指定为INNER JOIN.当使用这个语法的时候,连接条件使用on来代替where子句,传递给on的条件和传递给where子句的条件相同。

 

连接多个表


 

sql没有明确限制select语句中表连接的数量。

创建连接的基本规则仍然相同,首先列出所有的表,然后定义表的关系。

SELECT prod_name, vend_name, prod_price, quantity
FROM orderitems, products, vendors
WHERE products.vend_id = vendors.vend_id
    AND orderitems.prod_id = products.prod_id
    AND order_num = 20005;

 

MariaDB SQL INNER JOIN

标签:

人气教程排行