SQL的学习

148 阅读5分钟

记录一下自己SQL的学习过程,主要针对Oracle的学习。当然,MySQL的内容也是涉及到的。

第一章 了解SQL

SQL全称为Structed Query Launge,主要是对数据库中的数据进行操作,市面上常用的数据库有Oracle和MySQL两种。

1.1 表

表是一种结构化的文件,可用来存储某种特定类型的数据。表由行(row)列(column) 所组成。行就是一行数据,也称之为记录,列就是一个字段。

第二章 检索数据

检索数据是SQL中最为常用的功能,需要狠狠地掌握。

2.1 SELECT关键字

没什么好说的,每次查询都要有SELECTFROM两个关键字。检索多个列时,用“,”来隔开。检索所有列时,用"*"(慎用!)。同时,SQL语言都以“;"来结尾。
SELECT prod_id, prod_name, prod_price FROM Products;
值得一提的是,关键字不要作为列名,以及最好写关键字的时候大写,和其他做出区别。

2.2 DISTINCT去重

想要去重时,用DISTNCT关键字,它指示数据库只返回不同的值,其必须放在列名之前。
SELECT DISTINCT vend_id FROM Products;
注意,DISTINCT 关键字作用于所有的列,不仅仅是跟在其后的那一列。

2.3 限制返回的数量

如果你使用 Oracle,需要基于 ROWNUM(行计数器)来计算行,像这样: SELECT prod_name FROM Products WHERE ROWNUM <=5;

2.4 注释

--这是oracle中的单行注释
/*这是oracle中的多行注释*/
我最恨两件事,一种是看别人代码没有注释,还有一种是自己写代码被要求写注释,可千万别当这种人阿,骚年。

第三章 排序

其实,检索出的数据并不是随机显示的。如果不排序,数据一般将以它在表中出现的顺序显示,这有可能是数据最初添加到表中的顺序。但是,如果数据随后进行过更新或删除,那么这个顺序将会受到 DBMS 重用回收存储空间的方式的影响。因此,如果不明确控制的话,则最终的结果不能(也不应该)依赖该排序顺序。关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有任何意义。对检索后的数据进行排序,就要使用ORDER BY关键字。

3.1 ORDER BY

ORDER BY可以对一列或者多列进行排序,位于SELECT语句中靠后的位置(我印象中,在MySQL中只有limit能排在它后边,Oracle还没实战过,后面遇到问题了再来更新)。下面的代码检索 3 个列,并按其中两个列对结果进行排序——首先按价格,然后按名称排序。
SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price, prod_name;
默认升序,ASC。如果想要降序的话,DESC。

大部分情况下,ORDER BY排序时不区分字段的大小写。在字典(dictionary)排序顺序中,A 被视为与 a 相同,这是大多数数据库管理系统的默认做法。但是,许多 DBMS 允许数据库管理员在需要时改变这种行为(如果你的数据库包含大量外语字符,可能必须这样做)。

此外,ORDER BY还可以通过列的位置来进行排序(但是我觉得不太好,有点魔术数的感觉,代码可阅读性很差)。同时,如果想在多个列上进行降序排序,必须对每一列指定 DESC 关键字。

第四章 过滤数据

使用WHERE来过滤数据也是SELECT中最为常用的操作啦。HAVING也是很常用的,他俩最重要的区别就是,一个是对行进行过滤,一个是对分组进行过滤,因此WHERE后不可以加分组函数!!

4.1 WHERE

WHERE子句很简单,经常跟在FROM后面。可以使用任意多个WHERE子句,用AND或OR来连接。值得注意的是,AND的优先级就远高于OR,因此使用时要注意,可以使用"()"来表明优先级。

4.2 HAVING

HAVING常用在分组函数后,对分组后的数据进行过滤。

第五章 通配符

这一章没啥好讲的,%可以表示任意多个字符,_只可以表示一个字符,使用LIKE进行模糊搜索,主要用于字符串的操作

第六章 创建计算字段

存储在数据库表中的数据一般不是应用程序所需要的格式,因此需要对其进行计算或者更改别名

6.1 拼接列表

想把两个字段拼起来,可以使用"+"或"||"。
SELECT vend_name + '(' + vend_country + ')' FROM Vendors ORDER BY vend_name;

Bear Emporium (USA )即为拼接后的结果。

6.2 列表参与计算

SELECT中,选中的字段也是可以参加运算的。

6.3 添加别名

可以使用AS或者仅仅用空格,不过还是建议使用AS,增加可读性。

第七章

常用的函数

这一章我就不列章了,用到了就写上,当成字典来用。值得一提的是,SQL的函数不同数据库并不完全通用,这里主要是Oracle的函数。

1 分组函数

顾名思义,就是用于分组计算的,常常和GROUP连用,俺知道的有5个:AVG,SUM,COUNT,MAX,MIN,没啥好说的。

2 对字符串进行操作

RTRIM() 去除右边空格, LTRIM() 去除左边空格,TRIM() 去除左右两边空格。还有其他的如下:
image.png
SUBSTR(String string, int a, int b) 对string进行截取,从a开始,截取b个,值得一提的是,a为0或1,均从第一个开始截取。
SOUNDEX() 是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。就是转换成拼音吧。。 SELECT cust_name, cust_contact FROM Customers WHERE SOUNDEX(cust_contact) = SOUNDEX('Michael Green'); 返回结果为:
cust_name cust_contact
Kids Place Michelle Green

3 时间日期函数

EXTRACT(),字符串提取,比如:
WHERE EXTRACT(year FROM order_date) = 2020;
TO_DAte(),将字符串转为月份,比如
WHERE order_date BETWEEN to_date('2020-01-01', 'yyyy-mm-dd') AND to_date('2020-12-31', 'yyyy-mm-dd');

4 对数的操作

ROUND( ,1)可以指定小数点的位数,并对其进行四舍五入。

image.png