函数是 SQL 中的一部分.在 SQL 中,除了普通的函数之外,还有特殊的函数(谓词和 CASE 表达式)用于各种情况.

函数

函数的种类有:

  1. 算术函数
  2. 字符串函数
  3. 日期函数
  4. 转换函数(用于转换数据类型)
  5. 聚合函数

算术函数

例如;

  • MOD:求余
  • ABS:求绝对值
  • ROUND:四舍五入

字符串函数

例如:

  1. 拼接: || 函数
  2. 求字符串长度: LENGTH
  3. 大小写转换:LOWER ,UPPER
  4. 替换字符串:REPLACE(对象字符串,对象字符串中要替换的字符串,替换成的字符串)

日期函数

例如:

  1. 得到当前日期:CURRENT_DATE
  2. 得到当前时间(时分秒):CURRENT_TIME
  3. 得到当前的日期和时间: CURRENT_TIMESTAMP
  4. 截取日期元素:EXTRACT(YEAR FROM CURRENT_TIMESTAMP)

转换函数

1.CAST 函数
格式:
CAST(转换前的值 AS 想要转换成的数据类型)
范例:
CAST('0001' AS INTEGER)

2.COALESCE 函数
格式:
COALESCE(num1, num2, num3, num4,...)
功能:
返回从左侧起第一额不是 NULL 的值.

Predicate 谓词

是进行判断的函数,该函数的返回值有两种:真和假.典型的谓词,例如: =,>,<等比较运算符就是比较谓词.

LIKE 谓词——模式匹配

格式:
SELECT *
FROM SampleLIke
WHERE strcol LIKE 'ddd%'

功能:
查找特定文本模式的字符串,可用的符号有:

  1. %:代表任意字符串
  2. _:代表任意一个字符

BETWEEN 谓词——范围查询

格式:
SELECT product_name, sale_price
FROM Product
WHERE sale_price BETWEEN 100 AND 1000

功能:
判断数据是否在某一区间范围内

IS NULL, IS NOT NULL ——判断是否为 NULL

IN 谓词——判断 OR 类型的数据

格式:
SELECT product_name, purchase_price
FROM Product
WHERE purchase_price IN (320, 500, 5000);

功能:
取出符合 OR 语句要求的数据

IN 谓词与子查询

子查询可以与 IN 谓词配合起来,从而实现动态的查询,编写出更加易维护的程序,例如:
用于查询shop_id 为 '000C'所含的商品.

SELECT product_name, sale_price
FROM Product
WHERE product_id IN (SELECT product_id
FROM ShopProduct
WHERE shop_id = '000C');

EXIST 谓词——判断是否存在满足条件的记录

范例:
查找 P 表和 SP 表中 shop_id 相同的数据:

SELECT product_name, sale_price
FROM Product AS P
WHERE EXIST (SElECT *
FROM ShopProduct AS SP
WHERE SP.shop.id = P.product_id);

格式:
其中的 SELECT * 是 SQL 的一种惯例.

EXIST 只关心是否有匹配的数据,因此 SELECT * 改为 SELECT 1 的时候结果也不会发生变化.

功能:
EXISTS 谓词常常与关联子查询配合而进行查询,返回满足条件的记录.

CASE 表达式

CASE 表达式分为简单 CASE 表达式与搜索 CASE 表达式,其区别是:

  1. 简单 CASE 表达式最初的 "CASE <colname>“会作为谓词的左边的对象.
  2. 搜索 CASE 表达式无此限制,因此可以使用多种判断的条件

「简单 CASA 表达式」格式:

CASE  <表达式>
WHEN <含谓词的表达式> THEN  <表达式>
WHEN <含谓词的表达式> THEN  <表达式>
WHEN <含谓词的表达式> THEN  <表达式>
...
ELSE <表达式>
END

「搜索 CASA 表达式」格式:

CASE WHEN <含谓词的表达式> THEN  <表达式>
WHEN <含谓词的表达式> THEN  <表达式>
WHEN <含谓词的表达式> THEN  <表达式>
...
ELSE <表达式>
END
其中第一个表达式是包含谓词的表达式,其返回 TURE/FALSE/UNKNOWN),
第二个表达式是第一个表达式为 TRUE 的时候,执行的语句.

「搜索 CASA 表达式」语法:

CASE 表达式顺序执行语句,如果表达式返回 TRUE, 则执行 THEN 后的语句,然后 CASE 表达式的执行到此为止.
如果不为 TRUE, 则执行下面的 WHEN 语句
当所有 WHEN 语句执行完(都不为 TRUE)后,执行 ELSE 语句,然后 CASE 表达式的执行到此为止.

ELSE 语句是可选的, 默认情况下为 ELSE NULL

