|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
BlackHole黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继innerjoin,fullouterjoin,leftjoin,rightjion
外部毗连innerjoin两表都满意的组合
fullouter全连两表不异的组合在一同,A表有,B表没有的数据(显现为null),一样B表有
A表没有的显现为(null)
A表leftjoinB表左连,以A表为基本,A表的全体数据,B表有的组合。没有的为null
A表rightjoinB表右连,以B表为基本,B表的全体数据,A表的有的组合。没有的为null
查询剖析器中实行:
--建表table1,table2:
createtabletable1(idint,namevarchar(10))
createtabletable2(idint,scoreint)
insertintotable1select1,lee
insertintotable1select2,zhang
insertintotable1select4,wang
insertintotable2select1,90
insertintotable2select2,100
insertintotable2select3,70
如表
-------------------------------------------------
table1|table2|
-------------------------------------------------
idname|idscore|
1lee|190|
2zhang|2100|
4wang|370|
-------------------------------------------------
以下均在查询剖析器中实行
1、外毗连
1.观点:包含左向外连接、右向外连接或完全内部连接
2.左毗连:leftjoin或leftouterjoin
(1)左向外连接的了局集包含LEFTOUTER子句中指定的左表的一切行,而不单单是连接列所婚配的行。假如左表的某行在右表中没有婚配行,则在相干联的了局集行中右表的一切选择列表列均为空值(null)。
(2)sql语句
select*fromtable1leftjointable2ontable1.id=table2.id
-------------了局-------------
idnameidscore
------------------------------
1lee190
2zhang2100
4wangNULLNULL
------------------------------
正文:包括table1的一切子句,依据指定前提前往table2响应的字段,不切合的以null显现
3.右毗连:rightjoin或rightouterjoin
(1)右向外连接是左向外连接的反向连接。将前往右表的一切行。假如右表的某行在左表中没有婚配行,则将为左表前往空值。
(2)sql语句
select*fromtable1rightjointable2ontable1.id=table2.id
-------------了局-------------
idnameidscore
------------------------------
1lee190
2zhang2100
NULLNULL370
------------------------------
正文:包括table2的一切子句,依据指定前提前往table1响应的字段,不切合的以null显现
4.完全内部连接:fulljoin或fullouterjoin
(1)完全内部连接前往左表和右表中的一切行。当某行在另外一个表中没有婚配行时,则另外一个表的选择列表列包括空值。假如表之间有婚配行,则全部了局集行包括基表的数据值。
(2)sql语句
select*fromtable1fulljointable2ontable1.id=table2.id
-------------了局-------------
idnameidscore
------------------------------
1lee190
2zhang2100
4wangNULLNULL
NULLNULL370
------------------------------
正文:前往摆布毗连的和(见上左、右毗连)
2、内毗连
1.观点:内连接是用对照运算符对照要连接列的值的连接
2.内毗连:join或innerjoin
3.sql语句
select*fromtable1jointable2ontable1.id=table2.id
-------------了局-------------
idnameidscore
------------------------------
1lee190
2zhang2100
------------------------------
正文:只前往切合前提的table1和table2的列
4.等价(与以下实行效果不异)
A:selecta.*,b.*fromtable1a,table2bwherea.id=b.id
B:select*fromtable1crossjointable2wheretable1.id=table2.id(注:crossjoin后加前提只能用where,不克不及用on)
3、交织毗连(完整)
1.观点:没有WHERE子句的交织连接将发生连接所触及的表的笛卡尔积。第一个表的行数乘以第二个表的行数即是笛卡尔积了局集的巨细。(table1和table2交织毗连发生3*3=9笔记录)
2.交织毗连:crossjoin(不带前提where...)
3.sql语句
select*fromtable1crossjointable2
-------------了局-------------
idnameidscore
------------------------------
1lee190
2zhang190
4wang190
1lee2100
2zhang2100
4wang2100
1lee370
2zhang370
4wang370
------------------------------
正文:前往3*3=9笔记录,即笛卡尔积
4.等价(与以下实行效果不异)
A:select*fromtable1,table2
如果WHERE子句的查询条件里使用比较操作符LIKE和REGEXP,MySQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。比如说,如果查询条件是LIKEabc%‘,MySQL将使用索引;如果查询条件是LIKE%abc’,MySQL将不使用索引。 |
|