SQL学习(二)

一、常见语句

(1)查询指定列:直接使用SELECT 列名 FROM 表
(2)查询所有列:使用SELECT * FROM 表
(3)另设列的名字:使用AS 或者不使用AS也可以

SELECT shohin_id AS Id, shohin_mei AS Name, shiire_tanka Price
FROM Shohin;    -- 不用 AS 关键字也可以

(4)删除重复行:DISTINCT

SELECT DISTINCT shohin_bunrui FROM dbo.Shohin;

(5)筛选:WHERE
PS: SQL 子句的书写格式是固定的,不能随意更改。如 WHERE 子句必须紧跟在 FROM 子句后

SELECT shohin_id, shohin_mei, shohin_bunrui
FROM dbo.Shohin
WHERE shohin_bunrui = '衣服';  -- shohin_bunrui = '衣服':为条件表达式

(6)如何注释

--  单行注释

/*
    多行注释
*/

(7)不能对 NULL 使用比较运算符

FROM dbo.Shohin
WHERE shiire_tanka = NULL;        --错误的 SELECT 语句

--示例2
SELECT shohin_mei, shiire_tanka
FROM dbo.Shohin
WHERE shiire_tanka IS NULL;        --选取 NULL 的记录

--示例3
SELECT shohin_mei, shiire_tanka
FROM dbo.Shohin
WHERE shiire_tanka IS NOT NULL;    --选取不为 NULL 的记录

二、逻辑运算

(1)NOT: 取反

--示例:
SELECT *
FROM dbo.Shohin
WHERE NOT hanbai_tanka >= 1000;  --等价于 hanbai_tanka < 1000

(2)AND / OR: AND优先级大于OR
PS:如果想让 OR运算先,则需要加上 ()括号

--示例
SELECT shohin_mei, shiire_tanka
FROM dbo.Shohin
WHERE shohin_bunrui = '厨房用具'
    AND hanbai_tanka >= 3000;

三、聚合查询

(1)5个常用的聚合函数:

  • COUNT: 计算表的行数
  • SUM: 计算列的数据总和
  • AVG: 计算列的数据平均值
  • MAX: 计算列的数据的最大值
  • MIN: 计算列的数据的最小值
    比如计算一个表数据总行:
--示例
SELECT COUNT(*)  -- *:参数,这里代表全部列,为8行
FROM dbo.Shohin;

将 COUNT(*) 的参数改成指定对象的列,就可以得到该列的非 NULL 行数

SELECT COUNT(shiire_tanka)  --这里为6行 有两行是null
FROM dbo.Shohin;  

使用所有的聚合函数

SELECT SUM(hanbai_tanka) AS sum_hanbai_tanka,    --总和
    AVG(hanbai_tanka) AS avg_hanbai_tanka,        --平均
    MAX(hanbai_tanka) AS max_hanbai_tanka,        --最大
    MIN(hanbai_tanka) AS min_hanbai_tanka        --最小
FROM dbo.Shohin;

四、对表分组

(1)GROUP BY 子句

--语法:
--SELECT <列名1>, <列名2>, ...
--FROM <表名>
--GROUP BY <列名1>, <列名2>, ...;
--示例
SELECT shohin_bunrui AS '商品种类',
    COUNT(*) AS '数量'      --能计算分组后,每组的行数
FROM dbo.Shohin
GROUP BY shohin_bunrui;

PS: 【子句的书写顺序】SELECT --> FROM --> WHERE --> GROUP BY

SELECT shiire_tanka, COUNT(*)
FROM dbo.Shohin
WHERE shohin_bunrui = '衣服'
GROUP BY shiire_tanka

这里先根据WHERE子句指定的条件进行过滤,然后在GROUP BY聚合
PS:【执行顺序】FROM --> WHERE --> GROUP BY --> SELECT。这里是执行顺序,跟之前的书写顺序是不一样的
(2)易错:在 WHERE 子句中使用聚合函数
只有 SELECT 子句和 HAVING 子句(以及 ORDER BY 子句)中能够使用聚合函数。
所以说,GROUP BY经常和HAVING一起组合–考点
(3)HAVING: 分组结果后对应的条件

--语法:
--SELECT <列名1>, <列名2>, ...
--FROM <表名>
--GROUP BY <列名1>, <列名2>, ...
--HAVING <分组结果对应的条件>
SELECT shohin_bunrui, COUNT(*)
FROM dbo.Shohin
GROUP BY shohin_bunrui
HAVING COUNT(*) = 2

PS:【书写顺序】SELECT --> FROM --> WHERE --> GROUP BY --> HAVING
(4) HAVING VS WHERE
有些条件可以写在 HAVING 子句中,又可以写在 WHERE 子句中。这些条件就是聚合键所对应的条件在这里插入图片描述
【建议】虽然结果一样,聚合键对应的条件应该写在 WHERE 子句中,不是 HAVING 子句中。
【理由】
①WHERE 子句的执行速度比 HAVING 快。

②意义:WHERE 子句 = 指定行所对应的条件,HAVING 子句 = 指定组所对应的条件
(5)ORDER BY:
对指定列进行排序,默认从小到大,即为升序(ASC)。需要升序的话,则加DESC

--语法:
--SELECT <列名1>, <列名2>, ...
--FROM <表名>
--ORDER BY <排序基准列1>, <排序基准列2>, ...

【书写顺序】SELECT --> FROM --> WHERE --> GROUP BY --> HAVING --> ORDER BY

SELECT shohin_id, shohin_mei, hanbai_tanka, shiire_tanka
FROM dbo.Shohin
ORDER BY hanbai_tanka, shohin_id; --先对hanbai_tanka排序,等hanbai_tanka相同的时候,再按照id排序

ORDER BY可以用SELECT字句中的别名

SELECT shohin_id AS id, shohin_mei, hanbai_tanka AS ht
FROM dbo.Shohin
ORDER BY ht, id;

【执行顺序】FROM --> WHERE --> GROUP BY --> HAVING --> SELECT --> ORDER BY
所以,总结的说, ORDER BY 子句可以使用 SELECT 子句中定义的别名,GROUP BY 子句不能使用别名

猜你喜欢

转载自blog.csdn.net/Jiana_Feng/article/details/107869976