一、SQL基本概念
结构化查询语言(Struct Query Language,SQL)是一种专门用来与数据库沟通的语言。
设计SQL的目的——提供一种从数据库中读写数据的简单有效的方法。
二、检索数据
SELECT语句
1.检索一个表中的数据
SELECT col_name1,col_name2,...
FROM table_name
- DISTINCT:指示数据库只返回不同的值
- TOP:最多返回前多少行
--PLAN B
SELECT prod_name
FROM Products
WHERE ROWNUM <=5
//PLAN C
SELECT prod_name
FROM Products
LIMIT 5 --返回不超过 5 行的数据
--LIMIT 5 OFFSET 5 //返回从第 5 行起的 5 行数据
SQL第一个被检索的行是第0行
三、排序检索数据
ORDER BY语句
单纯的检索数据,如果不排序,数据一般将以它在底层中出现的顺序显示,这有可能是数据最初添加到表中的顺序。但是当数据随后进行过更新或删除,那么这个顺序将会受到DBMS重用回储存空间的方式的影响。
ORDER BY 一定是SELECT语句中最后一条子句,参考列一定是可排序列
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price, prod_name
--二级排序,先参考prod_price,在参考prod_name
--ORDER BY 2 3
--二级排序,先参考第2列,在参考第3列
指定排序:默认升序,DESC降序
四、过滤数据
WHERE子句
WHERE 子句操作符
操作符 | 说明 |
---|---|
!> | 不大于 |
BETWEEN | 在指定的两个值之间 |
IS NULL | 为NULL |
<> / != | 不等于 |
高级数据过滤
- AND操作符、OR操作符
- IN操作符
- NOT操作符:除……之外的数据
NOT WHERE 子句中用来否定其后条件的关键字
用通配符进行过滤
- LIKE操作符:
%(百分号)通配符:表示任何字符出现任意次数
子句 WHERE prod_name LIKE '%'不会匹配产品名称为 NULL 的行
_(下划线)通配符:只匹配单个字符
[](方括号)通配符:必须匹配指定位置(通配符的位置)的一个字符
--找出所有名字以 J 或 M 起头的联系人
SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE '[JM]%'
ORDER BY cust_contact
五、处理数据
拼接字段
在 SQL 中的 SELECT 语句中,可使用一个特殊的操作符来拼接两个列,操作符(+,||)
根据不同数据库类型,有不同的关键字(Concat,RIRIM)
别名:AS
使用函数
文本处理函数 | 说明 |
---|---|
LEFT()/RIGHT() | 返回字符串左/右边的字符 |
LENGTH() | 返回字符串的的长度 |
LOWER()/UPPER | 将字符串转换为小/大写 |
LTRIM()/RTRIM() | 去掉字符串左/右边的空格 |
SOUNEX | 返回字符串的SOUNDEX值 |
SOUNDEX 是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。SOUNDEX 考虑了类似的发音字符和音节,使得能对字符串进行发音比较而不是字母比较。
下面给出一个使用 SOUNDEX()函数的例子。Customers 表中有一个顾客Kids Place,其联系名为 Michelle Green。但如果这是错误的输入,此联系名实际上应该是 Michael Green,该怎么办呢?显然,按正确的联系名搜索不会返回数据,如下所示:
--输入
SELECT cust_name, cust_contact
FROM Customers
WHERE cust_contact = 'Michael Green';
--输出
cust_name cust_contact
-------------------------- ----------------------------
现在试一下使用 SOUNDEX()函数进行搜索,它匹配所有发音类似于Michael Green 的联系名:
--输入
SELECT cust_name, cust_contact
FROM Customers
WHERE SOUNDEX(cust_contact) = SOUNDEX('Michael Green');
--输出
cust_name cust_contact
-------------------------- ----------------------------
Kids Place Michelle Green
在这个例子中,WHERE 子句使用 SOUNDEX()函数把 cust_contact 列值
和搜索字符串转换为它们的 SOUNDEX 值。因为 Michael Green 和Michelle Green 发音相似,所以它们的 SOUNDEX 值匹配,因此 WHERE子句正确地过滤出了所需的数据。
日期和时间处理函数
参考数据库文档
数值处理函数
常见数值处理函数 | 说明 |
---|---|
EXP() | 返回一个数的指数值 |
SQRT() | 返回一个数的平方根 |
数据汇总
SQL聚集函数 | 说明 |
---|---|
AVG() | 返回某列的平均值 |
COUNT() | 返回某列的行数 |
MAX()/MIN() | 返回某列的最大/小值 |
SUM() | 返回某列值之和 |
聚集不同值:
- DISTINCT 参数——只包含不同的值
- TOP……
数据分组
- GROUP BY 子句 ——创建分组
- HAVING 子句——过滤分组
五、视图
CREATE VIEW ProductCustomers AS
SELECT cust_name, cust_contact, prod_id
FROM Customers, Orders, OrderItems
WHERE Customers.cust_id = Orders.cust_id
AND OrderItems.order_num = Orders.order_num;