检索
检索数据
-
检索单列
SELECT prod_name FROM Products;
-
检索多列
SELECT prod_id, prod_name, prod_price FROM Products;
-
检索所有列(降低检索和应用程序性能)
SELECT * FROM Products;
-
DISTINCT,指示数据库只返回不同的值
SELECT DISTINCT vend_id FROM Products;
-
限制结果,LIMIT、OFFSET
SELECT prod_name FROM Products LIMIT 5 OFFSET 6;
检索返回从第 6 行起第 5 行数据
检索条件 | SELECT 语句 | 说明 |
---|---|---|
单列 | SELECT prod_name | |
多列 | SELECT prod_id, prod_name, prod_price | |
所有列 | SELECT * | |
不同的值 | SELECT DISTINCT vend_id | |
限制结果 | LIMIT 5 OFFSET 6 |
数据排序
-
按列排序
SELECT prod_name FROM Products ORDER BY prod_name;
-
按多个列排序
SELECT prod_id, prod_name, prod_price FROM Products ORDER BY prod_price, prod_name;
-
按位置排序
SELECT prod_id, prod_name, prod_price FROM Products ORDER BY 2, 3;
-
降序排序 DESC
SELECT prod_id, prod_name, prod_price FROM Products ORDER BY prod_price DESC;
-
升序 ASC
过滤数据
使用 WHERE 子句
SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49;
操作符 | 说明 | WHERE 子句 | 子句说明 |
---|---|---|---|
= | WHERE prod_price = 3.49 | ||
<> | 不等于 | ||
!= | 不等于 | ||
< | |||
<= | |||
!< | 不小于 | ||
> | |||
>= | |||
!> | 不大于 | ||
BETWEEN | 在指定的两个值之间 | WHERE prod_price BETWEEN 5 AND 10 | |
IS NULL | 为 NULL 值 | WHERE prod_price IS NULL | 返回没有价格的产品 |
AND | 并且 | WHERE vend_id = 'DLL01' AND prod_price <= 4 | 返回 vend_id 是 DLL01 并且 prod_price 小于等于 4 的行 |
OR | 或者 | WHERE vend_id = 'DLL01' OR vend_id = 'BRS01' | |
IN | 指定范围 | WHERE vend_id IN ( 'DLL01', 'BRS01' ) | |
NOT | WHERE NOT vend_id = 'DLL01' | ||
LIKE | 通配符 | ||
% | 任何字符出现任意次数 | WHERE prod_name LIKE 'Fish%' | 找出所有以Fish开头的产品_ |
WHERE prod_name LIKE '%Fish%' | 包含Fish的值 | ||
_ | 单个字符 | WHERE prod_name LIKE '__Fish' | abFish将被匹配 |
[] | 字符集 | WHERE prod_name LIKE '[FH]ish' | Fish、Hish将被匹配 |
创建计算字段
拼接 Concat | SELECT Concat(vend_name, ' (' , vend_country, ')') | |
别名 AS | SELECT Concat(vend_name, ' (' , vend_country, ')') AS vend_title | |
执行算术计算( ±*/) | SELECT a, b, a*b AS c |
函数
文本处理函数
函数 | 说明 |
---|---|
LEFT() | |
LENGTH() | |
LOWER() | |
LTRIM() | |
RIGHT() | |
RTRIM | |
SOUNDEX | |
UPPER |
数值处理函数
函数 | 说明 |
---|---|
ABS() | |
COS() | |
EXP() | |
PI() | |
SIN() | |
SQRT() | |
TAN() |
聚集函数
函数 | 说明 |
---|---|
AVG() | 返回某列的平均值 |
COUNT() | 行数 |
MAX() | 最大值 |
MIN() | 最小值 |
SUM() | 和 |
SELECT AVG(prod_price) AS avg_price
分组数据
-
GROUP BY子句创建分组
SELECT vend_id, COUNT(*) AS num_prods FROM Products GROUP BY vend_id;
SELECT
指定两列,GROUP BY 子句
指示 DBMS 按 vend_id 排序并分组数据,在每组内执行计算字段
-
HAVING 过滤分组
SELECT vend_id, COUNT(*) AS num_prods FROM Products GROUP BY vend_id HAVING COUNT(*) >= 2;
在创建分组的基础上,执行
HAVING 过滤分组
条件,获取 num_prods 大于等于 2 的分组
插入数据
创建和更新表
创建表
使用 CREATE TABLE
创建表
- 表名:
Products
- 表列的名字和定义
格式:
CREATE TABLE tablename
(
column datatype [NULL|NOT NULL] [CONSTRAINTS]
)
示例:
CREATE TABLE Products
(
prod_id CHAR(10) NOT NULL,
vend_id CHAR(10) NOT NULL,
prod_name CHAR(254) NOT NULL,
prod_price DECIMAL(8,2) NOT NULL,
prod_desc VARCHAR(1000) NULL
);
更新表
使用 ALTER TABLE
更新表
格式:
ALTER TABLE tablename
(
ADD|DROP column datatype [NULL|NOT NULL] [CONSTRAINTS],
)
示例:
ALTER TABLE Vendors
ADD vend_phone CHAR(20);
删除表
格式:
DROP TABLE tablename;
视图
创建视图
格式:
CREATE VIEW viewname AS
SELECT column, ...
FROM tables, ...
[WHERE ...]
[GROUP BY ...]
[HAVING ...]
删除视图
DROP VIEW viewname;