常用的SQL语句小结(二)---普通查询,注释,聚合,排序

1.普通查询

(1)查询所有列

SELECT * FROM Product;

(2)查询部分列(跟(1)对比,相当于可以自己确定顺序)

SELECT product_id, product_name, product_type, sale_price,purchase_price, regist_date FROM Product;

(3)查询时设置别名,英文和中文的区别

英文案例:

SELECT product_id AS id,product_name AS name,purchase_price AS price FROM Product;

中文案例:(注意是双引号)

SELECT product_id AS "商品编号",product_name AS "商品名称",purchase_price AS "进货单价" FROM Product;

(4)常数作为列

SELECT '商品' AS string, 38 AS number, '2009-02-24' AS date,product_id, product_name FROM Product

(5)查询结构中删除重复行(DISTINCT 关键字只能用在第一个列名之前 )
SELECT DISTINCT product_type FROM Product; 
说明:NULL也被认为是一类数据,如果有多条也会只显示一条

(6)根据WHERE语句选择查询

 

SELECT product_name, product_type FROM Product WHERE product_type = '衣服';

(7)取出数据为NULL或不为NULL的查询(不能用=NULL,NULL不能使用比较运算符)(另外,NULL值尽量少用,工作的公司要求数字类型必须设置NOT NULL约束)

为NULL:

SELECT product_name, purchase_price FROM Product WHERE purchase_price IS NULL;

不为NULL:

SELECT product_name, purchase_price FROM Product WHERE purchase_price IS NOT NULL;

2.注释的写法

1行注释
书写在“--”之后,只能写在同一行。 (MySql需要在--之后加入空格,否则不会被认为是注释)
多行注释
书写在“/*”和“*/
”之间,可以跨多行

案例:

-- 本SELECT语句会从结果中删除重复行。
SELECT DISTINCT product_id, purchase_price FROM Product;

/* 本SELECT语句,
会从结果中删除重复行。 */
SELECT DISTINCT product_id, purchase_price FROM Product;

 

3.聚合

常用的聚合函数:

COUNT: 计算表中的记录数(行数)
SUM: 计算表中数值列中数据的合计值
AVG: 计算表中数值列中数据的平均值
MAX: 求出表中任意列中数据的最大值
MIN
: 求出表中任意列中数据的最小值


(1)查询行总数(5个函数里唯一可以用*为参数的聚合函数,也是唯一不排除NULL值的聚合函数,其他函数都直接排除NULL值)

SELECT COUNT(*) FROM product;

(2)查询purchase_price字段不为NULL的行总数

SELECT COUNT(purchase_price) FROM product;

(3)计算合计值

SELECT SUM(sale_price), SUM(purchase_price) FROM Product; 
(4)计算平均值(不把NULL值的行数算入分母,如果要将NULL值当作0,记录算入分母参考复杂查询的)

SELECT AVG(sale_price), AVG(purchase_price) FROM Product;

(5)计算最大值和最小值(几乎适用于所有数据类型的列,而SUM和AVG只适合数字类型的列)

SELECT MAX(sale_price), MIN(purchase_price) FROM Product;

(6)计算去除重复值的行总数

SELECT COUNT(DISTINCT product_type) FROM Product;

(7)GROUP BY聚合键purchase_price中包含NULL的话,也会当作一种价格

SELECT purchase_price, COUNT(*) FROM Product GROUP BY purchase_price;

(8)WHERE子句必须在GROUP BY 前面

 

SELECT purchase_price, COUNT(*) FROM Product WHERE product_type = '衣服'
GROUP BY purchase_price;

(9)GROUP BY子句 不能使用 AS 别名,ORDER BY可以使用SELECT里面的别名
因为在DBMS中,SQL执行顺序是FROM=》WHERE=》GROUP BY=》常用的聚合函数=》HAVING=》SELECT=》ORDER BY

执行 GROUP BY 子句时, SELECT 子句中定义的别名, DBMS 还并不知道 

错误案例:SELECT product_type AS pt, COUNT(*) FROM Product GROUP BY pt

PostgreSQL 执行错误案例不会报错,但这是这个数据库特殊的地方,并不通用

(10)HAVING子句使用(HAVING子句的列必须包含在GROUP BY中,或者是聚合函数)

SELECT product_type, COUNT(*) FROM Product
GROUP BY product_type HAVING COUNT(*) = 2;

尽量考虑HAVINF子句的条件是否能够写到WHERE子句中,这样可以提高性能,并且写到WHERE子句还可以对WHERE子句对应条件创建索引。

 

 4.排序

(1)NULL的排序(不同数据库处理不同,可能全部在开头或全部在结尾,跟ORDER BY 的ASC(顺序)和DESC(降序)无关)

SELECT product_id, product_name, sale_price, purchase_price
FROM Product ORDER BY purchase_price;

(2)排序也可以用到SELECT中没有查询的列

SELECT product_name, sale_price, purchase_price FROM Product ORDER BY product_id; 



posted @ 2023-10-03 19:15  黑魔术师与黑魔术少女  阅读(12)  评论(0编辑  收藏  举报
1 3 levels of contents