join的范例
1. 内联络:将两个表中存在联络关联的字段相符联络关联的那些纪录构成纪录集的联络。
2. 外联络:分为外左联络和外右联络。
案例背景
create table java (name varchar(255)); insert into java values ('java1'),('java2'),('blue'); create table mysql (name varchar(255)); insert into mysql values ('mysql1'),('mysql2'),('blue');
内联络
select * from java,mysql where java.name=mysql.name; SELECT * FROM java JOIN mysql ON java.name=mysql.name; SELECT * FROM java INNER JOIN mysql ON java.name=mysql.name; SELECT * FROM java CROSS JOIN mysql ON java.name=mysql.name; SELECT * FROM java STRAIGHT_JOIN mysql ON java.name=mysql.name;
这四个语句都是内联络,返回效果都是
+------+------+ | name | name | +------+------+ | blue | blue | +------+------+
table_reference条目中的每一个逗号都看做相称于一个内部团结
默许的JOIN都是INNER JOIN
CROSS JOIN从语法上说与INNER JOIN同等
STRAIGHT_JOIN与JOIN雷同。除了有一点不一样,左表会在右表之前被读取。STRAIGH_JOIN能够被用于如许的状况,即团结优化符以毛病的递次排列表。
内联络的语法以下:
join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition] | table_reference STRAIGHT_JOIN table_factor | table_reference STRAIGHT_JOIN table_factor ON condition
外联络
左联络
SELECT * FROM java LEFT JOIN mysql ON java.name=mysql.name;
效果是
+-------+------+ | name | name | +-------+------+ | java1 | NULL | | java2 | NULL | | blue | blue | +-------+------+
所以从上面效果看出,由于Java表中的java1和java2纪录的name没有在MySQL表中有对应name,因而为空,但java 一切的列栏仍有java1和java2纪录,mysql表一切列栏为NULL。而剩下的blue的那条纪录就是java表和mysql表内衔接的效果。
假如关于在LEFT JOIN中的ON或USING部份中的右表没有婚配的纪录,则一切列被设置为NULL的一个行被用于右表。假如一个表在别的表中没有对应部份,您能够运用这类要领在这类表中查找纪录:
SELECT * FROM java LEFT JOIN mysql ON java.name=mysql.name WHERE mysql.name IS NULL;
该sql找出在java的人,然则不在mysql里的人,这里显著是职员'java1'和'java2'相符要求。
右联络
SELECT * FROM java RIGHT JOIN mysql ON java.name=mysql.name;
返回效果是
+------+--------+ | name | name | +------+--------+ | NULL | mysql1 | | NULL | mysql2 | | blue | blue | +------+--------+
右联络和左连接效果相似,只是此次是mysql表保留一切的效果集。
外联络的语法
join_table:| table_reference LEFT [OUTER] JOIN table_reference join_condition | table_reference NATURAL [LEFT [OUTER]] JOIN table_factor | table_reference RIGHT [OUTER] JOIN table_reference join_condition | table_reference NATURAL [RIGHT [OUTER]] JOIN table_factor
USING(column_list)子句
用于为一系列的列举行定名,这些列必需同时在两个表中存在
SELECT java.*,mysql.* FROM java LEFT JOIN mysql USING (name);
效果返回
+-------+------+ | name | name | +-------+------+ | java1 | NULL | | java2 | NULL | | blue | blue | +-------+------+
联络的运算递次
SELECT * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c); --相称于 SELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)
括号关于join的递次的影响
SELECT t1.id,t2.id,t3.id FROM t1,t2 LEFT JOIN t3 ON (t3.id=t1.id) WHERE t1.id=t2.id; --实际上这么实行 SELECT t1.id,t2.id,t3.id FROM t1,( t2 LEFT JOIN t3 ON (t3.id=t1.id) ) WHERE t1.id=t2.id; --应当这么写 SELECT t1.id,t2.id,t3.id FROM (t1,t2) LEFT JOIN t3 ON (t3.id=t1.id) WHERE t1.id=t2.id;
在这里括号是相称主要的,因而今后在写如许的查询的时刻我们不要忘记了多写几个括号,最少如许能防止许多毛病。
相干引荐:
实例详解javaScript中split与join的区分
MySQL中关于Join的运用示例分享
sql顶用JOIN USING怎样简化JOIN ON的实例
以上就是Mysql中的join操纵实例分享的细致内容,更多请关注ki4网别的相干文章!