having 子句,条件子句
与 where 功能、用法相同,执行时机不同。
where 在开始时执行检测数据,对原数据进行过滤。
having 对筛选出的结果再次进行过滤。
having 字段必须是查询出来的,where 字段必须是数据表存在的。
where 不可以使用字段的别名,having 可以。因为执行WHERE代码时,可能尚未确定列值。
where 不可以使用合计函数。一般需用合计函数才会用 having
SQL标准要求HAVING必须引用GROUP BY子句中的列或用于合计函数中的列。
truncate 与 delete 区别:
1,truncate 是删除表再创建,delete 是逐条删除
2,truncate 重置auto_increment的值。而delete不会
3,truncate 不知道删除了几条,而delete知道。
4,当被用于带分区的表时,truncate 会保留分区
--// 内置函数 ----------
-- 数值函数
abs(x) -- 绝对值 abs(-10.9) = 10
format(x, d) -- 格式化千分位数值 format(1234567.456, 2) = 1,234,567.46
ceil(x) -- 向上取整 ceil(10.1) = 11
floor(x) -- 向下取整 floor (10.1) = 10
round(x) -- 四舍五入去整
mod(m, n) -- m%n m mod n 求余 10%3=1
pi() -- 获得圆周率
pow(m, n) -- m^n
sqrt(x) -- 算术平方根
rand() -- 随机数
truncate(x, d) -- 截取d位小数

-- 时间日期函数
now(), current_timestamp(); -- 当前日期时间
current_date(); -- 当前日期
current_time(); -- 当前时间
date('yyyy-mm-dd hh:ii:ss'); -- 获取日期部分
time('yyyy-mm-dd hh:ii:ss'); -- 获取时间部分
date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j'); -- 格式化时间
unix_timestamp(); -- 获得unix时间戳
from_unixtime(); -- 从时间戳获得时间

-- 字符串函数
length(string) -- string长度,字节
char_length(string) -- string的字符个数
substring(str, position [,length]) -- 从str的position开始,取length个字符
replace(str ,search_str ,replace_str) -- 在str中用replace_str替换search_str
instr(string ,substring) -- 返回substring首次在string中出现的位置
concat(string [,...]) -- 连接字串
charset(str) -- 返回字串字符集
lcase(string) -- 转换成小写
left(string, length) -- 从string2中的左边起取length个字符
load_file(file_name) -- 从文件读取内容
locate(substring, string [,start_position]) -- 同instr,但可指定开始位置
lpad(string, length, pad) -- 重复用pad加在string开头,直到字串长度为length
ltrim(string) -- 去除前端空格
repeat(string, count) -- 重复count次
rpad(string, length, pad) --在str后用pad补充,直到长度为length
rtrim(string) -- 去除后端空格
strcmp(string1 ,string2) -- 逐字符比较两字串大小

-- 流程函数
case when [condition] then result [when [condition] then result ...] [else result] end 多分支
if(expr1,expr2,expr3) 双分支。

-- 聚合函数
count()
sum();
max();
min();
avg();
group_concat()

-- 其他常用函数
md5();
default();
---------------------------
-- 权限列表 ALL [PRIVILEGES]    -- 设置除GRANT OPTION之外的所有简单权限 ALTER    -- 允许使用ALTER TABLE ALTER ROUTINE    -- 更改或取消已存储的子程序 CREATE    -- 允许使用CREATE TABLE CREATE ROUTINE    -- 创建已存储的子程序 CREATE TEMPORARY TABLES        -- 允许使用CREATE TEMPORARY TABLE CREATE USER        -- 允许使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。 CREATE VIEW        -- 允许使用CREATE VIEW DELETE    -- 允许使用DELETE DROP    -- 允许使用DROP TABLE EXECUTE        -- 允许用户运行已存储的子程序 FILE    -- 允许使用SELECT...INTO OUTFILE和LOAD DATA INFILE INDEX     -- 允许使用CREATE INDEX和DROP INDEX INSERT    -- 允许使用INSERT LOCK TABLES        -- 允许对您拥有SELECT权限的表使用LOCK TABLES PROCESS     -- 允许使用SHOW FULL PROCESSLIST REFERENCES    -- 未被实施 RELOAD    -- 允许使用FLUSH REPLICATION CLIENT    -- 允许用户询问从属服务器或主服务器的地址 REPLICATION SLAVE    -- 用于复制型从属服务器(从主服务器中读取二进制日志事件) SELECT    -- 允许使用SELECT SHOW DATABASES    -- 显示所有数据库 SHOW VIEW    -- 允许使用SHOW CREATE VIEW SHUTDOWN    -- 允许使用mysqladmin shutdown SUPER    -- 允许使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL语句,mysqladmin debug命令;允许您连接(一次),即使已达到max_connections。 UPDATE    -- 允许使用UPDATE USAGE    -- “无权限”的同义词 GRANT OPTION    -- 允许授予权限