当前位置: 首页 > news >正文

SQL世界之命令语句Ⅲ

目录

一、SQL JOIN

1.JOIN 和 Key

2.使用 JOIN

3.不同的 SQL JOIN

二、SQL INNER JOIN 关键字

1.SQL INNER JOIN 关键字

2.INNER JOIN 关键字语法

3.内连接(INNER JOIN)实例

三、SQL LEFT JOIN 关键字

1.SQL LEFT JOIN 关键字

2.LEFT JOIN 关键字语法

3.左连接(LEFT JOIN)实例

四、SQL RIGHT JOIN 关键字

1.SQL RIGHT JOIN 关键字

2.RIGHT JOIN 关键字语法

3.右连接(RIGHT JOIN)实例

五、SQL FULL JOIN 关键字

1.SQL FULL JOIN 关键字

2.FULL JOIN 关键字语法

3.全连接(FULL JOIN)实例

六、SQL UNION 和 UNION ALL 操作符

1.SQL UNION 操作符

2.SQL UNION 语法

3.SQL UNION ALL 语法

4.UNION 命令实例

5.UNION ALL

6.UNION ALL 命令实例

七、SQL SELECT INTO 语句

1.SELECT INTO 语句

2.SQL SELECT INTO 语法

3.SQL SELECT INTO 实例-制作备份复件

4.SQL SELECT INTO 实例-带有 WHERE 子句

5.SQL SELECT INTO 实例-被连接的表


一、SQL JOIN

1.JOIN 和 Key

SQL JOIN 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

注:数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。

 "Persons" 表:

Id_P

LastName

FirstName

Address

City

001

Aam

Joh

Oxd Street

London

002

Buh

Grge

Fifth Aue

New York

003

Car

Tmas

Can Street

Beijing

"Id_P" 列是 Persons 表中的的主键,没有两行能够拥有相同的 Id_P。因此当两个人的姓名完全相同时,用Id_P 区分。

"Orders" 表:

Id_O

OrderNo

Id_P

1

77895

003

2

44678

003

3

22456

001

4

24562

001

5

34764

005

"Id_O" 列是 Orders 表中的的主键,同时,"Orders" 表中的 "Id_P" 列用于引用 "Persons" 表中的人,而无需使用确切姓名。

注:"Id_P" 列把上面的两个表联系了起来。

通过引用两个表,从而获取数据:“谁订购了产品,并且他们订购了什么产品?”的SQL语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons, Orders

WHERE Persons.Id_P = Orders.Id_P

结果集:

LastName

FirstName

OrderNo

Aam

Joh

22456

Aam

Joh

24562

Car

Tmas

77895

Car

Tmas

44678

2.使用 JOIN

列出所有人的定购,使用的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons

INNER JOIN Orders

ON Persons.Id_P = Orders.Id_P

ORDER BY Persons.LastName

结果集:

LastName

FirstName

OrderNo

Aam

Joh

22456

Aam

Joh

24562

Car

Tmas

77895

Car

Tmas

44678

3.不同的 SQL JOIN

除了上面的例子中使用的 INNER JOIN(内连接),还可以使用其他几种连接:

JOIN: 如果表中有至少一个匹配,则返回行

LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

FULL JOIN: 只要其中一个表中存在匹配,就返回行

二、SQL INNER JOIN 关键字

1.SQL INNER JOIN 关键字

在表中存在至少一个匹配时,INNER JOIN 关键字返回行。

2.INNER JOIN 关键字语法

SELECT column_name(s)

FROM table_name1

INNER JOIN table_name2

ON table_name1.column_name=table_name2.column_name

注:INNER JOIN 与 JOIN 是相同的。

"Persons" 表:

Id_P

LastName

FirstName

Address

City

001

Aam

Joh

Oxd Street

London

002

Buh

Grge

Fifth Aue

New York

003

Car

Tmas

Can Street

Beijing

"Orders" 表:

Id_O

OrderNo

Id_P

1

77895

003

2

44678

003

3

22456

001

4

24562

001

5

34764

005

3.内连接(INNER JOIN)实例

列出所有人的定购,使用的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons

INNER JOIN Orders

ON Persons.Id_P=Orders.Id_P

ORDER BY Persons.LastName

结果集:

LastName

FirstName

OrderNo

Aam

Joh

22456

Aam

Joh

24562

Car

Tmas

77895

Car

Tmas

44678

注:INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 "Persons" 中的行在 "Orders" 中没有匹配,就不会列出这些行。

三、SQL LEFT JOIN 关键字

1.SQL LEFT JOIN 关键字

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

2.LEFT JOIN 关键字语法

SELECT column_name(s)

FROM table_name1

LEFT JOIN table_name2

ON table_name1.column_name=table_name2.column_name

注:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。

"Persons" 表:

Id_P

LastName

FirstName

Address

City

001

Aam

Joh

Oxd Street

London

002

Buh

Grge

Fifth Aue

New York

003

Car

Tmas

Can Street

Beijing

"Orders" 表:

Id_O

OrderNo

Id_P

1

77895

003

2

44678

003

3

22456

001

4

24562

001

5

34764

005

3.左连接(LEFT JOIN)实例

列出所有的人,以及他们的定购(如果有的话),使用的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons

LEFT JOIN Orders

ON Persons.Id_P=Orders.Id_P

ORDER BY Persons.LastName

结果集:

LastName

FirstName

OrderNo

Aam

Joh

22456

Aam

Joh

24562

Car

Tmas

77895

Car

Tmas

44678

Buh

Grge

注:LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。

四、SQL RIGHT JOIN 关键字

1.SQL RIGHT JOIN 关键字

RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

2.RIGHT JOIN 关键字语法

SELECT column_name(s)

FROM table_name1

RIGHT JOIN table_name2

ON table_name1.column_name=table_name2.column_name

注:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。

"Persons" 表:

Id_P

LastName

FirstName

Address

City

001

Aam

Joh

Oxd Street

London

002

Buh

Grge

Fifth Aue

New York

003

Car

Tmas

Can Street

Beijing

"Orders" 表:

Id_O

OrderNo

Id_P

1

77895

003

2

44678

003

3

22456

001

4

24562

001

5

34764

005

3.右连接(RIGHT JOIN)实例

列出所有的定单,以及定购它们的人(如果有的话),使用的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons

RIGHT JOIN Orders

ON Persons.Id_P=Orders.Id_P

ORDER BY Persons.LastName

结果集:

LastName

FirstName

OrderNo

Aam

Joh

22456

Aam

Joh

24562

Car

Tmas

77895

Car

Tmas

44678

34764

注:RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行。

五、SQL FULL JOIN 关键字

1.SQL FULL JOIN 关键字

只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。

2.FULL JOIN 关键字语法

SELECT column_name(s)

FROM table_name1

FULL JOIN table_name2

ON table_name1.column_name=table_name2.column_name

注:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。

"Persons" 表:

Id_P

LastName

FirstName

Address

City

001

Aam

Joh

Oxd Street

London

002

Buh

Grge

Fifth Aue

New York

003

Car

Tmas

Can Street

Beijing

"Orders" 表:

Id_O

OrderNo

Id_P

1

77895

003

2

44678

003

3

22456

001

4

24562

001

5

34764

005

3.全连接(FULL JOIN)实例

列出所有的人和他们的定单,以及所有的定单和定购它们的人,使用的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons

FULL JOIN Orders

ON Persons.Id_P=Orders.Id_P

ORDER BY Persons.LastName

结果集:

LastName

FirstName

OrderNo

Aam

Joh

22456

Aam

Joh

24562

Car

Tmas

77895

Car

Tmas

44678

Buh

Grge

34764

注:FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出。

六、SQL UNION 和 UNION ALL 操作符

1.SQL UNION 操作符

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

注:UNION 内部的 SELECT 语句必须拥有相同数量的列,并且列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

2.SQL UNION 语法

SELECT column_name(s) FROM table_name1

UNION

SELECT column_name(s) FROM table_name2

注:UNION 操作符默认选取不同的值。如果允许重复的值,使用 UNION ALL。

3.SQL UNION ALL 语法

SELECT column_name(s) FROM table_name1

UNION ALL

SELECT column_name(s) FROM table_name2

注:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

Employees_China:

E_ID

E_Name

001

Li, Hua

002

Wang, Wei

003

Car, Tmas

004

Sun, Ming

Employees_USA:

E_ID

E_Name

001

Aam, Joh

002

Buh, Grge

003

Car, Tmas

004

Gates, Bill

4.UNION 命令实例

列出所有在中国和美国的不同的雇员名:

SELECT E_Name FROM Employees_China

UNION

SELECT E_Name FROM Employees_USA

