SQL 简易教程 下

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 包含视图、函数知识、防止 SQL 注入攻击等内容。SQL 函数 简介大多数 SQL 实现支持以下类型的函数。❑ 用于处理文本字符串(如删除或填充值,转换值为大写或小写)的文本函数。❑ 用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数。❑ 用于处理日期和时间值并从这些值中提取特定成分(如返回两个日期之差,检查日期有效性)的日期和时间函数。❑ 用于生成美观好懂的输出内容的格式化函数(如用语言形式表达出日期,用货币符号和千分位表示金额)。❑ 返回 DBMS 正使用的特殊信息(如返回用户登录信息)的系统函数SQL 函数不区分大小写。随你的喜好,不过注意保持风格一致

包含视图、函数知识、防止 SQL 注入攻击等内容。


SQL 函数 简介



大多数 SQL 实现支持以下类型的函数。


❑ 用于处理文本字符串(如删除或填充值,转换值为大写或小写)的文本函数。❑ 用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数。


❑ 用于处理日期和时间值并从这些值中提取特定成分(如返回两个日期之差,检查日期有效性)的日期和时间函数。


❑ 用于生成美观好懂的输出内容的格式化函数(如用语言形式表达出日期,用货币符号和千分位表示金额)。


❑ 返回 DBMS 正使用的特殊信息(如返回用户登录信息)的系统函数


SQL 函数不区分大小写。随你的喜好,不过注意保持风格一致,不要变来变去,否则你写的程序代码就不好读了。


SQL Aggregate 聚集函数



对某些行运行的函数,计算并返回一个值。


有用的 Aggregate 函数:


  • AVG() - 返回平均值


  • COUNT() - 返回行数


  • MAX() - 返回最大值


  • MIN() - 返回最小值


  • SUM() - 返回总和


以上 5 个聚集函数都可以如下使用。


❑ 对所有行执行计算,指定 ALL 参数或不指定参数(因为 ALL 是默认行为)。


❑ 只包含不同的值,指定 DISTINCT 参数。


注意:DISTINCT 不能用于 COUNT(*)


  • FIRST() - 返回第一个记录的值


  • LAST() - 返回最后一个记录的值


COUNT 函数使用注意:


COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):


SELECT COUNT(column_name) FROM table_name;


COUNT(*) 函数返回表中的记录数:


SELECT COUNT(*) FROM table_name;


COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:


SELECT COUNT(DISTINCT column_name) FROM table_name;


注释:COUNT(DISTINCT) 适用于 ORACLE 和 Microsoft SQL Server,MySQL,但是无法用于 Microsoft Access。


count(*) 和 count(0) 和 count(1) 其实区别不大。


FIRST() 函数


FIRST() 函数返回指定的列中第一个记录的值。


注释:只有 MS Access 支持 FIRST() 函数。


MySQL 使用 LIMIT

SELECT column_name FROM table_name
ORDER BY column_name ASC
LIMIT 1;


LAST() 函数


LAST() 函数返回指定的列中最后一个记录的值。


注释:同样只有 MS Access 支持 FIRST() 函数。


MySQL 语法

SELECT column_name FROM table_name
ORDER BY column_name DESC
LIMIT 1;


SQL Scalar 函数



SQL Scalar 函数基于输入值,返回一个单一的值。


  • MID() - 从某个文本字段提取字符,MySql 中使用


  • LEN() - 返回某个文本字段的长度


  • ROUND() - 对某个数值字段进行指定小数位数的四舍五入


  • NOW() - 返回当前的系统日期和时间


  • FORMAT() - 格式化某个字段的显示方式


  • UCASE() - 将某个字段转换为大写


  • LCASE() - 将某个字段转换为小写


UCASE() 和 LCASE() 函数

SELECT UCASE(name), LCASE(name)
FROM Websites;


MID() 函数


MID() 函数用于从文本字段中提取字符。


SQL MID() 语法


SELECT MID(column_name,start[,length]) FROM table_name;


column_name 必需。要提取字符的字段。


start   必需。规定开始位置(起始值是 1)。


length 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。


LEN() 函数


LEN() 函数返回文本字段中值的长度。


SQL LEN() 语法

SELECT LEN(column_name)
FROM table_name;


MySQL 中函数为 LENGTH()

SELECT LENGTH(column_name)
FROM table_name;


ROUND() 函数


ROUND() 函数用于把数值字段舍入为指定的小数位数。


SQL ROUND() 语法

SELECT ROUND(column_name,decimals) FROM table_name;


参数描述


  • column_name  必需。要舍入的字段。


  • decimals  必需。规定要返回的小数位数。


ROUND(X): 返回参数X的四舍五入的一个整数。