《SQL 基础教程》第六章:函数、谓词、CASE 表达式的更多相关文章

  1. Objective-C 基础教程第六章,源文件组织

    目录 Object-C 基础教程第六章,源文件组织 0x00:前言 0x01:Xcode创建OC类 0x02:Xcode群组 0x03 Xcode跨文件依赖关系 @class关键字 导入和继承 小结 ...

  2. 《SQL 基础教程》第二章:查询基础

    这一章的结构如下: SELECT 语句基础 算术运算符和比较运算符 逻辑运算符 SELECT 语句可用于查询数据,并且可以设定条件来查询具有特定值的记录.条件的设定就需要算数运算符.比较运算符和逻辑运 ...

  3. 《SQL 基础教程》—第一章:数据库与 SQL

    导言 这一章的内容如下: 数据库简介 SQL 概要 表的创建 表的删除与更新 数据库简介 定义: Database, 是大量数据的集合Database Management System,是用于管理数 ...

  4. 《SQL基础教程》+ 《SQL进阶教程》 学习笔记

    写在前面:本文主要注重 SQL 的理论.主流覆盖的功能范围及其基本语法/用法.至于详细的 SQL 语法/用法,因为每家 DBMS 都有些许不同,我会在以后专门介绍某款DBMS(例如 PostgreSQ ...

  5. 《SQL基础教程》

    Product表 CREATE TABLE Product (product_id CHAR(4) NOT NULL, product_name VARCHAR(100) NOT NULL, prod ...

  6. [SQL基础教程] 3-4 对查询结果进行排序/ORDER BY

    [SQL基础教程] 3-4 对查询结果进行排序/ORDER BY ORDER BY SELECT <列名1>,<列名2>,<列名2>... FROM ORDER B ...

  7. [SQL基础教程] 3-3 HAVING

    [SQL基础教程] 3-3 HAVING HAVING子句 SELECT col_1,col_2 FROM table GROUP BY col_1,col_2 HAVING col_1 = '2'; ...

  8. [SQL基础教程] 3-2 对表进行分组

    [SQL基础教程] 3-2 对表进行分组 GROUP BY SELECT <列名1>,<列名2>,... FROM <表名> GROUP BY <列名1> ...

  9. [SQL基础教程] 3-1 对表进行聚合查询

    [SQL基础教程] 3-1 对表进行聚合查询 聚合函数 用于合计的函数称为聚合函数或者集合函数 COUNT SUM AVG MAX MIN SELECT COUNT(*) FROM table; SE ...

  10. GSAP JS基础教程--使用缓动函数

    今天来了解一下缓动easeing函数. 开始,如果你还没有GSAP的类包,可以到GreenSock的官网去下载最新版本的类包,或者直接点击这里​来下载 学习之前,先来准备一下:     <!DO ...

随机推荐

  1. JD-GUI反编译出现ERROR

    反编译Jar包一般使用JD-GUI工具,很方便.但有时会出现异常,如下: 此时,可以辅助使用另一个工具来反编译代码:Luyten(https://github.com/deathmarine/Luyt ...

  2. java核心技术第十版 笔记

    1.java区分大小写 2.类名是以大写字母开头 (驼峰) 3.http://docs.oracle.com/javase/specs  java语言规范 4. /* */ 注释不能嵌套 5. Jav ...

  3. spring boot + vue + element-ui全栈开发入门——前端编辑数据对话框

     需求 1.点击“添加”按钮,弹出录入数据的对话框窗口,并录入数据,如果数据有误则不允许提交.数据填写完毕后,点击“保存”按钮,调用http协议提交数据,提交完毕刷新页面数据.点击“取消”按钮关闭对话 ...

  4. [游戏开发日志]Windows下Cocos2d-x 3.14环境搭建

    总介绍 我们小组使用的是cocos2d-x的游戏开发引擎,因此在所有开发工作之前,我们需要对这个引擎进行环境的搭建. 搭建过程 VS2013的下载和安装 VS只是作为一个开发环境而已,简单来说就是敲代 ...

  5. Haproxy + Keepalived +PXC 常见错误

    1. Apr 21 19:15:54 pxc1 systemd[1]: mysql@bootstrap.service: main process exited, code=exited, statu ...

  6. LeetCode Weekly Contest 121

    上周因为感冒没有刷题,两个星期没有刷题,没手感了,思维也没有那么活跃了,只刷了一道,下个星期努力. 984. String Without AAA or BBB Given two integers  ...

  7. 程序员 面试题【前端,java,php】

    跬步客 网址:https://www.kuibuke.com/wall/index

  8. ajax的三次封装简单概况

    原生ajax:                readyState         准备状态                status             页面状态               ...

  9. 使用 Gradle 构建 Java 项目

    使用 Gradle 构建 Java 项目 这个手册将通过一个简单的 Java 项目向大家介绍如何使用 Gradle 构建 Java 项目. 我们将要做什么? 我们将在这篇文档航中创建一个简单的 Jav ...

  10. [Python数据挖掘]第4章、数据预处理

    数据预处理主要包括数据清洗.数据集成.数据变换和数据规约,处理过程如图所示. 一.数据清洗 1.缺失值处理:删除.插补.不处理 ## 拉格朗日插值代码(使用缺失值前后各5个未缺失的数据建模) impo ...