给检索结果排序
表操作
插入数据
更新删除数据
子查询-迭代查询
联结-关联多个表
组合查询
视图
其它
检索 过滤检索结果
寻找指定行:(举例)
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 命令放在查询、分组等语句的最后。
创建表: