数据库连接查询

一、联合查询

1.使用 union 连接两个 select 语句进行联合查询

select 列 1,列 2... from 表名 where 条件 union select 列 1,列 2... from 表名 where 条

件;

select vend_id,prod_id,prod_name,prod_price from products where prod_price <= 5 union select vend_id,prod_id,prod_name,prod_price from products where vend_id=1002 or vend_id=1003;

注:1)上述语句等同于

select vend_id,prod_id,prod_name,prod_price from products where prod_price <= 5 or vend_id in (1002,1003);

      2)一个 union 必须包含两个或两个以上 select 语句在 union 中的每个查询都必须包含相同的列表达式或者聚合函数

列数据类型必须是兼容的,他们不必是完全相同的类型,但必须是 MariaDB 能够转换的

union 从查询结果集中自动移除任何重复行,如果要返回所有匹配结果,用 union all代替 union

当使用 union 联合查询时只可以使用一个 order by 子句,并且必须出现在最后一个 select 语句后面

union 也适用于对不同的表进行联合查询

二、全文本搜索

1.限定条件

1)在创建表时需要指定哪些字段为全文本搜索列

2)在创建表时需要指定支持全文本搜索的数据库引擎(Aria)

注:指定的支持全文本搜索的列,MariaDB 会自动给这一列建立索引来提高全文本搜索的查询速度。(字典的目录)

使用 like 操作符配合通配符也可以实现相关关键字的查询。但速度没有全文本搜索快,查询的结果不如全文本搜索的结果智能(全文本搜索可以根据不同单词的排位值显示结果)

2.select 列名 from 表名 where match(列名) against('关键字');

select note_text from productnotes where match(note_text) against('rabbit');

越靠近每段开头,越先显示

注:如果使用 like 操作符查询

select note_text from productnotes where note_text like '%rabbit%';

3.扩展查询把rabbit显示的行 再进行查询

select 列名 from 表名 where match(列名) against('关键字' with query expansion)

select note_text from productnotes where match(note_text) against('rabbit' with query expansion扩展);

 4.布尔文本搜索必须包含哪个关键字 必须不包含哪些

select 列名 from 表名 where match(列名) against('关键字' in boolean mode);

select note_text from productnotes where match(note_text) against ('+heavy -rope*' in boolean mode);

+ 表示必须包含 

select note_text from productnotes where match(note_text) against ('+rabbit +bait' in boolean mode);

三、连接查询

1.内连接等值连接

1)查询所有供货商的 ID,名称及其供应的产品名称和产品价格:

select vendors.vend_id,vend_name,prod_name,prod_price from vendors,products where vendors.vend_id=products.vend_id;

select vendors.vend_id,vend_name,prod_name,prod_price from vendors inner join products on vendors.vend_id=products.vend_id;

2)查询所有订购了 TNT2 的客户 ID 及客户名称和客户联系人

select cust_id,cust_name,cust_contact from customers where cust_id in (select cust_id from orders where order_num in(select order_num from orderitems where prod_id='TNT2'));

select customers.cust_id,cust_name,cust_contact from customers,orders,orderitems where customers.cust_id=orders.cust_id and orders.order_num=orderitems.order_num and orderitems.prod_id='TNT2';

别名查询:

select c.cust_id,cust_name,cust_contact from customers as c,orders as o,orderitems as oi where c.cust_id=o.cust_id and o.order_num=oi.order_num and oi.prod_id='TNT2';

查找的是关键字所在行的记录

从右往左执行,从内往外执行

2.交叉连接

在连接查询时不通过 where 子句指定条件,返回的结果集成为笛卡尔乘积

3.对列和表使用别名

select c.cust_id,cust_name,cust_contact from customers as c,orderitems as oi,orders as o where c.cust_id=o.cust_id and o.order_num=oi.order_num and oi.prod_id='TNT2';

4.自连接

现有一产品被发现存在问题(物品 ID 为 DTNTR),因此要检索该产品供应商生产的所有产品