ROUND(X,D): 返回参数X的四舍五入的有 D 位小数的一个数字。如果D为0,结果将没有小数点或小数部分。


注意:ROUND 返回值被变换为一个BIGINT。


NOW() 函数


NOW() 函数返回当前系统的日期和时间。


MySQL 中的 NOW() 函数

SELECT NOW(),CURDATE(),CURTIME()
+---------------------+------------+-----------+
| NOW()               | CURDATE()  | CURTIME() |
+---------------------+------------+-----------+
| 2020-03-17 22:46:33 | 2020-03-17 | 19:10:33  |
+---------------------+------------+-----------+
1 row in set
Time: 0.021s


FORMAT() 函数


FORMAT() 函数用于对字段的显示进行格式化。


SQL FORMAT() 语法

SELECT FORMAT(column_name,format) FROM table_name;


参数  描述


  • column_name 必需。要格式化的字段。


  • format    必需。规定格式。


示例:

mysql> SELECT name, url, DATE_FORMAT(Now(),'%Y-%m-%d') AS date
    -> FROM Websites;
+--------------+---------------------------+------------+
| name         | url                       | date       |
+--------------+---------------------------+------------+
| Google       | https://www.google.cm/    | 2019-08-14 |
| 淘宝         | https://www.taobao.com/   | 2019-08-14 |
| 菜鸟教程     | http://www.runoob.com/    | 2019-08-14 |
| 微博         | http://weibo.com/         | 2019-08-14 |
| Facebook     | https://www.facebook.com/ | 2019-08-14 |
+--------------+---------------------------+------------+
5 rows in set (0.01 sec)


MySQL 特有函数



MySQL DATE_ADD() 函数


DATE_ADD() 函数向日期添加指定的时间间隔。

DATE_ADD(date, INTERVAL expr type)


date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。


type 参数可以是下列值:


MICROSECOND


SECOND


MINUTE


HOUR


DAY


WEEK


MONTH


QUARTER


YEAR


SECOND_MICROSECOND


MINUTE_MICROSECOND


MINUTE_SECOND


HOUR_MICROSECOND


HOUR_SECOND


HOUR_MINUTE


DAY_MICROSECOND


DAY_SECOND


DAY_MINUTE


DAY_HOUR


YEAR_MONTH


现在,我们想要向 "OrderDate" 添加 45 天,这样就可以找到付款日期。

SELECT DATE_ADD('2010-3-4', INTERVAL 45 DAY) AS OrderPayDate


DATE_SUB() 函数从日期减去指定的时间间隔。


和DATE_ADD 一个是加上日期, 一个是减去日期


DATEDIFF() 函数返回两个日期之间的天数。


SELECT DATEDIFF('2008-11-30','2008-11-29') AS DiffDate


DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。


DATE_FORMAT(date, format)


date 参数是合法的日期。format 规定日期/时间的输出格式。


可以使用的格式有:

%a  缩写星期名
%b  缩写月名
%c  月,数值
%D  带有英文前缀的月中的天
%d  月的天,数值(00-31)
%e  月的天,数值(0-31)
%f  微秒
%H  小时(00-23)
%h  小时(01-12)
%I  小时(01-12)
%i  分钟,数值(00-59)
%j  年的天(001-366)
%k  小时(0-23)
%l  小时(1-12)
%M  月名
%m  月,数值(00-12)
%p  AM 或 PM
%r  时间,12-小时(hh:mm:ss AM 或 PM)
%S  秒(00-59)
%s  秒(00-59)
%T  时间, 24-小时(hh:mm:ss)
%U  周(00-53)星期日是一周的第一天
%u  周(00-53)星期一是一周的第一天
%V  周(01-53)星期日是一周的第一天,与 %X 使用
%v  周(01-53)星期一是一周的第一天,与 %x 使用
%W  星期名
%w  周的天(0=星期日, 6=星期六)
%X  年,其中的星期日是周的第一天,4 位,与 %V 使用
%x  年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y  年,4 位
%y  年,2 位


防止 SQL 注入攻击



所谓 SQL 注入,就是通过把 SQL 命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。


我们永远不要信任用户的输入,我们必须认定用户输入的数据都是不安全的,我们都需要对用户输入的数据进行过滤处理。


防止 SQL 注入,我们需要注意以下几个要点:


  1. 永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。


  1. 永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。


  1. 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。


  1. 不要把机密信息直接存放,加密或者 hash 掉密码和敏感的信息。


  1. 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装


  1. sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。


SQL 视图(Views)



视图是可视化的表。在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。


视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。


您可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。


提示:参阅具体的 DBMS 文档上面的规则不少,而具体的 DBMS 文档很可能还包含别的规则。因此,在创建视图前,有必要花点时间了解必须遵守的规定。


