SQL函数笔记

1.SQL AVG() 函数

AVG()函数返回数值列的平均值

SELECT AVG(column_name) FROM table_name;

实例:

从”acccess_log”表的”count”列获取平均值:
SELECT AVG(count) AS CountAverage FROM access_log;

选择访问量高于平均访问量的”site_id”和”count”:
SELECT site_id, count FROM access_log
WHERE count > (SELECT AVG(count) FROM access_log);

2.SQL COUNT() 函数

COUNT() 函数返回匹配指定条件的行数。

COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
SELECT COUNT(column_name) FROM table_name;

COUNT(*) 函数返回表中的记录数:
SELECT COUNT(*) FROM table_name;

COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name;

注释:COUNT(DISTINCT) 适用于 ORACLE 和 Microsoft SQL Server,但是无法用于 Microsoft Access。

实例:

计算”access_log”表中总记录数:
SELECT COUNT(*) AS nums FROM access_log;

计算”access_log”表中不同site_id的记录数:
SELECT COUNT(DISTINCT site_id) AS nums FROM access_log;

笔记:

— 查询所有记录的条数
select count(*) from access_log;

— 查询websites 表中 alexa列中不为空的记录的条数
select count(alexa) from websites;

— 查询websites表中 country列中不重复的记录条数
select count(distinct country) from websites;

count (表达式)–分组里非空记录数
count (表达式)–分组里非空记录数
count(*) –所有记录
count(1) –所有记录
count(case job = ‘CLERK’ then 2 end ) –CLERK 人数
count(comm) –有奖金的人数
count(distinct job) –distinct(去重),共有多少种工作
实例:
select deptno,
count(1) 总人数,
count(case when job =’SALESMAN’ then ‘1’ end) 销售人数,
count(case when job =’MANAGER’ then ‘1’ end) 主管人数
from emp
group by deptno; –如果不group,会认为所有数据是一组,返回一个数据

3.SQL FIRST() 函数

FIRST() 函数返回指定的列中第一个记录的值。

SELECT FIRST(column_name) FROM table_name;

注释:只有 MS Access 支持 FIRST() 函数。

SQL Server、MySQL 和 Oracle 中的 SQL FIRST() 工作区

SQL Server 语法
SELECT TOP 1 column_name FROM table_name
ORDER BY column_name ASC;

实例
SELECT TOP 1 name FROM Websites
ORDER BY id ASC;

MySQL 语法
SELECT column_name FROM table_name
ORDER BY column_name ASC
LIMIT 1;

实例
SELECT name FROM Websites
ORDER BY id ASC
LIMIT 1;

Oracle 语法
SELECT column_name FROM table_name
ORDER BY column_name ASC
WHERE ROWNUM <=1;

实例
SELECT name FROM Websites
ORDER BY id ASC
WHERE ROWNUM <=1;

实例:
选取 “Websites” 表的 “name” 列中第一个记录的值:
SELECT name AS FirstSite FROM Websites LIMIT 1;

4.SQL LAST() 函数

LAST() 函数返回指定的列中最后一个记录的值。

SELECT LAST(column_name) FROM table_name;

注释:只有 MS Access 支持 LAST() 函数。

SQL Server、MySQL 和 Oracle 中的 SQL LAST() 工作区

SQL Server 语法
SELECT TOP 1 column_name FROM table_name
ORDER BY column_name DESC;

实例
SELECT TOP 1 name FROM Websites
ORDER BY id DESC;

MySQL 语法
SELECT column_name FROM table_name
ORDER BY column_name DESC
LIMIT 1;

实例
SELECT name FROM Websites
ORDER BY id DESC
LIMIT 1;

Oracle 语法
SELECT column_name FROM table_name
ORDER BY column_name DESC
WHERE ROWNUM <=1;

实例
SELECT name FROM Websites
ORDER BY id DESC
WHERE ROWNUM <=1;

实例
选取 “Websites” 表的 “name” 列中最后一个记录的值:
SELECT name FROM Websites
ORDER BY id DESC
LIMIT 1;

5.SQL MAX() 函数

