SQL数据库连接类型与常用函数

news2024/11/24 7:33:31

目录

1. 创建表插入数据

2. 连接类型

2.1 内连接

 2.2 外连接

2.2.1 左外连接

 2.2.2 右外连接

2.3 交叉连接

2.4 子查询&公用表达式

2.5 UNION连接

3. SQL常用函数

3.1 CASE WHEN函数

3.2 COALESCE函数

3.3 NULLIF函数

3.4 LEAST 和 GREATEST函数

3.5 DISTINCT 函数


1. 创建表插入数据

DROP TABLE IF EXISTS 经销商;
create table 经销商
(
  dealership_id INT PRIMARY KEY,
  street_adress TEXT,
  city TEXT,
  state TEXT,
  postal_code TEXT,
  latitude DOUBLE PRECISION,
  longitude DOUBLE PRECISION,
  date_opened TIMESTAMP,
  date_closed TIMESTAMP
)engine=innodb;

DROP TABLE IF EXISTS 销售人员;
create table 销售人员
(
  salesperson_id INT PRIMARY KEY,
  dealership_id INT,
  title TEXT,
  first_name TEXT,
  last_name TEXT,
  suffix TEXT,
  username TEXT,
  gender TEXT,
  hire_date TIMESTAMP,
  termination TIMESTAMP
)engine=innodb;

DROP TABLE IF EXISTS 顾客;
create table 顾客
(
  customer_id INT PRIMARY KEY,
  street_adress TEXT,
  city TEXT,
  state TEXT,
  postal_code TEXT
)engine=innodb;

INSERT INTO 经销商 VALUES(1,'library','GuangZhou','LF','54321',30.00,-180.88,'2023-07-10 00:00:00','2023-07-10 23:00:00');
INSERT INTO 经销商 VALUES(2,'office','XiaMeng','LF','54331',40.00,-170.88,'2023-07-10 00:00:00','2023-07-10 23:00:00');
INSERT INTO 经销商 VALUES(3,'langbao','HuangZhou','XS','54421',50.00,-160.88,'2023-07-11 00:00:00','2023-07-11 23:00:00');
INSERT INTO 经销商 VALUES(4,'yangcun','WuHan','XS','54321',60.00,-150.88,'2023-07-12 00:00:00','2023-07-12 23:00:00');
INSERT INTO 经销商 VALUES(5,'forest','ShangHai','JFJ','64321',70.00,-140.88,'2023-07-13 00:00:00','2023-07-13 23:00:00');
INSERT INTO 经销商 VALUES(6,'huayuan','BeiJing','QZ','65432',80.00,-130.88,'2023-07-14 00:00:00','2023-07-14 23:00:00');
INSERT INTO 经销商 VALUES(7,'chengbao','GuangZhou','YY','43210',90.00,-120.88,'2023-07-15 00:00:00','2023-07-15 23:00:00');
INSERT INTO 经销商 VALUES(8,'lantian','GuangZhou','DD','76543',100.00,-110.88,'2023-07-16 00:00:00','2023-07-16 23:00:00');
INSERT INTO 经销商 VALUES(9,'baiyun','XiaMeng','LF','54311',110.00,-100.88,'2023-07-16 00:00:00','2023-07-16 23:00:00');
INSERT INTO 经销商 VALUES(10,'caoyuan','XiaMeng','LF','43210',120.00,-90.88,'2023-07-17 00:00:00','2023-07-17 23:00:00');


INSERT INTO 销售人员 VALUES(2,0,NULL,'Lin','QingFeng','A','admin','female','2023-08-15 00:00:00',NULL);
INSERT INTO 销售人员 VALUES(4,1,NULL,'Li','LingXiao','A','admin1','male','2023-08-17 00:00:00',NULL);
INSERT INTO 销售人员 VALUES(6,2,NULL,'Bai','JianJian','B','admin2','female','2023-08-19 00:00:00',NULL);
INSERT INTO 销售人员 VALUES(8,3,NULL,'Ye','DanDan','B','admin3','male','2023-08-20 00:00:00',NULL);
INSERT INTO 销售人员 VALUES(10,4,NULL,'Qin','KaiKai','A','admin4','female','2023-08-25 00:00:00',NULL);
INSERT INTO 销售人员 VALUES(11,5,NULL,'Gu','ZhanGe','A','admin5','female','2023-08-28 00:00:00',NULL);
INSERT INTO 销售人员 VALUES(12,6,NULL,'Deng','XiaoWu','C','admin4','male','2023-08-30 00:00:00',NULL);
INSERT INTO 销售人员 VALUES(13,6,NULL,'Chen','HuiLai','A','admin3','male','2023-08-31 00:00:00',NULL);
INSERT INTO 销售人员 VALUES(14,8,NULL,'Xiao','FeiLun','C','admin2','female','2023-09-03 00:00:00',NULL);
INSERT INTO 销售人员 VALUES(20,9,NULL,'Guo','XiaoYang','B','admin','male','2023-09-05 00:00:00',NULL);
INSERT INTO 销售人员 VALUES(22,10,NULL,'Guo','XiaoYang','B','admin','male','2023-09-05 00:00:00',NULL);
INSERT INTO 销售人员 VALUES(23,12,NULL,'Qiu','XiaoYan','B','admin','male','2023-09-05 00:00:00',NULL);


