sql server 各种查询语句详解left jion,right join,full join ,join,inner join ,union all,union等

原创 2017年01月03日 14:35:54

建库建表

create database testDataBase

create table TStudent
(
    Stuid   int identity (1,1) PRIMARY KEY,
    StuName varchar(50),
    StuClass int FOREIGN KEY REFERENCES TClass(ClassId)
)

create table TClass
(
    ClassId  int identity (100,1) PRIMARY KEY,
    ClassName varchar(50)
)


create table teacher
(
    tid  int identity (10,1) PRIMARY KEY,
    tname varchar(50),
    tage int ,
    CountryName varchar(50) FOREIGN KEY REFERENCES Country(cname)
)

create table Country
(
    Stuname varchar(50) ,
    cname varchar(50) primary key
)

–内连接相关知识
–1.等值连接
–1.1 概念:在连接条件中使用等于号(=)运算符,其查询结果中列出被连接表中的所有列,包括其中的重复列。

select * from  TStudent ts,TClass tc where ts.StuClass = tc.ClassId 

–这条语句可以采用inner join
–等于

select * from TStudent ts inner join TClass tc on ts.StuClass = tc.ClassId 

–2.不等连接
–2.1概念:在连接条件中使用除等于号之外运算符(>、<、<>、>=、<=、!>和!<)
– 各类>、<、<>、>=、<=、!>和!< 都可以试试看

select * from TStudent ts inner join TClass tc on ts.StuClass !> tc.ClassId

–外连接相关知识
–1.左连接 left join
–1.1 概念:返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。

select * from TStudent ts left join TClass tc on ts.StuClass = tc.ClassId

–1.2总结:左连接显示左表全部行,和右表与左表相同行。

–2.右连接 right join
–2.1 恰与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。

select * from TStudent ts right join TClass tc on ts.StuClass = tc.ClassId

–2.2总结:右连接恰与左连接相反,显示右表全部行,和左表与右表相同行。

–3.全连接 full join
–3.1概念:返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值

select * from TStudent ts  full join TClass tc on ts.StuClass = tc.ClassId

–3.2总结:返回左表和右表中的所有行。

–4.交叉连接( 笛卡尔积) CROSS JOIN
–4.1 概念:不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积
–(例如:TStudent和TClass,返回4*4=16条记录),如果带where,返回或显示的是匹配的行数。
–不带where 条件写法

select * from TStudent  cross join TClass

–也等于

select * from TStudent , TClass

–4.2有where子句,往往会先生成两个表行数乘积的数据表,然后才根据where条件从中选择。

select * from TStudent ts cross join TClass tc where ts.StuClass = tc.ClassId   

–(注:cross join后加条件只能用where,不能用on)

–5 联合查询 union , union all
–5.1 找到所有的班级编号:

select StuClass from TStudent
union 
select ClassId from TClass 

–5.2
–Union all这个指令的目的也是将两个SQL语句的结果合并起来,不过它与union的不同之处在
–Union all会将所有的结果都列出来,包括重复的结果,这是它与union的不同之处。
–union all规则
–就是把2个具有相同列及数据类型的 结果 放到一起显示,并且不去重。
–select a,b,c from table1 union all select ca,cb,cc from table2

select a,b,c from table1  union all select ca,cb,cc from table2
select StuClass from TStudent
union  all
select ClassId from TClass 

–6.intersect用法和minus用法:
–6.1 intersect用法

select tname as '相同名' from teacher  intersect select Stuname from Country

–6.2 minus用法
–Minus指令是运用在两个SQL语句上,它先找出第一个SQL语句所产生的结果,然后看这些结果
–有没有在第二个sql语句的结果中,如果有的话就去除。还有一点就是如果第二个sql语句所产生
–的结果没有在第一个sql语句所产生的结果内,那么这个数据也去除。

select * from teacher
select tname  from teacher  
minus   
select Stuname from Country
版权声明:本文为博主原创文章,未经博主允许不得转载。

sql优化实战:把full join改为left join +union all(从5分钟降为10秒)

今天收到一个需求,要改写一个报表的逻辑,当改完之后,再次运行,发现运行超时。 因为特殊原因,无法访问客户的服务器,没办法查看sql的执行计划、没办法知道表中的索引情况,所以,尝试从语句的改写上来优化。...
  • yupeigu
  • yupeigu
  • 2016年12月09日 18:18
  • 1338

mysql 语句 union ,union all left join,right join

1、union与union all union :自动去除重复的数据,然后合并结果集 union all :不去除重复的数据,直接合并结果集 2、left join 和right join ...
  • zhujianli1314
  • zhujianli1314
  • 2015年12月16日 14:39
  • 621

SQL中INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN区别

sql中的连接查询有inner join(内连接)、left join(左连接)、right join(右连接)、full join(全连接)四种方式,它们之间其实并没有太大区别,仅仅是查询出来的结果...
  • Rongbo_J
  • Rongbo_J
  • 2015年06月03日 22:17
  • 3465

关于sql server中的 jion,inner join, left join ,left outer join, right join,right outer join 的几点使用心得

平时我们做关联,一般都是2~3张表,不太关注这样繁杂的写法,那今天咱们就看看这些写法吧 对将要说的这三种,先说一下要介绍的要点:on后面的条件可以放几个?什么时候结合着where条件一起使用? 大家可...
  • flydragon0815
  • flydragon0815
  • 2015年05月29日 13:54
  • 1757

Mysql----Join用法(Inner join,Left join,Right join, Cross join, Union模拟Full join)及---性能优化

前期数据准备 CREATE TABLE  atable( aID int( 1 ) AUTO_INCREMENT PRIMARY KEY , aNum char( 20 )); CREATE TA...
  • oChangWen
  • oChangWen
  • 2016年08月28日 19:45
  • 3389

SQL中 inner join、 left join 、right join、 outer join之间的区别

转自网络 举个例子你就能知道了! A表(a1,b1,c1) B表(a2,b2) a1 b1 c1 a2 b2 01 数学 95 01 ...
  • u013481061
  • u013481061
  • 2014年12月09日 12:48
  • 2891

SQL Server联合查询,left join和right join以及inner join的比较

有如下测试数据表 jointest.sql           testjoin.sql
  • u010300947
  • u010300947
  • 2014年07月15日 14:12
  • 1412

数据库查询常用关键字JOIN与LEFT JOIN/UNION与UNION ALL/GROUP BY

今天来回顾一下数据库查询中,常用的几个关键字。关注这些细节,对于我们 写出高效的SQL语句,还是有帮助的。    1,JOIN 与 LEFT JOIN JOIN,等价于INNER JOI...
  • reggergdsg
  • reggergdsg
  • 2017年03月11日 15:38
  • 771

sql left join inner right join 以及on 和where的条件顺序

left join SELECT * FROM tab1 LEFT JOIN tab2 ON(tab1.size =tab2.`size`) SELECT * FROM tab1 LE...
  • ruanjian11110
  • ruanjian11110
  • 2016年09月20日 15:29
  • 1410

数据库表的连接(Left join , Right Join, Inner Join)用法详解

Left Join, Inner Join 的相关内容,非常实用,对于理解原理和具体应用都很有帮助! left join 是left outer join的简写,left join默认是outer属...
  • u014285517
  • u014285517
  • 2015年12月13日 20:45
  • 5010
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sql server 各种查询语句详解left jion,right join,full join ,join,inner join ,union all,union等
举报原因:
原因补充:

(最多只允许输入30个字)