SQL 存储过程



使用存储过程有三个主要的好处,即简单、安全、高性能。 显然,它们都很重要。


SQL 事务


使用事务处理(transaction processing),通过确保成批的SQL操作要么完全执行,要么完全不执行,来维护数据库的完整性。


通常,COMMIT用于保存更改,ROLLBACK用于撤销。


要支持回退部分事务,必须在事务处理块中的合适位置放置占位符。这样,如果需要回退,可以回退到某个占位符。在 SQL 中,这些占位符称为保留点。在MariaDB、MySQL和Oracle中创建占位符,可使用SAVEPOINT语句。


提示:保留点越多越好可以在SQL代码中设置任意多的保留点,越多越好。为什么呢?因为保留点越多,你就越能灵活地进行回退。


SQL 游标



有时,需要在检索出来的行中前进或后退一行或多行,这就是游标的用途所在。游标(cursor)是一个存储在DBMS服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。


使用游标涉及几个明确的步骤。


❑ 在使用游标前,必须声明(定义)它。这个过程实际上没有检索数据,它只是定义要使用的SELECT 语句和游标选项。


❑ 一旦声明,就必须打开游标以供使用。这个过程用前面定义的 SELECT 语句把数据实际检索出来。


❑ 对于填有数据的游标,根据需要取出(检索)各行。


❑ 在结束游标使用时,必须关闭游标,可能的话,释放游标(有赖于具体的DBMS)。


触发器



触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行。触发器可以与特定表上的INSERT、UPDATE 和 DELETE 操作(或组合)相关联。


与存储过程不一样(存储过程只是简单的存储SQL语句),触发器与单个的表相关联。


提示:约束比触发器更快一般来说,约束的处理比触发器快,因此在可能的时候,应该尽量使用约束。


参考



SQL 简介 | 菜鸟教程


https://www.runoob.com/sql/sql-intro.html


MySQL 教程MySQL 教程


https://wiki.imooc.com/mysql/index.html



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
SQL Java 数据库连接
Apache Zeppelin系列教程第十篇——SQL Debug In Zeppelin
Apache Zeppelin系列教程第十篇——SQL Debug In Zeppelin
97 0
|
4月前
|
SQL 存储 Oracle
sql数据库使用教程
SQL(Structured Query Language)结构化查询语言是一种用于操作数据库的标准语言,被广泛应用于关系型数据库管理系统(RDBMS),如MySQL、Oracle、Microsoft
|
4月前
|
SQL 数据库
sql数据库教程设计
SQL数据库教程设计可以分为以下几个步骤: 1. 确定教学目标:首先,需要明确教程的教学目标,例如让学生掌握SQL语言的基础知识,包括数据查询、数据操作、数据定义等,以及培养学生的实际操作能力,
|
11天前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
在Web开发中,安全至关重要,尤其要警惕SQL注入和XSS攻击。SQL注入通过在数据库查询中插入恶意代码来窃取或篡改数据,而XSS攻击则通过注入恶意脚本来窃取用户敏感信息。本文将带你深入了解这两种威胁,并提供Python实战技巧,包括使用参数化查询和ORM框架防御SQL注入,以及利用模板引擎自动转义和内容安全策略(CSP)防范XSS攻击。通过掌握这些方法,你将能够更加自信地应对Web安全挑战,确保应用程序的安全性。
39 3
|
3月前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
【7月更文挑战第26天】在 Web 开发中, SQL 注入与 XSS 攻击常令人担忧, 但掌握正确防御策略可化解风险. 对抗 SQL 注入的核心是避免直接拼接用户输入至 SQL 语句. 使用 Python 的参数化查询 (如 sqlite3 库) 和 ORM 框架 (如 Django, SQLAlchemy) 可有效防范. 防范 XSS 攻击需严格过滤及转义用户输入. 利用 Django 模板引擎自动转义功能, 或手动转义及设置内容安全策略 (CSP) 来增强防护. 掌握这些技巧, 让你在 Python Web 开发中更加安心. 安全是个持续学习的过程, 不断提升才能有效保护应用.
46 1
|
3月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
165 3
|
3月前
|
SQL 关系型数据库 MySQL
MySQL 保姆级教程(一):了解 SQL
MySQL 保姆级教程(一):了解 SQL
|
3月前
|
SQL 关系型数据库 MySQL
MySQL小白教程(进阶篇):深入理解SQL与数据管理
MySQL小白教程(进阶篇):深入理解SQL与数据管理
|
5月前
|
SQL Oracle 关系型数据库
SQL 教程
SQL 教程
40 1
|
5月前
|
SQL 存储 网络协议
SQL Server详细使用教程
SQL Server详细使用教程
163 2
下一篇
无影云桌面