NULL
//SQL Server 、 MS Access SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0)) FROM Products //MySQL SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0)) FROM Products 或者我们可以使用 COALESCE() 函数,如下所示: SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0)) FROM Products
COUNT(DISTINCT column_name)
函数返回指定列的不同值的数目
注意:COUNT(DISTINCT) 适用于 ORACLE 和 Microsoft SQL Server,但是无法用于 Microsoft Access。
FIRST()
函数返回指定的列中第一个记录的值(同理last())
注释:只有 MS Access 支持 FIRST()、LAST()函数。
其他数据库相同作用的实现方式:
//SQL Server SELECT TOP 1 column_name FROM table_name ORDER BY column_name ASC; //MySQL SELECT column_name FROM table_name ORDER BY column_name ASC LIMIT 1; //Oracle SELECT column_name FROM table_name ORDER BY column_name ASC WHERE ROWNUM <=1;
Having子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。
SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log INNER JOIN Websites ON access_log.site_id = Websites.id) GROUP BY Websites.name HAVING SUM(access_log.count) > 200;
UCASE()、LCASE()
LCASE() 函数把字段的值转换为小写
注意:sqlserver 语法不同,SELECT LOWER(column_name) FROM table_name;
MID()
从文本字段中提取字符,name是字段名,1是开始位置(1起始),4是返回字符数(如果省略,则 MID() 函数返回剩余文本)
SELECT MID(name,1,4) AS ShortTitle FROM Websites;
LEN()
返回文本字段中值的长度。
注意:mysql语法不同,使用length()
ROUND()
用于把数值字段舍入为指定的小数位数。
SELECT ROUND(1.298, 1); -> 1.3
SELECT ROUND(-1.23); -> -1
NOW()
返回当前系统的日期和时间。
IFNULL()
SELECT IFNULL(name, NULL) name FROM …
SELECT IFNULL(count,0)count from …
FORMAT()
用于对字段的显示进行格式化
SELECT name,url,DATE_FORMAT(Now(), '%Y-%m-%d') AS date FROM Websites;