数据库(二):高级检索

  • 使用数据库中的函数

    • 1 常见的文本处理函数
    • 2 常见数值处理函数
    • 3 常见的聚集函数
  • 分组数据
    • 1 数据分组
    • 2 分组数据的过滤
    • 3 select子句顺序
  • 联结表
    • 1 关系表
    • 2 联结
      • 21 内联结
      • 22 外联结
      • 23 交叉联结

1.使用数据库中的函数

数据库中存在很多数据处理函数可以使用,使用数据库中自带的函数可以简化操作,但是也可能带来兼容性问题,因为不同的数据库管理系统有不同的数据处理函数,需要注意。

1.1 常见的文本处理函数:

函数 说明
LEFT() 返回字符串左边的字符
LENGTH() 返回字符串的长度
LOWER() 将字符串转换为小写
RIGHT() 返回字符串右边的字符
UPPER() 将字符串转换为大写

1.2 常见数值处理函数:

函数 说明
ABS() 返回一个数的绝对值
COS() 余弦
EXP() 一个数的指数值
SIN() 正弦
SQRT() 平方根

1.3 常见的聚集函数

函数 说明
AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列之和

在使用AVG()时,同样可以结合where语句进行过滤处理。


2. 分组数据

2.1 数据分组

在使用一些聚合函数时,例如AVG一般只能计算整个列的平均值或者满足某种条件(where子句)下的平均值,如果我们现在想得到不同条件下(上个例子中不同的vend_id下的平均值)同时统计处理,就需要用到数据分组。

分组SELECT语句的GROUP BY子句建立的

使用分组的一个例子:

这个例子中,通过不同的vend_id进行聚合处理(求平均值)

关于使用GROUP BY的一些规定:

  • GROUP BY 子句必须出现在WHERE子句之后,ORDER BY子句之前
  • 如果分组列中有NULL的列,这一列也会被作为一个分组返回

2.2 分组数据的过滤

提到过滤,首先想到的是使用WHERE子句,但是在分组数据中使用WHERE达不到想要的结果,WHERE没有分组的概念。分组过滤使用新的子句HAVING对分组进行过滤。

  • HAVINGWHERE语法是相同的,唯一不同的是关键字的不同。WHERE针对的是过滤行,HAVING 针对的是分组。
  • WHERE在数据分组之前进行过滤,HAVING是在数据分组后进行过滤

在这个例子中,在进行分组前,先利用WHERE子句进行过滤,然后根据要求分组,最后在分组后的结果中进行HAVING过滤。

2.3 select子句顺序

SELECT > FROM > WHERE > GROUP BY > HAVING > ORDER BY

3. 联结表

3.1 关系表

在数据库系统中,相同的数据在数据库中出现多次不是一件让人满意的事情,这是关系数据库的基础, 关系表的设计就是要把信息分解成多个表,一类数据一个表,各表通过某些共同的值相互关联。

表与表之间的关联是通过外键联系在一起的,例如A表中有一列是B表中的主键,这样一列可以作为A表的外键,通过此外键A表和B表进行连接。

主键与外键:

3.2 联结

SQL中有多种联结方式:内联结、外联结、交叉联结

3.2.1 内联结

内连接

内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。

直接通过例子来说明:

VendorsProducts是数据库中的两个表,这两个表通过vend_id这一列联结起来,vend_id为Vendors中的主键,同时是Products中的一个外键,最终得到的检索结果分别存在两个表中。

3.2.2 外联结

外联结分为:左外联结、右外联结、全联结

左外联结

  • 以左表为基准,将Vendors.vend_id = Products.vend_id的数据进行连接,然后将左表没有的对应项显示,右表的列为NULL

右外联结

  • 以右表为基准,将Vendors.vend_id = Products.vend_id的数据进行连接,然以将右表没有的对应项显示,左表的列为NULL

全联结

  • 完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

3.2.3 交叉联结

这里返回的数据是相应的笛卡尔积,左表中的每一行与右表中的所有行组合

时间: 2024-08-01 12:11:43

数据库(二):高级检索的相关文章

3.7 高级检索方式(一)

3.2 节我们已经运行了一个Lucene检索的小demo(3.2 Lucene实战:一个简单的小程序),能够进行基本的Lucene检索.然后,在实际应用中,用户的需求是多种多样的.比如: 用户可能对中日关系比较感兴趣,想查找'中'和'日'挨得比较近(5个字的距离内)的文章,超过这个距离的不予考虑.比如:"中日双方能否和解?""中美日三方"等是你想要的结果,而"中国某高层领导说日本欠扁"不是你想要的结果.这时该如何设计检索方式? 用户可能是一个警察

