sql基础---sql连接查询


sql基础---sql连接查询


        

         这两天在项目中写连接查询的时候突然回忆了一下各种连接查询的语法、结果等,发现自己出了经常用的left join…on…,和等值连接以外其他的都不是很确定,于是乎就看看了相关的资料便有了这篇博文。

 

         概述


         SQL-92标准所定义的FROM子句的连接语法格式为:

         FROM join_table join_type join_table

         [ON (join_condition)]

         其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接

         join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。

         为了更好的说明这些连接关系,我建立一个测试库(包括user和userdetail两张表,都没有设置主键)具体的表格结构如下:

 

         内连接


         内连接(INNERJOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种

 

         等值连接

         Sql语句

SELECT * FROM `user` INNER JOIN userdetailON `user`.id = userdetail.id;
SELECT * FROM `user`,userdetail WHERE`user`.id = userdetail.id;


         执行结果

         上面两条sql语句是等效的,查询出的结果入下:

         自然连接

         Sql语句

SELECT * FROM `user` NATURAL JOINuserdetail;


         执行结果

         不等连接

         Sql语句

SELECT * FROM `user`,userdetail WHERE`user`.id <> userdetail.id;


         执行结果

 

         外连接


         外连接分为左外连接(LEFT OUTER JOINLEFT JOIN两者是等效的)、右外连接(RIGHT OUTER JOINRIGHT JOIN)全外连接(FULL OUTER JOINFULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行

 

         左外连接

         Sql语句

SELECT * From `user` LEFT OUTER JOINuserdetail on `user`.id = userdetail.id;
SELECT * From `user` LEFT JOIN userdetailon `user`.id = userdetail.id;


         执行结果

         上面两句效果相同,OUTER关键字可以省略

 

         右外连接

         Sql语句

SELECT * FROM `user` FULL OUTER JOINuserdetail ON `user`.id= userdetail.id;


         执行结果

 

        

          全外连接

         Sql语句

SELECT * FROM `user` FULL OUTER JOINuserdetail ON `user`.id= userdetail.id;


         执行结果

         我用的mysql做的测试,而mysql不支持全外连接所以这里我用leftjoin、union、right join代替其所得执行结果

(SELECT * From `user` LEFT JOIN userdetailon `user`.id = userdetail.id) UNION (SELECT * FROM `user` RIGHT JOIN userdetailon `user`.id = userdetail.id);

 

         交叉连接

         交叉连接(CROSSJOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

         Sql语句

SELECT * FROM `user` CROSS JOIN userdetail;


         执行结果

 

         总结

         上面就是sql中的各种连接,自己写了一遍代码之后理解深刻多了,如果你也不是很轻快,建议自己也做个测试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值