SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回

给检索结果排序

表操作

插入数据

更新删除数据

子查询-迭代查询

联结-关联多个表

组合查询

视图

其它

检索 过滤检索结果

寻找指定行:(举例)

SELECT prod_name, prod_price FROM Products WHERE prod_price = 3.49;(和字符串比较加单引号,数值不用)

查找列名为prod_name和列名为prod_price的两列,检索其中prod_price = 3.49; 的所有行。
= 可以替换为其它操作符,如下表

操作符描述
=   等于  
<>   不等于  
>   大于  
<   小于  
>=   大于等于  
<=   小于等于  
BETWEEN   在某个范围内  
LIKE   搜索某种模式  

组合WHERE子句:

SELECT prod_id, prod_price, prod_name FROM Products WHERE vend_id = 'DLL01' AND prod_price <= 4;

AND 连接同时需要满足的两个条件,OR即满足一个条件即可,NOT 找到与后边条件不匹配的行。
且not,and和or可以组合使用,用小括号声明逻辑循序。
WHERE vend_id IN ( 'DLL01', 'BRS01' )
IN 起到作用类似于or,速度更快,逻辑更清晰。

通配符搜索:

SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE '%bean bag%';

%表示任意字符出现任意次数。也可以出现在中间位置。
_ 表示一个字符。
[charlist] 表示包含在里面的任意字符,[^charlist]不包含在里面的任意字符。少使用通配符,搜索速度较慢。

数据汇总处理

算术计算:

SELECT prod_id, quantity, item_price, quantity * item_price AS expanded_price FROM OrderItems WHERE order_num = 20008;

expanded_price成为计算出来的新列。

字符串拼接:不同数据库有差异,MySQL中:

SELECT concat(vend_name , vend_country) AS vend_title FROM Vendors ORDER BY vend_name;

concat_ws( ':' , vend_name , vend_country) 形式第一个参数为分隔符。
其他数据库用+或者||拼接字符串。

日期时间处理不同数据库差异较大。

内置方法:

求平均值:
SELECT AVG(prod_price) AS avg_price
FROM Products;
表Products中prod_price的平均值。返回给 avg_price。
可以配合WHERE语句计算指定行的平均值。

求最大值:MAX(prod_price)

求最小值:MIN(prod_price)

求和:SUM(prod_price)

近似的小数点后几位:ROUND(column_name,decimals)

当前日期: Now()

求行数:
SELECT COUNT(*) AS num_cust
FROM Customers;
求表Customers有几行。返回给num_cust。
*可以换成指定列如:cust_email。计算所得行数不包括该列值为null的行。
DISTINCT 列名,求不重复的列。

组合:

SELECT COUNT(*) AS num_items, MIN(prod_price) AS price_min, MAX(prod_price) AS price_max, AVG(prod_price) AS price_avg FROM Products;

分组

创建分组:

SELECT vend_id FROM Products GROUP BY vend_id;

根据 vend_id列中内容对 vend_id分组,
第一行换成 SELECT vend_id, COUNT(*) AS num_prods 即对每一个组计算行数。
注意:多行NULL会分为一组,GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。
可以对一个以上的列进行 GROUP BY

过滤分组: HAVING:类似于WHERE。唯一的差别是,WHERE过滤行,而HAVING过滤分组。

SELECT vend_id, COUNT(*) AS num_prods FROM Products WHERE prod_price >= 4 GROUP BY vend_id HAVING num_prods >= 2;

过滤出有(两个价格大与4的产品)的供应商

给检索结果排序

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

可以 ORDER BY 列名1,列名2; 先按列名1内容排序,排序结果相同的按列名2内容排序。
列名后接 DESC 按该列内容倒序排列,ASC 正序(默认)。
ORDER BY 命令放在查询、分组等语句的最后。

表操作

创建表:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/608365df94e829b5409921f5b778aa54.html