1)子查询

select vend_id,prod_id from products where vend_id in(select vend_id from products where prod_id='DTNTR');

2)自连接

select p1.vend_id,p1.prod_id from products as p1,products as p2 where p1.vend_id=p2.vend_id and p2.prod_id='DTNTR';

5.外连接

1)左外连接查询所有客户的订单信息(以左边的表为基准)

select c.cust_id,o.order_num from customers as c left outer join orders as o on c.cust_id=o.cust_id;

2)右外连接查询所有订单是哪些客户下的

select c.cust_id,o.order_num from customers as c right outer join orders as o on c.cust_id=o.cust_id;

如果是两个表里都有的列  查询的时候要制定是哪个表里的列

四、函数

1.sql 支持的函数类型

1)进行字符串操作的文本函数

2)用来对数值数据算数运算的数值函数

3)用来操作日期和时间以及从这些值中提取特定的组件的日期和时间函数

4)返回和使用 DBMS 相关的信息的系统函数

注:MariaDB 的日期格式:yyyy-mm-dd;也支持两位数年份,将 00-69 视为 2000-2069

2.计算字段

对数据库中存储的数据进行重新的格式化,格式化后的列被称为计算字段

3.拼接字段将值连接起来(通过追加的方式),构成一个单一的更长的值

4.使用 concat()、trim()函数创建拼接字段

要生成供应商报表并且需要列出供应商的位置来作为供应商名称的一部分,即格式为

vend_name(vend_country),并命名为 vend_title

select concat(rtrim(vend_name),'(',rtrim(vend_country),')') as hebing from vendors order by hebing;

rtrim 去掉右边空格 ltrim 为去掉右侧空格trim 为去掉有左右的空格

5.MariaDB 支持的运算操作符

加:+ 减:- 乘:* 除:/

查询 20005 号订单的所有产品 ID、数量、单价、总价

select order_num,prod_id,quantity,item_price,quantity*item_price as zongjia from orderitems where order_num=20005 order by zongjia;

6.调用 upper(),将供应商名称大写lower小写

select vend_name,upper(vend_name) as daxie from vendors;

7.调用 soundex(),查询名字发音类似的联系人

select cust_name,cust_contact from customers where soundex(cust_contact) =soundex('Y.Lie');

8.调用 date(),查询所有 2011 年 9 月的订单

select * from orders where date(order_date) between '2011-09-01' and '2011-09-30';

注:可以使用 year()和 month()来实现上述内容

select * from orders where year(order_date)='2011' and month(order_date)='9';

9.聚合函数

1)查询供应商为 1003 提供的产品的平均值

select vend_id,avg(prod_price) as pingjun from products where vend_id='1003';

2)查询 customers 中的客户总数

select count(*)某一列中有几行) as zongshu from customers;

3)查询 customers 中拥有 email 地址的客户总数

select count(cust_email) as zongshu from customers;

4)查询 products 表中产品的最高价和最低价

select max(prod_price) as max_price from products;

select min(prod_price) as min_price from products;

5)计算去掉重复行的平均值

select avg( distinct prod_price) as pingjunzhi from products;

6)组合聚合函数

select count(*) as prod_count,max(prod_price) as price_max,min(prod_price) as price_min,avg(prod_price) as price_avg from products;

10.分组过滤***

1)分组:group by 子句

过滤:having 子句分组之后过滤

2)查询每个供应商提供的产品数量

select vend_id,count(*/prod_id) as zongshu from products group by vend_id根据vind_id 分组;

3)查询至少有两个订单的客户

select cust_id,count(*哪一列都可以) as dingdanshu from orders group by cust_id having dingdanshu >= '2';

4)查询拥有产品数大于或等于 2,且产品价格大于或等于 10 的供应商 select vend_id,count(*) as prod_count from products where prod_price >= 10 group by vend_id having prod_count >=2;

