T-SQL连接查询,基础连接理解

  

图形说明:

除运算

详细说明: 

  

  使用连接查询时,必须使用from子句中指定两个或两个以上的表。连接查询又称多表查询。

  使用连接查询时应该在列名前加表名作为前缀。如果不同表之间列名不同,可以不加表名前缀,如果不同表名存在相同的列名,则必须加前缀。

  1. 笛卡尔积

    当连接条件无效或被忽略,以及第一个表中所有行和第二个表中所有行都发生连接时,所有行的组合都出现,这种结果称为笛卡尔积。其实就是A X B的组合数。非常庞大不建议使用

(1)       patient_queue表中总数为2700

      sql》select count(*) from patient_queue

      count(*)

      2700

(2)       doctor表中总数为519

      sql》select count(*) from doctor

      count(*)

      519

(3)       笛卡尔积patient_queue X doctor记录总数为2700*519=1401300

      Sql * from patient_queue,doctor

  2.等值连接

    两张表中必须有相等的列值,一般作为where子句的条件,连接运算符为“=”,通常这样的条件包含一个主键和一个外键

    语法:

    Select table1.column,table2.column

    From table1,table2

    Where table1.column1=table2.cloumn2

    使用相等连接执行主从查询

  3.不等值连接(一般连接)

    等值连接运算符为“=”,如果采用其他运算符则称非等值连接

  4.自连接

    把某个表和其自身相连接(树形结构用的比较多)

  5.内连接和外连接

    内连接返回满足条件的记录,外连接返回满足和不满足条件的记录,等值连接是内连接,外连接包含左外连接、右外连接和完全外连接。

    语法

    Select table1.column,table2.column

    From table1 [inner | left | right | full ] join table2

    On table1.column1=table2.column2

  5.1内连接

           显示table1和table2表中满足列相等条件的共同记录(table1∩table2)

                                  

           例:查询部门编号为10的雇员姓名和部门名称

           Sql》select emp.ename,dept.dname,dept.deptno

                    From dept inner join emp

                    On dept.deptno=emp.deptno and dept.deptno=10

                   

  5.2 左外连接

    显示table1表和table2表满足列相等条件的共同记录,以及左边表的其他记录(table1 以table1表为主列数)

                           

     例:显示部门编号为10的部门名称、雇员名称,以及其他部门名称

      SQL》select dname,ename

        From dept left join emp

        On dept.deptno=emp.deptno and dept.deptno=10

                                              

    例2:使用(+)操作符执行左外连接。

      (+)操作符要放在行数较少的一端。本例中部门多 雇员少,(+)放在雇员一边

        SQL》select dname,ename

        From dept,emp

        Where dept.deptno=emp.deptno(+) and emp.deptno(+)=10

    5.3 右外连接

                 显示table1表和table2表满足列相等条件的共同记录,以及右边table2表的其他记录。(table2 以table2表为主列数)

                                    

    例1:显示部门编号为10的部门名称、雇员名称,以及其他雇员姓名

      SQL》select dname,ename

        From dept right join emp         

         On dept.deptno=emp.deptno and deptno=10

                        

                               

       例2:使用(+)操作符执行右外连接

        (+)操作符要放在行数较少的一端,本例中雇员多 部门少,(+)放在部门一边。

           SQL》select dname,ename

            From dept,emp

            Where dept.deptno(+)=emp.deptno and dept.deptno(+)=10

           5.4 完全外连接

                    显示table1表和table2表满足列相等条件的共同记录,以及table1表和table2表的其他记录(table1∪table2)

                   

                    例:显示部门编号为10的部门名称、雇员名称,以及其他部门名称和其他雇员名称

                    SQL》select dname,ename

                             From dept full join emp

                             On dept.deptno=emp.deptno and deptno=10

                   

       

 

 

 

 

posted @ 2013-05-30 09:20  bjlhx15  阅读(1129)  评论(0编辑  收藏  举报
Copyright ©2011~2020 JD-李宏旭