sql中inner join, left join , right join ,full join ,cross join 的用法
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将不使用索引。 一个是把SQL语句写到客户端,可以使用DataSet进行加工; groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。 语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的! 以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了 财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的.. 另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程); sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西 大家注意一点。如下面的例子:
页:
[1]