MAX() 函数返回指定列的最大值。

SELECT MAX(column_name) FROM table_name;

实例
从 “Websites” 表的 “alexa” 列获取最大值:
SELECT MAX(alexa) AS max_alexa FROM Websites;

6.SQL MIN() 函数

MIN() 函数返回指定列的最小值。

SELECT MIN(column_name) FROM table_name;

实例
从 “Websites” 表的 “alexa” 列获取最小值:
SELECT MIN(alexa) AS min_alexa FROM Websites;

7.SQL SUM() 函数

SUM() 函数返回数值列的总数。

SELECT SUM(column_name) FROM table_name;

实例
查找 “access_log” 表的 “count” 字段的总数:
SELECT SUM(count) AS nums FROM access_log;

8.SQL GROUP BY 语句

GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

实例
统计 access_log 各个 site_id 的访问量:
SELECT site_id, SUM(access_log.count) AS nums
FROM access_log GROUP BY site_id;

SQL GROUP BY 多表连接

实例
统计有记录的网站的记录数量:
SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;

9.SQL HAVING 子句

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;

实例
查找总访问量大于 200 的网站:
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;

实例
查找总访问量大于 200 的网站,并且 alexa 排名小于 200:
在 SQL 语句中增加一个普通的 WHERE 子句:
SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
WHERE Websites.alexa < 200
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;

笔记:
where 和having之后都是筛选条件,但是有区别的:
1.where在group by前, having在group by 之后
2.聚合函数(avg、sum、max、min、count),不能作为条件放在where之后,但可以放在having之后

10.SQL EXISTS 运算符

EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。

SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);

实例
查找总访问量(count 字段)大于 200 的网站是否存在:
SELECT Websites.name, Websites.url
FROM Websites
WHERE EXISTS (SELECT count FROM access_log WHERE Websites.id = access_log.site_id AND count > 200);

EXISTS 可以与 NOT 一同使用,查找出不符合查询语句的记录:

实例
SELECT Websites.name, Websites.url
FROM Websites
WHERE NOT EXISTS (SELECT count FROM access_log WHERE Websites.id = access_log.site_id AND count > 200);

11.SQL UCASE() 函数

UCASE() 函数把字段的值转换为大写。

SELECT UCASE(column_name) FROM table_name;

用于 SQL Server 的语法
SELECT UPPER(column_name) FROM table_name;

实例
从 “Websites” 表中选取 “name” 和 “url” 列,并把 “name” 列的值转换为大写:
SELECT UCASE(name) AS site_title, url
FROM Websites;

笔记:

SQL Server 大小写用 UPPER() 和 LOWER()

大写:
SELECT UPPER(name) AS site_title, url FROM Websites;
小写:
SELECT LOWER (name) AS site_title, url FROM Websites;

12.SQL LCASE() 函数

LCASE() 函数把字段的值转换为小写。

SELECT LCASE(column_name) FROM table_name;

用于 SQL Server 的语法
SELECT LOWER(column_name) FROM table_name;

实例
从 “Websites” 表中选取 “name” 和 “url” 列,并把 “name” 列的值转换为小写:
SELECT LCASE(name) AS site_title, url
FROM Websites;

13.SQL MID() 函数

MID() 函数用于从文本字段中提取字符。

SELECT MID(column_name,start[,length]) FROM table_name;

参数 描述
column_name 必需。要提取字符的字段。
start 必需。规定开始位置(起始值是 1)。
length 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。

实例
从 “Websites” 表的 “name” 列中提取前 4 个字符:
SELECT MID(name,1,4) AS ShortTitle
FROM Websites;

14.SQL LEN() 函数

LEN() 函数返回文本字段中值的长度。

SELECT LEN(column_name) FROM table_name;

MySQL 中函数为 LENGTH():
SELECT LENGTH(column_name) FROM table_name;

实例
从 “Websites” 表中选取 “name” 和 “url” 列中值的长度:
SELECT name, LENGTH(url) as LengthOfURL
FROM Websites;

15.SQL ROUND() 函数

ROUND() 函数用于把数值字段舍入为指定的小数位数。