数据库的高级应用

数据库五大高级应用: 视图(view)索引(index)存储过程(proc)触发器(trigger)事务(trans) ●●●●●●●●●●●●下面将对这五大应用详细解●●●●●●●●●●●● 一 视图(view):只是用来快速展示查询数据: 主要内容: l 视图的概念以及优缺点 视图是一张虚拟表,他所展现的内容并没有存储在视图表中而是存储在他所引用的表中. 优点; 简化操作:根据不同用户定制不同数据:合并分割数据:安全性: 缺点:性能不高:数据修改受限: l 单表视图 多表视图 基于视图的视图

MySQL学习笔记_12_Linux下C++/C连接MySQL数据库(二) --返回数据的SQL

 Linux下C++/C连接MySQL数据库(二) --返回数据的SQL 引: 返回数据的SQL是指通过查询语句从数据库中取出满足条件的数据记录 从MySQL数据库值哦功能检索数据有4个步骤: 1)发出查询 2)检索数据 3)处理数据 4)整理所需要的数据 用mysql_query()发出查询,检索数据可以使用mysql_store_result()或mysql_use_result(),取决与怎样检索数据,接着是调用mysql_fetch_row()来处理数据,最后,还必须调用mysql_

JAVA使用JDBC连接MySQL数据库 二(2)

本文是对 <JAVA使用JDBC连接MySQL数据库 二>的改进. 上节使用的是PreparedStatement来执行数据库语句,但是preparedStatement需要传递一个sql语句参数,才能创建.然而,DBHelper类只是起到打开和关闭数据库的作用,所以sql语句是要放到应用层部分的,而不是放到DBHelper类中. 而statment不需要传递一个sql语句参数,就能创建. 修改部分如下: public class DBHelper { String driver = &quo

js实现类似于百度学术的高级检索功能

百度学术http://xueshu.baidu.com/高级检索是通过前台生成后台内部高级语法来实现高级检索的,可以通过前台js做字符串拼接传给后台实现,难度不大: 下面是高级检索的核心功能代码,我使用的是纯js实现,并未使用jquery: 1 <p class="fl srh-btn"> 2 <input type="submit" class="srh-submit" style="height:43px"

【python】第二模块 步骤一 第四课、数据库的高级查询

第四课.数据库的高级查询 一.课程介绍 1.1 课程介绍 学习目标 数据统计分析 聚合函数.分组查询.HAVING子句 多表连接查询 内连接.外连接.以及多表查询的多种语法 子查询 单行子查询.多行子查询.WHERE子查询.FROM子查询.SELECT子查询 原文地址:https://www.cnblogs.com/miaophp/p/12670511.html

Sql Server数据库设计高级查询

-------------------------------------第一章  数据库的设计------------------------------------- 软件开发周期:     (1)需求分析     (2)概要设计     (3)详细设计     (4)编码     (5)集成测试     (6)上线运行     (7)后期维护 1,数据库设计步骤:     (1)收集信息     (2)标识对象(确定数据库中有哪些表)     (3)标识对象的属性(确定每个表中的例)  

oracle数据库的高级查询方法 多表联合查询

oracle查询 一,简单查询 order by 1,2 select t.sno, t.sname, t.ssex from STUDENT t order by 1,2,3 group by 增强版 SELECT p.toma, p.ptype, SUM(p.lastcou) FROM product p GROUP BY rollup(p.toma, p.ptype) 二,高级查询(多表连接查询) 笛卡尔积的概念: 所谓笛卡尔积,通俗点说就是指包含两个集合中任意取出两个元素构成的组合的集合

mySQL数据库二:命令行的使用

在做整理的时候,上一篇刚开始只是简单的做了个数据类型的开头,在这里简单说一下mySQL的使用以及它的命令行 1.准备工作 有一个好的开发工具可以几何倍数的增加我们的工作效率,所以,工具是必不可少的,首先我们需要下载一个wamp(window系统专用)的工具,苹果电脑为Mamp,如下图所示 下载完成之后双击,可以看到在电脑屏幕的右下方出现一个卡哇伊的“W”图标,对,是他是他就是他,当他从红变成绿色的时候,说明你的准备工作已经完成了,开始你的mySQL之旅吧 2. 操作方法一: 左键点击那个可爱的“