首页 > 数据库 >Mysql使用实际02---SQL表连接

Mysql使用实际02---SQL表连接

时间:2022-08-18 20:56:06浏览次数:59  
标签:02 utf8mb4 -- Mysql SXN VALUES SQL CustID 连接

1. 表连接的常见类型

在SQL语句中,关于表连接,若按照表的数量来划分,可以划分为单表连接、两表连接和两表以上连接。

关于表连接有很多种类,主要分为交叉连接,内连接,外连接(左外部连接,右外部连接,全连接),自连接。

测试样表和Sql:

业务场景:有两张表,分为为顾客表Customers和顾客订单表Orders,SQL语句分别如下:

创建Customes并初始化

-- ----------------------------
-- Table structure for customers
-- ----------------------------
DROP TABLE IF EXISTS `customers`;
CREATE TABLE `customers`  (
  `CustID` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
  `CustName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `CustCompany` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of customers
-- ----------------------------
INSERT INTO `customers` VALUES ('SXN-DD-01', '赵武', 'A');
INSERT INTO `customers` VALUES ('SXN-DD-02', '刘杨', 'B');
INSERT INTO `customers` VALUES ('SXN-DD-03', '张永为', 'C');
INSERT INTO `customers` VALUES ('SXN-DD-04', '李龙飞', 'D');
INSERT INTO `customers` VALUES ('SXN-FF-01', '邓华', 'E');
INSERT INTO `customers` VALUES ('SXN-HH-01', '张涛明', 'F');

查询结果为:

创建Order表并初始化

-- ----------------------------
-- Table structure for orders
-- ----------------------------
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders`  (
  `CustID` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
  `OrdetID` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of orders
-- ----------------------------
INSERT INTO `orders` VALUES ('SXN-DD-01', 'SCCCCFFFFFSSOX002');
INSERT INTO `orders` VALUES ('SXN-DD-02', 'SCCCCFFFFFSSOX0X2');
INSERT INTO `orders` VALUES ('SXN-DD-03', '');
INSERT INTO `orders` VALUES ('SXN-DD-04', '');
INSERT INTO `orders` VALUES ('SXN-DD-05', 'SCCCCFFFFFSSOX0H2');
INSERT INTO `orders` VALUES ('SXN-DD-06', '');

查询结果为:

2.交叉连接

2.1   SQL示例及示例结果

2.2   示例结果分析

交叉连接使用关键字CROSS JOIN进行查询,查询的结果为笛卡儿积,从如上结果可以看出,查询出的结果共有36行数据,因为Customers表和Orders表分别有6条记录,6X6=36;

2.3  小结

a.在逻辑上,交叉连接是一种最简单的联接;

b.交叉连接只实现一个逻辑处理步骤———笛卡儿积;

c.操作:对输入的两个表进行操作,把它们连接起来,生成两者的笛卡儿积,即将一个输入表的每行与另一个表的所有行进行匹配,如果一个表有m行,而另一个表有n行,将得到m x n行的接果集;

d.结构: SELECT  tb1.tb1ConumName,tb2.tb2ConumName FROM table1 AS tb1 CROSS JOIN table2 AS tb2

e.交叉连接使用的关键字:CROSS JOIN ; f.交叉连接生成的接果集是一个虚拟表,虚拟表中的各列直接源于参与连接的两个表;

3. 内连接

3.1   SQL示例及示例结果

SELECT  C.CustID,C.CustName,C.CustCompany,O.CustID,O.OrdetID
FROM Customers AS C
INNER JOIN Orders AS O
ON C.CustID=O.CustID

3.2   示例结果分析

内连接在交叉连接的基础上外加过滤条件ON,如上例子中用Customers.CustID=Orders.CustID作为过滤条件,结果显而易见

3.3  小结

内联接规则为笛卡尔积+用户谓词过滤:它首先像交叉连接一样,对两个输入表进行笛卡尔积运算,然后根据用户指定的谓词对结果进行过滤;

4   外连接

4.1 左外连接

(1)SQL示例及示例结果

SELECT  C.CustID,C.CustName,C.CustCompany,O.CustID,O.OrdetID
FROM Customers AS C
LEFT OUTER JOIN Orders AS O
ON C.CustID=O.CustID

(2)示例结果分析

如上以Cutomers表作为左保留表,连接右表Orders列CustID缺少SXN-FF-01和SXN-HH-01,为了以左保留表为基准,用NULL占位符来填充。

 

参考文献:https://www.cnblogs.com/wangjiming/p/7153533.html

标签:02,utf8mb4,--,Mysql,SXN,VALUES,SQL,CustID,连接
From: https://www.cnblogs.com/luckyplj/p/16600083.html

相关文章

  • js 学习day01andday02
    day1javascript三种引入方式三种输出方式变量数据类型查看数据类型判断是否为数字javascript三种引入方式行内式<ahref="javascript:alert('helloword')">哒哒......
  • Sqoop导入数据到mysql
    1.进入Sqoop安装目录执行bin/sqooplist-databases--connectjdbc:mysql://node1:3306/--usernameroot--passwordhadoop  #启动Sqoop连接mysql2.在虚拟机mysql中......
  • MYSQL练习题(45题)
    建表语句--学生表StudentcreatetableStudent(SIdvarchar(10),Snamevarchar(10),Sagedatetime,Ssexvarchar(10));insertintoStudentvalues('01','赵雷',......
  • MySQL多表查询与python操作MySQL
    一、navicateNavicate是一套可创建多个连接的数据库管理工具,用以方便管理 MySQL、Oracle、PostgreSQL、SQLite、SQLServer、MariaDB 和 MongoDB 等不同类型的数据库......
  • SQL语法
    SQL语句的特点不区分大小写分为DDL,DML,DQL,DCL四个分支注释格式为/**/多行注释和#单行注释注:DDL(DatadefinitionLanguage)数据库定义(比如说表,数据库)DML(Dat......
  • pt-heatbeat 监控 mysql 主从延迟
    pt-heartbeat监控MySQL主从延迟mysql在进行主从同步时,从库需要拉取主库的binlog进行sql回放,因此理论上只要主库存在数据更新,就一定存在主从延迟。mysql提供了Sec......
  • 【MySQL】什么是子查询
    目录1.谁的工资比Abel的高?2.子查询的分类1.谁的工资比Abel的高?方式一:先查询Abel的工资,再查比Abel工资高的员工SELECTsalaryFROMemployeesWHERElast_name='Abel'......
  • Navicat,pymysql,SQL注入问题
    Navicat可视化软件什么是Navicat?pyton操作MySQLSQL注入问题小知识点补充Navicat可视化软件什么是Navicat?1.Navicat是一个可多重连接的数据库管理工......
  • sql连接问题
    EstablishingSSLconnectionwithoutserver'sidentityverificationisnotrecommended.AccordingtoMySQL5.5.45+,5.6.26+and5.7.6+requirementsSSLconnecti......
  • 2022-8-18第一组孙乃宇JDBC
    JDBC概念:JavaDataBaseconnectivityJava数据库连接,Java语言操作数据库JDBc本质∶其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库商......