INSERT INTO 顾客 VALUES(1,'huayuan','GuangZhou','AB','44321');
INSERT INTO 顾客 VALUES(3,'lantian','XiaMeng','AA','44021');
INSERT INTO 顾客 VALUES(4,'baiyun','GuangZhou','AR','49321');
INSERT INTO 顾客 VALUES(5,'feiji','XiaMeng','AF','44381');
INSERT INTO 顾客 VALUES(6,'xiaoniao','GuangZhou','AV','84321');
INSERT INTO 顾客 VALUES(7,'jiayuan','ShangHai','AB','44521');
INSERT INTO 顾客 VALUES(8,'guojia','GuangZhou','AQ','44321');
INSERT INTO 顾客 VALUES(9,'chengshi','GuangZhou','AO','43321');
INSERT INTO 顾客 VALUES(10,'nongcun','XiaMeng','AP','44371');
INSERT INTO 顾客 VALUES(11,'hudie','HangZhou','AY','44329');
INSERT INTO 顾客 VALUES(12,'tongnian','GuangZhou','AE','40321');
INSERT INTO 顾客 VALUES(14,'tongnian',NULL,'AE','40321');
INSERT INTO 顾客 VALUES(15,'tongnian',NULL,'AE','40321');
INSERT INTO 顾客 VALUES(16,'tongnian',NULL,'AE','40321');

2. 连接类型

2.1 内连接

SELECT * FROM 经销商 INNER JOIN 销售人员 ON 经销商.dealership_id=销售人员.dealership_id;

        从查询结果可以看出,该表是将“经销商”表连接到“销售人员”表 ,且“经销商”表在左侧,“销售人员”表在右侧。

        如果只想检索其中一个表,如“经销商”表,可使用下列语句:

SELECT 经销商.* FROM 经销商 INNER JOIN 销售人员 ON 经销商.dealership_id=销售人员.dealership_id where city='XiaMeng';
#或
SELECT J.* FROM 经销商 J INNER JOIN 销售人员 X ON J.dealership_id=X.dealership_id where city='XiaMeng';
#或
SELECT J.* FROM 经销商 AS J INNER JOIN 销售人员 AS X ON J.dealership_id=X.dealership_id where city='XiaMeng';

 2.2 外连接

        内连接只会返回来自两个表的行,并且只有当两个行都满足连接要求时才会返回,否则不会返回任一表中的任何行。

        如果希望从其中一个表中返回所有行,而不管是否满足连接要求。在这种情况下,如果连接要求未被满足,则第二个表的行将返回NULL,这样的连接称为外连接。在外连接操作后,其中至少有一个表出现在结果的每一行中。

        外连接可以分为3类:左外连接,右外连接、全外连接(mysql不直接支持全外连接full outer join)

2.2.1 左外连接

在左外连接中(left outer join),左表将返回每一行,如果右表不满足join条件,则返回NULL行。

SELECT * FROM 销售人员 X LEFT OUTER JOIN 经销商 J ON J.dealership_id=X.dealership_id;

SELECT * FROM 经销商 J LEFT OUTER JOIN 销售人员 X ON J.dealership_id=X.dealership_id;

 2.2.2 右外连接

右外连接与左外连接具有对称性,在右外连接中,右表将显示每一行,如果join条件未被满足,则左表将包含NULL值。

SELECT * FROM 经销商 J RIGHT OUTER JOIN 销售人员 X ON J.dealership_id=X.dealership_id;

SELECT * FROM 销售人员 X RIGHT OUTER JOIN 经销商 J ON J.dealership_id=X.dealership_id;

2.3 交叉连接

        交叉连接也称笛卡尔积,它将返回左表和右表的所有可能的行组合。

SELECT J.dealership_id,J.city,X.dealership_id,X.suffix FROM 经销商 J CROSS JOIN 销售人员 X;

可以看到查询结果有120行(10*12),交叉连接不需要连接条件,也被认为是一个没有连接条件的外连接。