结果集:

E_Name

Li, Hua

Wang, Wei

Car, Tmas

Sun, Ming

Aam, Joh

Buh, Grge

Gates, Bill

注:这个命令无法列出在中国和美国的所有雇员。有两个名字相同的雇员,只有一个人被列出来了。UNION 命令只会选取不同的值。

5.UNION ALL

UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。

SQL Statement 1

UNION ALL

SQL Statement 2

6.UNION ALL 命令实例

列出在中国和美国的所有的雇员:

SELECT E_Name FROM Employees_China

UNION ALL

SELECT E_Name FROM Employees_USA

结果

E_Name

Li, Hua

Wang, Wei

Car, Tmas

Sun, Ming

Aam, Joh

Buh, Grge

Car, Tmas

Gates, Bill

七、SQL SELECT INTO 语句

1.SELECT INTO 语句

SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。常用于创建表的备份复件或者用于对记录进行存档。

2.SQL SELECT INTO 语法

把所有的列插入新表:

SELECT *

INTO new_table_name [IN externaldatabase]

FROM old_tablename

只把希望的列插入新表:

SELECT column_name(s)

INTO new_table_name [IN externaldatabase]

FROM old_tablename

3.SQL SELECT INTO 实例-制作备份复件

制作 "Persons" 表的备份复件:

SELECT *

INTO Persons_backup

FROM Persons

IN 子句可用于向另一个数据库中拷贝表:

SELECT *

INTO Persons IN 'Backup.mdb'

FROM Persons

在 SELECT 语句后列出这些域,以达到拷贝的目的:

SELECT LastName,FirstName

INTO Persons_backup

FROM Persons

4.SQL SELECT INTO 实例-带有 WHERE 子句

从 "Persons" 表中提取居住在 "Beijing" 的人的信息,创建一个带有两个列的名为 "Persons_backup" 的表:

SELECT LastName,Firstname

INTO Persons_backup

FROM Persons

WHERE City='Beijing'

5.SQL SELECT INTO 实例-被连接的表

创建一个名为 "Persons_Order_Backup" 的新表,其中包含了从“Persons”和“Orders”两个表中取得的信息:

SELECT Persons.LastName,Orders.OrderNo

INTO Persons_Order_Backup

FROM Persons

INNER JOIN Orders

ON Persons.Id_P=Orders.Id_P

注:从一个以上的表中选取数据也是可以做到的。 

相关文章:

  • C语言--------指针(1)
  • [技术杂谈]如何下载vscode历史版本
  • 使用Pillow来生成简单的红包封面
  • freertos 源码分析五 任务调度一
  • 时光峰峦文物璀璨,预防性保护筑安全
  • 鸿蒙4.0.0 安装minitouch
  • 优雅的从HuggingFace下载模型
  • 【算法与数据结构】583、72、LeetCode两个字符串的删除操作+编辑距离
  • Python HTTP隧道在远程通信中的应用:穿越网络的“魔法门”
  • VRRP协议详解
  • Rust开发WASM,浏览器运行WASM
  • CSS:三列布局
  • C++设计模式-简单工厂模式,工厂方法模式,抽象工厂模式
  • HarmonyOS 鸿蒙应用开发(十、第三方开源js库移植适配指南)
  • CSS太极动态图
  • flutter的key在widget list的作用以及必要性
  • JavaScript设计模式系列一:工厂模式
  • Java精华积累:初学者都应该搞懂的问题
  • js递归,无限分级树形折叠菜单
  • Rancher如何对接Ceph-RBD块存储
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 测试如何在敏捷团队中工作?
  • 从零开始在ubuntu上搭建node开发环境
  • 力扣(LeetCode)56
  • 前嗅ForeSpider教程:创建模板
  • 深入浅出webpack学习(1)--核心概念
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (一) springboot详细介绍
  • (一)插入排序
  • .a文件和.so文件
  • .NET Core 项目指定SDK版本
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET Core中Emit的使用
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET分布式缓存Memcached从入门到实战
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • /dev/sda2 is mounted; will not make a filesystem here!
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [20150321]索引空块的问题.txt
  • [20161101]rman备份与数据文件变化7.txt
  • [Asp.net mvc]国际化
  • [BZOJ 3282] Tree 【LCT】
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh
  • [CareerCup] 13.1 Print Last K Lines 打印最后K行
  • [CISCN 2019华东南]Web11