05.sql的连接

sql的连接

92语法
  • 语法规则:
select t1.column,t2.column
from t1,t2
where t1.c1 = t2.c1
  • 在where子句中写入连接条件

  • 当多个表中有重名的列,必须在列名之前加上表名

  • 连接类型:

    • 笛卡尔积

      select 字段列表 from t1,t2,t3
      

      检索出的行数是两个表的行数的乘积

      检索出的列数是两个表的列数相加

      应该保证所有联结都有where子句,不然数据库返回比想要的数据多得多的数据

    • 等值连接 : equi join

      select 字段列表 from t1,t2,t3
      where t1.c1 = t2.c1 and t1.c2 = t3.c2
      

      使用and操作符增加查询条件

      多于两个表的连接

      ​ 为了连接n个表,至少需要n-1个连接条件

    • 非等值连接: non - equi join

      -- !=, >, <, >=, <=, between and
      select 字段列表 from t1,t2,t3
      where t1.c1 != t2.c1 and t1.c2 != t3.c2
      
    • 外连接: outer join

      外连接运算符是(+)

      有左外连接和右外连接

      -- 左外:主表在左边
      select t1.c1,t1.c2,t2.c3
      from t1,t2
      where t1.c1 = t2.c1(+);
      -- 右外:主表在右边
      select t1.c1,t1.c2,t2.c3
      from t1,t2
      where t1.c1(+) = t2.c1;
      
    • 自连接: self join

      select 字段列表 from t t1,t t2
      where t1.c1 = t2.c2
      
99语法(现在使用的)

​ 针对92语法的缺点进行改正;92语法的缺点:语句过滤条件和表连接条件都在where子句中当条件过多,连接多的时候容易造成混淆

新增table join句法结构:

  • cross join : 交叉连接

    ​ 产生一个笛卡尔积

    select t1.c,t2.c from t1 cross join t2
    
  • natural join

    • 自然连接 natural join子句基于两个表中列名完全相同的列产生连接
    • 两个表有相同的列
    • 数据类型相同
    • 从两个表中选出连接列的值相等的所有行
  • using子句

    • using子句引用的列在sql任何地方不能使用表名或者别名做前缀,同样适合natural子句
  • on 子句

    • 为了设置连接条件或者指定连接的列,需要使用on自居
    • 连接条件与其他的查询条件分开书写
    • 使用on子句查询语句更容易理解
  • left outer join

    • 会返回所有左边表中的行,即使在左边的表中没有可对应的列值(left outer join的左边)
  • right outer join

    • 会返回所有右边表中的行,即使在右边的表中没有可对应的列值(right outer join的右边)
  • full outer join

    • 相当于左外和右外连接的和
  • inner outer join

    • 两张表的连接查询,只会查询出有匹配记录的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值