2.4 子查询&公用表达式

子查询:使用select查询生成的表,而不是引用数据库中的现有表

SELECT * FROM 销售人员 INNER JOIN (SELECT * FROM 经销商 WHERE city='XiaMeng') d ON d.dealership_id=销售人员.dealership_id;

公用表达式:在某种意义上只是子查询的不同版本。公用表达式使用WITH子句建立临时表。

WITH d AS (SELECT * FROM 经销商 WHERE city='XiaMeng') SELECT * FROM 销售人员 INNER JOIN d ON d.dealership_id=销售人员.dealership_id;

2.5 UNION连接

UNION可以将多个查询垂直放在一起,即保持相同的列但添加多行。

SELECT street_adress,city,state,postal_code FROM 顾客 WHERE state IS NOT NULL
UNION
SELECT street_adress,city,state,postal_code FROM 经销商 WHERE state IS NOT NULL;

UNION使用注意事项:

1)UNION要求子查询具有相同名称的列和相同的列数据类型。如果没有,则查询结果不会运行。

2)在默认情况下,UNION会删除输出结果中的所有重复行。因此想要保留重复的行,可使用UNION ALL关键字。

3. SQL常用函数

3.1 CASE WHEN函数

CASE WHEN是一个允许查询将列中的各种值映射到其它值的函数。CASE WHEN语句的一般格式如下:

CASE 
    WHEN condition1 THEN value1
    WHEN condition2 THEN value2
    ……
    WHEN conditionX THEN valueX
ELSE else value
END;
SELECT *,
CASE 
  WHEN city='GuangZhou' THEN 'GuangDong'  
  WHEN city='XiaMeng' THEN 'FuJian'
  WHEN city='HangZhou' THEN 'ZheJiang'
ELSE 'Other'
END
AS province
FROM 顾客;

3.2 COALESCE函数

COALESEC函数是用标准值替换NULL值。

SELECT customer_id,city FROM 顾客;
SELECT  customer_id, COALESCE(city,'aabbcc') AS city FROM 顾客;

3.3 NULLIF函数

NULLIF函数是COALESEC的反面,将特定的值替换为NULL。

SELECT customer_id,city FROM 顾客;
SELECT customer_id,NULLIF(city,'ShangHai') AS city FROM 顾客;

3.4 LEAST 和 GREATEST函数

LEAST和GREATEST这两个函数可接受任意数量的值并分别返回最小或最大的值。如LEAST(600,900)返回600;GREATEST(600,900)返回900,它们的参数既可以是文字值也可以是数值。

SELECT dealership_id,city,postal_code,LEAST (60000,postal_code) as postal_code_new FROM 经销商;
SELECT dealership_id,city,postal_code,GREATEST (55000,postal_code) as postal_code_new FROM 经销商;

3.5 DISTINCT 函数

DISTINCT用来去除某一列中的重复值。

SELECT DISTINCT city FROM 顾客;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/744194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LayUi之树形结构的详解(附有全案例代码)

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于LayUi的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一. 什么是树形结构 二.树形结构在什么时…

表格编程之争:Python VS VBA?Excel用户:新编程语言才真香

Python和VBA哪个更好用? Python和VBA是两种不同的编程语言,它们都有自己的特点和优缺点。在表格编程方面,VBA在Excel中的应用非常广泛,可以通过宏来实现自动化操作和数据处理,也可以通过VBA代码来实现自定义函数和界面…

python qt安装软件包

安装 opencv pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/ 安装pyqt5 pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/ 安装pyqt5-tools pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/

RLHF-基于人类反馈的强化学习

RLHF 文章目录 RLHF强化学习基础回顾为什么要使用基于人类反馈的强化学习大纲RLHF的起源大预言模型中的RLHF案例 ChatGPT RLHF中的技术细节预训练语言模型训练奖励模型基于RL进行微调 RLHF 的未来 强化学习基础回顾 智能体通过采取行动与环境进行交互,并返回状态和奖…

【C语言督学营 第十八天】考研408排序大题初探(将排序思想融入题目)

文章目录 题目一分析代码实战 题目二分析代码实战 补充(快排与归并)数据结构大题注意点!!!(评分标准) 题目一 分析 (1)算法的基本设计思想 由题意知,将最小的nl2个元素放在Ai中,其余的元素放在A2中&#x…

FreeRTOS实时操作系统(十三)任务通知

系列文章目录 文章目录 系列文章目录任务通知任务通知值和通知状态任务通知值通知状态 任务通知API函数发送通知函数接收通知函数 实验测试模拟二值信号量实验模拟计数型信号量模拟事件标志组实验模拟消息邮箱实验 任务通知 任务通知:用来通知任务的,任…

