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