`

[#0x003A] join

 
阅读更多

  来自wikipedia。仅作总结。

  假设有两张表:  

  Cross Join: 即笛卡尔乘积(Cartesian Product)。标准语法为:

SELECT *
FROM   employee CROSS JOIN department;

也可以隐式地写为:

SELECT *
FROM   employee, department;

得到的表结构为(LastName, DepartmentID, DepartmentID, DepartmentName)

 

  Inner Join: 不标准地说,Inner Join就是Cross Join加上了一个where子句,如:

SELECT *  
FROM   employee, department 
WHERE  employee.DepartmentID = department.DepartmentID;

当然,这也是隐式的写法。标准语法为:

SELECT *
FROM   employee INNER JOIN department 
ON     employee.DepartmentID = department.DepartmentID;

 

  ★★Equi-Join: 是Inner Join的特殊形式,特指where子句中的条件为Equality Comparison,如上面的例子。不过它也有自己独特的语法:

SELECT *
FROM   employee INNER JOIN department 
USING  (DepartmentID)

注意using子句会消除掉一个DepartmentID列,即得到(LastName, DepartmentID, DepartmentName),而不是(LastName, DepartmentID, DepartmentID, DepartmentName)。可以把using子句看做是特殊的where子句。

 

  ★★★★Natural Join: 是使用using子句的Equi-Join的特殊形式。Natural Join不用指定Equality Comparison的Column,它会自动查找做Natural Join的表中同名的Column,隐式地在这个Column上使用using子句。它的标准语法为:

SELECT *
FROM   employee NATURAL JOIN department;

如果有多个同名Column(或者USING(Column1, ..., Column N)),则必须这多个Column都相等的列才被检入Join的结果中。

 

  Outer Join: Outer Join的定义不太好描述,我们先来看看Inner Join的示意图:

由于(John, NULL)和(35, Marketing)在对面表中没有匹配的记录,所以它们不会出现在Inner Join的结果中,而Outer Join就可以让这些没有匹配的记录出现在结果中。

 

  ★★Left Outer Join: 指“LEFT OUTER JOIN”关键字左方的表中的记录都会出现在结果中,如:

SELECT *  
FROM   employee  LEFT OUTER JOIN department  
ON     employee.DepartmentID = department.DepartmentID;

 得到的结果是:

示意图为:

 

  ★★Right Outer Join: 指“RIGHT OUTER JOIN”关键字右方的表中的记录都会出现在结果中,如:

SELECT * 
FROM   employee RIGHT OUTER JOIN department 
ON     employee.DepartmentID = department.DepartmentID;

得到的结果是:

示意图为:

 

  ★★Full Outer Join: 全外联结,即左外联结和右外联结的综合(并集)。如:

SELECT *  
FROM   employee FULL OUTER JOIN department 
ON     employee.DepartmentID = department.DepartmentID;

得到的结果为:

 

 

  Self Join: 指表与自身的联结。

 

  • 大小: 6.1 KB
  • 大小: 12.8 KB
  • 大小: 7.1 KB
  • 大小: 14.8 KB
  • 大小: 7.7 KB
  • 大小: 16 KB
  • 大小: 8.5 KB
0
0
分享到:
评论

相关推荐

    下面是一系列蓝屏中可能出现的代码

    130 0x00000082 Attempt to use a file handle to an open disk partition for an operation other than raw disk I/O. 131 0x00000083 尝试将档案指针移至档案开头之前。 132 0x00000084 无法在指定的装置或档案...

    获取USB摄像头的1080p的JPEG格式的图片20180608_1806.7z

    // unsigned char head[54] = {0x42,0x4d,0x36,0x10,0x0e,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0xe0,0x01,0x00,0x00,0x01,0x00,0x18,0x00,0x00,0x00,0x00,0x00,...

    sql最全的常用命令语句

    from tb a inner join master.sys.dm_exec_sessions b on a.session_id=b.session_id ) select a.*,connect_time,client_tcp_port,client_net_address from tb1 a inner join master.sys.dm_exec_connections b on a...

    微软内部资料-SQL性能优化3

    For example, suppose a transaction scanned a page using an S lock and then subsequently decided to perform a row level update. The row would obtain an X lock, but now the page would require an IX ...

    Java语言程序设计(一)真题及答案.doc

    A.sleep() B.notify() C.wait() D.join() 正确答案:B 您的答案: 本题解析: 暂无解析 2.以下标识符中,不是Java语言关键字的是()。 A.wait B.new C.long D.switch 正确答案:A 您的答案: 本题解析: 暂无解析 3....

    c++ 面试题 总结

    memset(a,0,sizeof(a)); int i=0,j; char t; cin.getline(a,50,'\n'); for(i=0,j=strlen(a)-1;i(a)/2;i++,j--) { t=a[i]; a[i]=a[j]; a[j]=t; } cout<<a; } //第二种 string str; cin>>str; str....

    python 刷题时遇到的基础知识

    ‘’.join():链接字符串数组 一: hex(x):cross_mark:10进制整数 返回16进制数,以字符串形式表示 hex(-42) ‘-0x2a’ oct(x):cross_mark:10进制整数 返回8进制数,以字符串形式表示 bin(x):x – int 或者 long int...

    CE中文版-启点CE过NP中文.exe

    Here's a new version for the hollidays. Mainly minor improvements and some small bugfixes, but also a new 'ultimap like' feature called Code Filter for which you don't need any special hardware for. ...

    经典SQL语句大全

    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where ..... 12、说明:日程安排提前五分钟提醒 SQL: select * from 日程安排 where datediff('minute',f...

    数据库操作语句大全(sql)

    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where ..... 12、说明:日程安排提前五分钟提醒 SQL: select * from 日程安排 where datediff('minute',f...

    sql经典语句一部分

    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where ..... 12、说明:日程安排提前五分钟提醒 SQL: select * from 日程安排 where datediff('minute',f...

    自平衡小车代码

    static const double Q_angle=0.001, Q_gyro=0.003, R_angle=0.5,dtt=0.005,C_0 = 1; double q_bias, angle_err, PCt_0, PCt_1, E, K_0, K_1, t_0, t_1; double angle,angle_dot,aaxdot,aax; double position_dot,...

    hls.min.js

    return t[i].call(a.exports,a,a.exports,e),a.l=!0,a.exports}var r={};return e.m=t,e.c=r,e.d=function(t,r,i){e.o(t,r)||Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){...

    Madness:递归下降到疯狂

    " F " )let hex = digit + |> map { strtol ( join ( " " , $0 ), nil , 16 ) }parse ( % " 0x " *> hex, " 0xdeadbeef " ) // => 3,735,928,559 您的解析器可以直接生成自己的模型对象,从而使Madness非常适合在...

    Jupyter:A Jupyter Notebook Repo, Diaries, Codes 各种东西

    This is a README file generated by IMSE/nemosailAuthor: IMSE/nemosailE-mail: nemosail AT foxmail.comAMP: Algorithm, Machine, PeopleIf you like this, please send some ethereum to my wallet: 以太坊 : 0x...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    $a = 0x12; # 十六进制数(等于十进制数的18) $a = 1.234; # 浮点数"双精度数" $a = 1.2e3; # 双精度数的指数形式 字符串 字符串可以由单引号或双引号引出的字段定义。注意不同的是被单引号引出的字符串是以字面...

    eac3to V3.17

    * fixed: downconverting WAV files with 0x3f channel mask didn't work * fixed: log output "remaining delay [...]" was sometimes wrong for AC3 tracks * fixed: silent frame creation was tried for E-AC3 ...

Global site tag (gtag.js) - Google Analytics