【SQL 学习】表连接

简介:

朋友问了关于 表连接的问题,在这里用实验说明一下:
SQL> select
  2  product_id,
  3  product_type_id,
  4  name
  5  from products;

PRODUCT_ID PRODUCT_TYPE_ID NAME                                                
---------- --------------- ------------------------------                  
         1               1 Modern
         2               1 Chemistry                                       
         3               2 Supernova                                       
         4               2 Tank War                                        
         5               2 Z Files                                         
         6               2 2412: The Return                                
         7               3 Space Force 9                                   
         8               3 From Another Planet                             
         9               4 Classical Music                                 
        10               4 Pop 3                                           
        11               4 Creative Yell                                   
        12                 My Front Line-my front line的product_type_id为空                                  
已选择12行。

SQL> desc product_types
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 PRODUCT_TYPE_ID                           NOT NULL NUMBER(38)
 NAME                                      NOT NULL VARCHAR2(10)

SQL> select * from product_types;

PRODUCT_TYPE_ID NAME                                                           
--------------- ----------                                                     
              1 Book                                                           
              2 Video                                                          
              3 DVD                                                            
              4 CD                                                             
              5 Magazine 
---上面两个查询是例子中用到的表                                                     
---内连接:只要当连接中的列包含满足连接条件的值时才会返回一行.就是说,如果某一行的连接条件中的一列值为空,那么这行就不返回.
对比 下面的内连接和外连接 发现内连接返回11行,而外连接返回12行,因为外连接可以返回值为空的行.

SQL> select p.name,pt.name
  2  from products p,product_types pt
  3  where p.product_type_id=pt.product_type_id --内连接
  4  order by p.name;
NAME                           NAME                                            
------------------------------ ----------                                      
2412: The Return               Video                                           
Chemistry                      Book                                            
Classical Music                CD                                              
Creative Yell                  CD                                              
From Another Planet            DVD                                             
Modern Science                 Book                                            
Pop 3                          CD                                              
Space Force 9                  DVD                                             
Supernova                      Video                                           
Tank War                       Video                                           
Z Files                        Video                                           
已选择11行。

SQL>--外连接:即使连接条件中的一列包含空值也会返回一行,如 My Front Line对应的product_types.name
SQL>--和Magazine对应的product.name 列
SQL> select p.name,pt.name
  2  from products p full outer join product_types pt
  3  using (product_type_id)
  4  order by p.name;
NAME                           NAME                                            
------------------------------ ----------                                      
2412: The Return               Video                                           
Chemistry                      Book                                            
Classical Music                CD                                              
Creative Yell                  CD                                              
From Another Planet            DVD                                             
Modern Science                 Book                                            
My Front Line                  --为空                                               
Pop 3                          CD                                              
Space Force 9                  DVD                                             
Supernova                      Video                                           
Tank War                       Video                                           
Z Files                        Video                                           
--为空                         Magazine                                        
已选择13行。
SQL> --左外连接:当等号右边的列对应为空时,仍然显示.
SQL> select p.name,pt.name
  2  from products p,product_types pt
  3  where p.product_type_id=pt.product_type_id(+)
  4  order by p.name;

NAME                           NAME                                            
------------------------------ ----------                                      
2412: The Return               Video                                           
Chemistry                      Book                                            
Classical Music                CD                                              
Creative Yell                  CD                                              
From Another Planet            DVD                                             
Modern Science                 Book                                            
My Front Line                  ---为空                                                
Pop 3                          CD                                              
Space Force 9                  DVD                                             
Supernova                      Video                                           
Tank War                       Video                                           
Z Files                        Video                                           
已选择12行。

SQL> ---My Front Line 对应的类型为空 左外连接显示product_types表中name为空的列
SQL> --右外连接:当等号左边的列对应为空时,仍然显示.

SQL> select p.name,pt.name
  2  from products p,product_types pt
  3  where p.product_type_id(+)=pt.product_type_id
  4  order by p.name;

NAME                           NAME                                            
------------------------------ ----------                                      
2412: The Return               Video                                           
Chemistry                      Book                                            
Classical Music                CD                                              
Creative Yell                  CD                                              
From Another Planet            DVD                                             
Modern Science                 Book                                            
Pop 3                          CD                                              
Space Force 9                  DVD                                             
Supernova                      Video                                           
Tank War                       Video                                           
Z Files                        Video                                           
 --为空                        Magazine  --my front line的product_type_id为空                                      

已选择12行。
SQL> -- name 列有值为空,右外连接显示product 表中 name 为空的列

相关文章
|
2天前
|
SQL 存储 关系型数据库
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
本文详细介绍了MySQL中的SQL语法,包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)四个主要部分。内容涵盖了创建、修改和删除数据库、表以及表字段的操作,以及通过图形化工具DataGrip进行数据库管理和查询。此外,还讲解了数据的增、删、改、查操作,以及查询语句的条件、聚合函数、分组、排序和分页等知识点。
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
|
1月前
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
54 2
|
6月前
|
SQL 存储 程序员
SQL查询的一些基本知识和学习指导
【6月更文挑战第17天】SQL查询核心包括基础选择、连接(JOIN)、子查询、聚合函数与GROUP BY、模糊匹配(LIKE)、分页与排序。JOIN操作连接多表,GROUP BY配合聚合函数做统计,LIKE用于模糊搜索。理解存储过程、触发器及自动增长列等进阶概念,通过实践提升SQL技能。
94 2
|
2月前
|
SQL 存储 数据库
SQL学习一:ACID四个特性,CURD基本操作,常用关键字,常用聚合函数,五个约束,综合题
这篇文章是关于SQL基础知识的全面介绍,包括ACID特性、CURD操作、常用关键字、聚合函数、约束以及索引的创建和使用,并通过综合题目来巩固学习。
59 1
|
4月前
|
SQL 存储 关系型数据库
PostgreSQL核心之SQL基础学习
PostgreSQL核心之SQL基础学习
61 3
|
6月前
|
SQL 存储 Java
SQL数据库学习指南:从基础到高级
SQL数据库学习指南:从基础到高级
|
5月前
|
SQL 存储 关系型数据库
关系型数据库SQL Server学习
【7月更文挑战第4天】
90 2
|
6月前
|
SQL 数据库
零基础学习数据库SQL语句之操作表中数据的DML语句
零基础学习数据库SQL语句之操作表中数据的DML语句
64 0
零基础学习数据库SQL语句之操作表中数据的DML语句
|
6月前
|
SQL 存储 关系型数据库
【数据库】SQL零基础入门学习
【数据库】SQL零基础入门学习
65 3
|
6月前
|
SQL 存储 关系型数据库
sql学习数据库
SQL(Structured Query Language)是用于管理关系型数据库的标准编程语言。学习SQL数据库涉及理解数据库的基本概念、SQL语言的结构和语法,以及如何使用SQL来查询、插入、更新