SELECT ROUND(column_name,decimals) FROM TABLE_NAME;

参数 描述
column_name 必需。要舍入的字段。
decimals 可选。规定要返回的小数位数。

ROUND(X): 返回参数X的四舍五入的一个整数。

实例
mysql> SELECT ROUND(-1.23);
-> -1
mysql> SELECT ROUND(-1.58);
-> -2
mysql> SELECT ROUND(1.58);
-> 2

ROUND(X,D): 返回参数X的四舍五入的有 D 位小数的一个数字。如果D为0,结果将没有小数点或小数部分。

实例
mysql> SELECT ROUND(1.298, 1);
-> 1.3
mysql> SELECT ROUND(1.298, 0);
-> 1
注意:ROUND 返回值被变换为一个BIGINT!

16.SQL NOW() 函数

NOW() 函数返回当前系统的日期和时间。

SELECT NOW() FROM table_name;

实例
从 “Websites” 表中选取 name,url,及当天日期:
SELECT name, url, Now() AS date
FROM Websites;

17.SQL FORMAT() 函数

FORMAT() 函数用于对字段的显示进行格式化。

SELECT FORMAT(column_name,format) FROM table_name;

参数 描述
column_name 必需。要格式化的字段。
format 必需。规定格式。

实例
从 “Websites” 表中选取 name, url 以及格式化为 YYYY-MM-DD 的日期:
SELECT name, url, DATE_FORMAT(Now(),’%Y-%m-%d’) AS date
FROM Websites;

18.SQL 快速参考

SQL 语句 语法

AND / OR SELECT column_name(s)
FROM table_name
WHERE condition
AND|OR condition

ALTER TABLE ALTER TABLE table_name
ADD column_name datatype
or
ALTER TABLE table_name
DROP COLUMN column_name

AS (alias) SELECT column_name AS column_alias
FROM table_name
or
SELECT column_name
FROM table_name AS table_alias

BETWEEN SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2

CREATE DATABASE CREATE DATABASE database_name

CREATE TABLE CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name2 data_type,

)

CREATE INDEX CREATE INDEX index_name
ON table_name (column_name)
or
CREATE UNIQUE INDEX index_name
ON table_name (column_name)

CREATE VIEW CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

DELETE DELETE FROM table_name
WHERE some_column=some_value
or
DELETE FROM table_name
(Note: Deletes the entire table!!)
DELETE * FROM table_name
(Note: Deletes the entire table!!)

DROP DATABASE DROP DATABASE database_name

DROP INDEX DROP INDEX table_name.index_name (SQL Server)
DROP INDEX index_name ON table_name (MS Access)
DROP INDEX index_name (DB2/Oracle)
ALTER TABLE table_name
DROP INDEX index_name (MySQL)

DROP TABLE DROP TABLE table_name

GROUP BY SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

HAVING SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value

IN SELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)

INSERT INTO INSERT INTO table_name
VALUES (value1, value2, value3,….)
or
INSERT INTO table_name
(column1, column2, column3,…)
VALUES (value1, value2, value3,….)

INNER JOIN SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name

LEFT JOIN SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name

RIGHT JOIN SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name

FULL JOIN SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name

LIKE SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern

ORDER BY SELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC|DESC]

SELECT SELECT column_name(s)
FROM table_name

SELECT * SELECT *
FROM table_name

SELECT DISTINCT SELECT DISTINCT column_name(s)
FROM table_name

SELECT INTO SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_table_name
or
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_table_name

SELECT TOP SELECT TOP number|percent column_name(s)
FROM table_name

TRUNCATE TABLE TRUNCATE TABLE table_name

UNION SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

UNION ALL SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

UPDATE UPDATE table_name
SET column1=value, column2=value,…
WHERE some_column=some_value

WHERE SELECT column_name(s)
FROM table_name
WHERE column_name operator value

原创文章,作者:czhdawn,如若转载,请注明出处:https://www.czhdawn.cn/archives/3878

(0)
czhdawn的头像czhdawn
上一篇 2022年12月24日 10:15
下一篇 2023年1月17日 23:19

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注