ATMEGA16 Proteus仿真自动人体感应电风扇DS18B20温度 -0069

ATMEGA16 Proteus仿真自动人体感应电风扇DS18B20温度 -0069 Proteus仿真小实验: ATMEGA16 Proteus仿真自动人体感应电风扇DS18B20温度 -0069 功能: Protues版本:7.8 程序编写:ICCAVR:7.12 硬件组成:ATMEGA16单片机…

嵌入式开发之编码器速度采集

光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。这是应用最多的传感器,光电编码器是由光源、光码盘和光敏元件组成。光栅盘是在一定直径的圆板上等分地开通若干个长方形孔。由于光电码盘与电动机同轴,…

spark和zeppelin认证不一致:Only one of --proxy-user or --principal can be provided

spark和zeppelin认证不一致:Only one of --proxy-user or --principal can be provided 如果配置principal认证方式,zeppelin走的是hadoop权限,如果配置proxy-user认证方式,zeppelin走的是当前登录用户的权限(ranger控…

GitHub上cambel的ur3项目调试经验

按照https://github.com/cambel/ur3/wiki/Compile-from-source配置环境时,遇到以下问题: catkin clean时报错 [clean] Error: The current or desired workspace could not be determined. Please run catkin clean from within a catkin workspace or…

【学会动态规划】第 N 个泰波那契数(1)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 4. 空间优化 写在最后 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟…

MySQL 中索引是如何实现的,有哪些类型的索引,如何进行优化索引

MySQL 中的索引 前言 上篇文章聊完了 MySQL 中的锁,这里接着来看下 MySQL 中的索引。 一般当我们数据库中的某些查询比较慢的时候,正常情况下,一顿分析下来,大多数我们会考虑对这个查询加个索引,那么索引是如何工作的呢…

从零开始的前后端分离项目学习(前后端从零环境搭建)

一、 前后端分离介绍: 前端独立编写客户端代码(用户交互数据展示),后端独立编写服务端代码(提供数据处理接口),并提供数据接口就行。 前端通过Ajax访问后端数据借口,将model展示到…

使用VESD脉冲离子风机5年内至少可节省一半的维护成本

之前的文章有给大家详细介绍过,来自VESD的脉冲离子风机,它有着特殊的设计:插拔式结构和可水洗针架,因此对我们的很多客户来说,这款风机性价比是非常高的。 早在15年以前,VESD就对市面上大部分风机进行过测试…

解决Google浏览器网页覆盖问题

在使用 Google 进行搜索的时候出现打开新页面会覆盖当前页面的问题 针对此问题,解决方法如下: 1、首先在浏览器的地址栏中随便搜索内容 2、页面的 右上角有个⚙️的设置图标,点进去 点击 “查看所有设置” 3、在结果打开方式中进行勾选 设…

uniapp打包APP实现应用内整包更新或热更新

思路: 1.首先要理解更新方式的区别 静默更新、弱更新以及强制更新。 APP更新机制-静默更新、弱更新、强更新 - 知乎 2.其次要理解不同更新方式要用到的插件----------这里推荐插件应用市场的插件。 app升级、整包更新和热更新组件 支持vue3 支持打开安卓、苹果应…

使用 SMT求解机 根据变迁关系生成迁移后系统的状态

本文的例子来源于2011年发布的论文 IC3: Where Monolithic and Incremental Meet 文章目录 Ⅰ、变迁系统的介绍状态图变迁公式 Ⅱ、SMT求解机简介公式的计算计算另一状态 结果展示参考文献 Ⅰ、变迁系统的介绍 状态图 论文中给出了一个系统的状态迁移图和它的的变迁公式。现在…

【近场社交项目】数据库系统期末设计——概念设计部分

数据库系统期末设计——概念设计部分😎 前言🙌项目设计(1)各个实体属性ER图(2)各个业务功能的ER图 总结撒花💞 😎博客昵称:博客小梦 😊最喜欢的座右铭&#x…

【Redis】特殊数据类型 Geo (地理位置)

🎯前言 除了五中基本的数据类型外,Redis还支持两种特殊的数据类型,第一种 Geo (地理位置):用于存储地理位置相关的数据,例如经纬度、距离等。第二种 Stream (流):是一个高级的列表类型,支持对列…

Python基于pandas库导出excel文件

将Pandas数据框架导出到Excel文件中 让我们看看如何将Pandas数据框架导出到Excel文件中。 实列代码: import time import pandas as pd from io import BytesIO from flask import make_response,def export_navi():# 所有DataFrame合并集合df_list []# 创建一个数…