having

lucsa發表於2024-03-10

一、用法

和group by 一起使用,分組後再進行條件過濾就用到having了。

GROUP BY 分組欄位名 HAVING 分組後過濾條件

二、和WHERE的區別

1where是分組之前進行過濾,不滿足where條件的資料不參與分組,而having是分組之後對分組結果進行過濾。

2.where不能對聚合函式進行判斷,having可以。

1.查詢資料庫

#查詢所有資料庫
SHOW DATABASES;

#查詢當前資料庫
SELECT DATABASE();

2.建立資料庫

CREATE DATABASE [IF NOT EXISTS] 資料庫名 [DEFAULT CHARSET 字符集] [COLLATE 排序規則]; 

3.刪除資料庫

DROP DATABASE [IF EXISTS] 資料庫名;

4.使用資料庫

USE 資料庫名;

二、DDL-表操作

1.查詢表

#查詢當前資料庫所有表
SHOW TABLES;

#查詢表結構
DESC 表名;

#查詢指定表的建表語句
SHOW CREATE TABLE 表名;

2.建立表

CREATE TABLE 表名(
     欄位1 型別 [COMMENT 註釋],
     欄位2 型別 [COMMENT 註釋],
     ...
     欄位N 型別 [COMMENT 註釋]
)[COMMENT 表註釋]

3.修改表名

ALTER TABLE 表名 RENAME TO 新表名;

4.刪除表

DROP TABLE [IF EXISTS] 表名;

#刪除表並重新建立該表
TRUNCATE TABLE 表名;

5.修改欄位

#修改資料型別
ALTER TABLE 表名 MODIFY 欄位名 新資料型別(長度);

#修改欄位名和欄位型別
ALTER TABLE CHANGE 舊欄位名 新欄位名 型別(長度) [COMMENT 註釋] [約束];

6.刪除欄位

ALTER TABLE 表名 DROP 欄位名;

三、DML-新增/修改/刪除資料

1.新增資料

#單條資料
#指定欄位
INSERT INTO 表名 (欄位名1,欄位名2,...) VALUES(值1,值2,...);
#全部欄位
INSERT INTO 表名 VALUES(值1,值2,...);

#批次
#指定欄位
INSERT INTO 表名 (欄位名1,欄位名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
#全部欄位
INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);

2.修改資料

UPDATE 表名 SET 欄位名1=值1,欄位名2=值2,...[WHERE 條件]

3.刪除資料

DELETE FROM 表名 [WHERE 條件]

四、DQL-查詢資料

1.語法

SELECT   欄位
FROM     表名
WHERE    條件
GROUP BY 分組欄位
HAVING   分組後條件
ORDER BY 排序欄位
LIMIT    分頁引數