【SQL】SQL知识讲解(第二弹)

⚙️查

?️简单查询语法

-- 查询列
SELECT <列名>,……
FROM <表名>;
-- 查询全部
SELECT *
FROM <表名>;

?️设置别名

AS关键字设置别名

-- 设置别名
SELECT product_id AS id,
 product_name AS name,
 purchase_price AS price
 FROM Product;

?️去重

DISTINCT 关键字实现去重,DISTINCT 关键字只能用在第一个列名之前

SELECT 
DISTINCT product_type
,regist_date
FROM Product;

?️查询条件设置

WHERE 子句来指定查询数据的条件。

执行顺序: 

  1. 首先通过WHERE子句查询出符合条件的记录

  2. 然后再SELECT语句指定列

SELECT <列名>, ……
 FROM <表名>



 WHERE <条件表达式>;

⚙️运算符

?算数运算符

加 (+)、减(-)、乘(*)、除(/)和取模(%)运算。

另:

  1. 除:DIV

  2. 取模:MOV

  3. 非数字型字符串,运算时当作0来处理

  4. 加法两边做数值运算,会把字符串转为数字

  5. 求模后的结果符号与被模数符号相同(第一个数字

  6. 所有包含 NULL 的计算,结果肯定是NULL

    select -12 % -5 from dual -- -2
    select 12 % -5 from dual -- 2
    

?比较运算符

等号运算符 =

  • 判断两个值,字符串和表达式是否相等。
  • 不能用来比较NULL
  • 两边都是字符串,则按 ANSI码来比较。
  • 相等则为1 不相等为0

安全等于运算符 <=>

  • 可以比较null
  • 相等则为1 不相等为0

不等于 <>

  • 不能用来比较NULL

判空 IS NULL、 IS NOT NULL

?逻辑运算符

AND:与

OR:或

AND运算符的优先级高于OR运算符。

() 可以提高优先级

真值

众所周知,真值有true和false两种,但是在SQL中还有一种UNKNOWN的情况。前者是二值逻辑,后者是三值逻辑。

在值为NULL时,真值为UNKNOWN

⚙️聚合

用于汇总的函数称为聚合函数或聚集函数。聚合,就是将多行混为一行。

只有**SELECT子句、HAVING子句、** 以及**ORDER BY子句**中才能使用聚合函数。

聚合函数会将NULL排除在外,但是,COUNT(*)除外。

常见的聚合函数:

COUNT 计算表中的行数
SUM 合计
AVG 平均值
MAX 最大值
MIN 最小值
  • COUNT

    SELECT COUNT(*)
     FROM Product;
    
    
    
    
    

    注意:当表中含有null时,COUNT(*)和COUNT(<列名>)结果不同。

    • COUNT(*)会得到包含NULL的数据行数,
    • COUNT(<列名>)会得到NULL之外的数据行数。
  • SUM

    求和

    SELECT SUM(sale_price) 
     FROM Product;
    
    
    
    
    

  • AVG

    平均值

    SELECT AVG(sale_price) 
     FROM Product;
    
    
    
    
    

  • MAX、MIN

    最值

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

使用聚合函数删除重复值

先去重,再进行聚合

SELECT COUNT(DISTINCT product_type)
 FROM Product;




⚙️分组 GROUP BY

决定表的切分方式

GROUP BY 子句中指定的列称为聚合键或者分组列。

聚合键为NULL时,结果呈现 空

SELECT <列名1>, <列名2>, <列名3>, ……


 FROM <表名>



 WHERE 
 GROUP BY <列名1>, <列名2>, <列名3>, ……;

执行顺序:FROM → WHERE → GROUP BY → SELECT

?给聚合结果指定条件 HAVING

group by 给结果分好组,having指定要查询的组的条件。

SELECT <列名1>, <列名2>, <列名3>, ……


 FROM <表名>



 GROUP BY <列名1>, <列名2>, <列名3>, ……
HAVING <分组结果对应的条件>

执行顺序:SELECT → FROM → WHERE → GROUP BY → HAVING

例子:

SELECT PROD,COUNT(*) 
FROM myTable 
GROUP BY PROD
HAVING COUNT(*) = 8 

HAVING子句只能包含:

  1. 常数
  2. 聚合函数
  3. GROUP BY 中指定的列名

? 聚合键所对应的条件应该书写在 WHERE 子句之中

⚙️排序

?规则

ORDER BY 子句对查询结果进行排序。

如果存在空置NULL,空置会汇集在开头或者末尾

允许使用别名

SELECT <列名1>, <列名2>, <列名3>, ……


 FROM <表名>



 ORDER BY <排序基准列1>, <排序基准列2>, ……

?排序顺序:

升序:ASC(默认)

降序:DESC

多个排序键:

优先使用左侧的键,如果该列存在相同值的话,再接着参考右侧的键

执行顺序: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

ORDER BY子句包含:

  1. 存在表中(包括不在SELECT子句中)的列
  2. 聚合函数

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MY5Hk6rw' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片