注:where 用于在分组前过滤数据,having 用于在分组后过滤数据

5)查询订单号和所有订单中订单总价大于或者等于 50 的订单

select order_num,sum(quantity*item_price) as order_count from orderitems group by order_num having order_count >= 50;

11.select 语句及其顺序

select ... from ... where ... group by ... having ... order by ... limit;

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

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

相关文章

网络与通信Day1-路由协议

网络协议之路由协议 静态路由&#xff1a; 明细静态 默认静态 动态路由&#xff1a;&#xff08;可以自动去环&#xff09; RIP 十几台或几十台 &#xff08;维护上一代人搭建的网络&#xff09; OSPF 300台 &#xff08;最短路径算法&#xff09; ISIS 1200台 BGP…

[C++][算法基础]模拟堆(堆)

维护一个集合&#xff0c;初始时集合为空&#xff0c;支持如下几种操作&#xff1a; I x&#xff0c;插入一个数 x&#xff1b;PM&#xff0c;输出当前集合中的最小值&#xff1b;DM&#xff0c;删除当前集合中的最小值&#xff08;数据保证此时的最小值唯一&#xff09;&…

UE小:UE5.3无法创建C++工程

当您在使用Unreal Engine (UE) 构建项目时&#xff0c;如果遇到以下问题&#xff1a; Running C:/Program Files/Epic Games/UE\_5.3/Engine/Build/BatchFiles/Build.bat -projectfiles -project"C:/UEProject/Shp\_1/Shp\_1.uproject" -game -rocket -progress Usi…

python之正则表达式(2)

1、贪婪量词和懒惰量词 贪婪量词&#xff1a;也就是尽可能多的匹配字符 懒惰量词&#xff1a;尽可能少的匹配字符&#xff08;在现在的计算机语言中大多默认为贪婪量词若想要使用 懒惰量词就需要在后面加上&#xff1f;即可&#xff09; 代码示例&#xff1a; import rep …

JavaScript - 你遇到过哪几种Javascript的错误类型

难度级别:中级及以上 提问概率:50% 我们在开发Javascript代码的时候,经常一不小心就会遇到各种各样的异常,浏览器也会及时给出错误信息,那么一般会遇到哪几种异常情况呢,我们来看一下。 1 ReferenceError错误 ReferenceError几乎是最…

代码随想录训练营day29

第七章 回溯算法 part05 1.LeetCode. 递增子序列 1.1题目链接&#xff1a;491.递增子序列 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;B站卡哥视频 1.2思路&#xff1a;这个递增子序列比较像是取有序的子集。而且本题也要求不能有相同的递增子序列。这又是子集&a…

光伏EPC项目管理系统的综合性管理理念和功能优势。

光伏EPC项目管理系统是一种适用于工程项目的管理软件&#xff0c;它强调在整个项目周期中的综合性管理理念&#xff0c;涵盖了从规划、设计、采购、施工到交付等全过程&#xff0c;帮助用户实现高效的项目管理。 1.增强项目团队之间的协作与沟通&#xff1a;光伏EPC项目管理系统…

【二分查找】Leetcode 搜索插入位置

题目解析 35. 搜索插入位置 这道题就是寻找target的目标位置&#xff0c;如果nums中包含target直接返回索引&#xff1b;如果不包含&#xff0c;需要返回target存放的合适位置 注意这道题有一个细节地方需要注意&#xff1a;如果现在target没有在nums中出现&#xff0c;并且目…

Electron 打包自定义NSIS脚本为安装向导增加自定义页面增加输入框

Electron 打包工具有很多&#xff0c;如Electron-build、 Electron Forge 等&#xff0c;这里使用Electron-build&#xff0c;而Electron-build使用了nsis组件来创建安装向导&#xff0c;默认情况nsis安装向导不能自定义安装向导界面&#xff0c;但是nsis提供了nsis脚本可以扩展…

ESP32调试笔记

目录 基于Thonny和micropythonESP32-CAM开发板无法连接Thonnyesp32cam局域网图传esp32代码上位机代码 基于Thonny和micropython ESP32-CAM开发板无法连接Thonny esp32cam有两个模式&#xff1a;下载模式、运行模式 两种模式的接线不同 IO0 短路 GND ! 正是因为两种模式接线…

[AI in sec]-039 DNS隐蔽信道的检测-特征构建

DNS隐蔽信道是什么 DCC是指利用DNS数据包中的可定义字段秘密传递信息的通道。其中,“DNS 协议”是目前网络上使用的标准域名解析协议;“可定义字段”是DNS 数据包中的 QNAME 字段、RDATA 字段及RawUDP字段。利用DNS数据包可以构建2种信道:存储信道及时间信道。DCC可以被用于…

nginx配置实例-动静分离

目录 一、相关概念 1.1动静分离概念 1.2动静分离的两种实现方法 二、实例配置 2.1 准备工作&#xff1a;在linux系统中准备静态资源&#xff0c;方便后面做测试 2.2 修改nginx配置文件 2.3 在浏览器测试 一、相关概念 1.1动静分离概念 将动态请求跟静态请求分开&#xf…

大模型在金融行业的应用场景和落地路径

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

理解 Golang 变量在内存分配中的规则

为什么有些变量在堆中分配、有些却在栈中分配&#xff1f; 我们先看来栈和堆的特点&#xff1a; 简单总结就是&#xff1a; 栈&#xff1a;函数局部变量&#xff0c;小数据 堆&#xff1a;大的局部变量&#xff0c;函数内部产生逃逸的变量&#xff0c;动态分配的数据&#x…

VueRouter的介绍:什么是路由呢?VueRouter的作用及使用,VueRouter的使用分为5个步骤和特定的2步

1.什么是路由呢&#xff1f; 路由就是路径和组件之间的映射关系&#xff0c;当我们路径变化的时候&#xff0c;就要切换对应的组件。 在前端中解决路径与组件之间的映射关系&#xff0c;官方提供了VueRouter这个插件 2.VueRouter的作用及使用 作用&#xff1a;修改地址栏路…

ios苹果ipa文件app内测分发有哪些操作流程

哈喽&#xff0c;大家好&#xff0c;咕噜淼淼又来和大家见面啦&#xff0c;在iOS应用开发过程中&#xff0c;进行内测分发是非常重要的一环&#xff0c;它能帮助开发者发现并修复应用中的问题&#xff0c;提升用户体验。上两期咱们一起探讨了一下App内测分发的目的及优势&#…

【计算机考研】408有多难?复习到什么程度才能120+?

备考计算机考研的408统考是一件需要花费精力和时间的事情&#xff0c;我想分享一些基于个人经验的备考策略&#xff0c;希望能帮助到大家。 首先&#xff0c;我将备考过程划分为三轮进行。在第一轮复习阶段&#xff0c;我每天安排3小时的时间学习机组原理和操作系统&#xff0…

Linux 函数学习

1、Linux poll 函数 int poll(struct pollfd *fds, nfds_t nfds, int timeout); fds&#xff1a; 需要轮询的fd集合 nfds&#xff1a;需要轮询的fds数量 timeout&#xff1a;超时时间 返回值&#xff1a;0 超时&#xff0c;<0 发生异常&#xff0c;> 0 存在数据变化 …

【LeetCode热题100】153. 寻找旋转排序数组中的最小值(二分)

一.题目要求 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4 次&#xff0c;则可以得到 [4,5,6,7,0,1,2]若旋转 7…

python学习笔记——类

1. 类和对象**** 类、类属性、类方法不需要实例化就可以直接访问 实例相关&#xff0c;如实例属性、实例方法必须实例化后才可以访问 1.1. 类、类属性、实例属性、私有属性**** 1.1.1. 定义**** 类就是拥有相同属性和功能对象的集合 动物&#xff1a;猫、狗、鸡 人类&…