目录
source 文件存储地址
- #不加global只对当前窗口有效
- set global log_bin_trust_function_creators=1;
- DELIMITER //
- CREATE FUNCTION rand_string(n INT)
- RETURNS VARCHAR(255) #该函数会返回一个字符串
- BEGIN
- select distinct 字段 from 表;
- select distinct 字段,字段 from 表;
- describe 表名;
- desc 表名;
- select least(字段1,字段2) from 表名;
- select greatest(字段1,字段2) from 表名;
select * from table_name where id between 10 and 20;
select * from table_name where id in(1,2,3);
- select *
- from table_name
- order by 字段;
-
- select *
- from table_name
- order by 字段 DESC;
-
- select *
- from table_name
- order by 字段 ASC;
-
- select *
- from table_name
- where id in(1,2,3)
- order by 字段 ASC;
- select *
- from table_name
- limit 0,20
分类:等值链接、非等值链接;自连接、非自连接;内连接、外连接
union:满外连接,去除重复部分;
union all:满外连接,不去除重复部分;
从实现角度分为:数值函数、字符函数、加密解密函数、时间日期函数、流程控制函数、聚合函数等;
内置函数再分类:单行函数、聚合函数(或分组函数)。
函数 | 用法 |
ABS(x) | 返回x的绝对值 |
SIGN(X) | 返回x的符号。正数返回1,负数返回-1,0返回0 |
PI() | 返回圆周率的值 |
CEIL(X),CEILING(X) | 返回大于或等于某个值的最小整数,向上取整 |
FLOOR(X) | 返回小于或等于某个值的最小整数,向下取整 |
LEAST(e1,e2,e3...) | 返回表中最小值 |
GREATEST(e1,e2,e3...) | 返回表中最大值 |
MOD(X,Y) | 返回X除以Y后的余数 |
RAND() | 返回0-1的随机数 |
RAND(X) | 返回0-1的随机数,其中X的值用作种子值,相同的X值会产生相同的随机数 |
ROUND(x) | 返回一个对x的值进行四舍五入后,最接近于x的整数 |
ROUND(X,Y) | 返回一个对x的值进行四舍五入后最接近x的值,并保留小数点后面y位 |
TRUNCATE(X,Y) | 返回数字x截断y位小数的结果。取y位的x值,不四舍五入 |
SQRT(X) | 返回x的平方根。当x的值为负数时,返回null |
函数 | 用法 |
SIN(x) | 返回x的正弦值,其中,参数x为弧度值 |
ASIN(x) | 返回x的反正弦值,即获取正弦为x的值。如果x的值不在-1到1之间,则返回NULL |
COS(x) | 返回x的余弦值,其中,参数x为弧度值 |
ACOS(x) | 返回x的反余弦值,即获取余弦为x的值。如果x的值不在-1到1之间,则返回NULL |
TAN(x) | 返回x的正切值,其中,参数x为弧度值 |
ATAN(x) | 返回x的反正切值,即返回正切值为x的值 |
ATAN2(m,n) | 返回两个参数的反正切值 |
COT(x) | 返回x的余切值,其中,x为弧度值 |
函数 | 用法 |
POW(x,y),POWER(X,Y) | 返回x,y的次方 |
EXP(X) | 返回e的X次方,其中e是一个常数,2.718281828459045 |
LN(X),LOG(X) | 返回以e为底的X的对数,当X<=0时,返回的结果为NULL |
LOG10(X) | 返回以10为底的X的对数,当X<=时,返回的结果为NULL |
LOG2(X) | 返回以2为底的X的对数,当X<=0时,返回NULL |
函数 | 用法 |
BIN(X) | 将X转换为二进制 |
HEX(X) | 将X转换为十六进制 |
OCT(X) | 将X转换为八进制 |
CONV(X,F1,F2) | 返回F1进制数变成 F2进制数 |
函数 | 用法 |
ASCII(S) | 返回字符串S中的第一个字符 |
CHAR_LENGTH(S) | 返回字符串s的字符数。作用于CHARACTER_LENGTH(s)相同 |
LENGTH(S) | 返回字符串s的字节数,和字符集无关 |
CONCAT(S1,S2,S3...) | 连接s1,s2,s3......sn,为一个字符串 |
CONCAT_WS(X,S1,S2,S3...) | 同CONCAT(S1,S2,S3...)函数,但是每个字符串之间要加上x |
INSERT(str,idx,len,replacestr) | 将字符串str从第idx位置开始,len个字符长的子串替换为字符串replacestr |
REPLACE(str,a,b) | 用字符串b代替字符串str在所有出现的字符串a |
UPPER(S)或UCASE(S) | 将字符串s的所有字母转换成大写字母 |
LOWER(S)或LCASE(S) | 将字符串s的所有字母转换成小写字母 |
LEFT(str,n) | 返回字符串str最左边的n个字符 |
RIGHT(str,n) | 返回字符串str最右边的n个字符 |
LPAD(str,len,pad) | 用字符串pad对str最左边进行填充,知道str的长度为len个字符 |
RPAD(str,len,pad) | 用字符串pad对str最右边进行填充,知道str的长度为len个字符 |
LTRIM(s) | 去掉字符串s左侧的空格 |
RTRIM(s) | 去掉字符串s右侧的空格 |
TRIM(s) | 去掉字符串s首位空格 |
TRIM(s1 FROM s) | 去掉字符串s开始与结尾的s1 |
TRIM(LEADING s1 FROM s) | 去掉字符串s开始处的s1 |
TRIM(TRAILING s1 FROM s) | 去掉字符串s结尾处的s1 |
REPEAT(str,n) | 返回str重复n次的结果 |
SPACE(n) | 返回n个空格 |
STRCMP(s1,s2) | 比较字符串s1,s2的ASCII码值的大小 |
SUBSTR(s,index,len) | 返回从字符串s的index位置其len个字符,作用与SUBSTRING(s,n,len)、MID(s,n,len)相同 |
LOCATE(substr,str) | 返回字符串substr在字符串 str中首次出现的位置,作用于POSITION(substr IN str)、INSTR(str,substr)相同。未找到,返回0 |
ELT(m,s1,s2,s3...sn) | 返回指定位置的字符串,如果m=1,则返回s1 |
FIELD(s1,s2,s3...) | 返回字符串s在字符串列表中第一次出现的位置 |
FIND_IN_SET(s1,s2) | 返回字符串s1在字符串s2中出现的位置。其中,字符串s2是一个以逗号分割的字符串 |
REVERSE(s) | 返回s反转后的字符串 |
NULLIF(value2,value2) | 比较两个字符串,如果value1与value2相等,则返回null,否则返回value1 |
函数 | 用法 |
CURDATE(),CURRENT_DATE() | 返回当前日期,只包含年、月、日 |
CURTIME(),CURRENT_TIME() | 返回当前时间,只包含时、分、秒 |
NOW/SYSDATE()/CURRENT_TIMESTAMP()/LOCALTIME()/LOCALTIMESTAMP() | 返回当前系统日期和时间 |
UTC_DATE() | 返回UTC(世界标准时间)日期 |
UTC_TIME() | 返回UTC(世界标准时间)时间 |
UNIX_TIMESTAMP() | 以UNIX时间戳的形式返回当前时间。SELECT UNIX_TIMESTAMP() >1634348884 |
UNIX_TIMESTAMP(data) | 将时间data以UNIX时间戳的形式返回 |
FROM_UNIXTIME(timestamp) | 将UNIX时间戳的时间转换为普通格式的时间 |
函数 | 用法 |
AVG | 平均数 |
SUM | 求和 |
MAX | 最大值 |
MIN | 最小值 |
COUNT | 个数总和 |
- SELECT AVG(字段名) FROM TABLE_NAME;
- SELECT SUM(字段名) FROM TABLE_NAME;
- SELECT MAX(字段名) FROM TABLE_NAME;
- SELECT MIN(字段名) FROM TABLE_NAME;
- SELECT COUNT(1) FROM TABLE_NAME;
- SELECT COUNT(*) FROM TABLE_NAME;
- #计算指定字段出现个数时是并不计算NULL值的
- SELECT COUNT(字段名) FROM TABLE_NAME;
count使用时效率问题:
如果存储引擎使用MYISAM,三者效率一致;
如果使用InnoDB存储引擎:count(*)=count(1)>count(字段),数据表上建立二级索引,系统会自动采用key_len小的二级索引进行扫描。
注意事项:
注意事项:
- SELECT ...,...,...(存在聚合函数)
- FROM ...,...,...
- WHERE 多表的链接条件 AND 不包含聚合函数的过滤条件
- GROUP BY ...,...
- HAVING 包含聚合函数的过滤条件
- ORDER BY ...,...(ASC / DESC)
- LIMIT ...,...
- SELECT ...,...,...(存在聚合函数)
- FROM ...,...,... (LEEF / RIGHT) JOIN ... ON 多表的链接条件
- (RIGHT / LEEF) JOIN ... ON
- JOIN ... ON ...
- WHERE 多表的链接条件
- GROUP BY ...,...(ASC / DESC)
- HAVING 包含聚合函数的过滤条件
- ORDER BY ...,...(ASC / DESC)
- LIMIT ...,...
根据FROM查找具体表 -> 根据ON过滤连接条件 ->是否为左外右外链接 -> 行过滤:where过滤数据 -> group by 分组 -> HAVING 过滤 -> 过滤列:SELECT 过滤字段 -> DISTINCT去除 -> ORDER BY -> LIMIT
select中可以使用
case 字段名 when 条件 then 取值1 else 取值2 end 显示字段名
用来设置某个值在满足条件语句时返回不同情况字段名。
- select employee_id,last_name,job_id,department_id
- from employees el
- where exists(select *
- from employees e2
- where el.employee_id = e2.manager_id
- ;
对象 | 年龄区间 | 类型 | 字节 | 表示范围 |
人 | 150岁之间 | tinyinta unsigned | 1 | 无符号值:0到255 |
龟 | 数百岁 | smallint unsigned | 2 | 无符号值:0到65535 |
恐龙化石 | 数千万年 | int unsigned | 4 | 无符号值:0到约43亿 |
太阳 | 约50亿年 | bigint unsigned | 8 | 无符号值:约0到约10的19次方 |
整数用int;小数用decimal(m,d);时间用datetime;
如果存储范围超过decimal范围,将数据拆成整数和小数并分开存储;
如果存储的字符串长度几乎相等,使用char定长字符串类型;
varchar是可变长字符串,不预先分配存储空间,长度不要超过5000。如果存储长度大于此值,定义字段类型为text,独立出来一张表,用主键来对应,避免影响其他字段索引效率。
约束的作用:
- create table table_name(
- 字段1;
- 字段2;
- 字段3 unique;
- 字段4 unique key;
- constraint 约束名称 unique(字段1,字段2)
- );
-
- alter table 表名称 add unique key(字段列表);
- alter table 表名称 drop index 索引名称;
- create table table_name(
- 字段1;
- 字段2;
- 字段3 primary key;
- constraint 约束名称 primary key(字段1,字段2)
- );
-
- alter table 表名称 add primary key(字段列表);
- alter table 表名称 drop primary key;
- create table table_name(
- 字段1;
- 字段2;
- 字段3 check('男'or'女');
- constraint 约束名称 primary key(字段1,字段2)
- );
查看表约束:
select * from information_schema.table_constraints where table_name='表名';
create view 视图名称 as 查询语句
- create view 视图名称
- as
- select concat(e.last_name,'(',d.department_name,')') emp_info
- from emps e join depts d
- on e.department_id = d.department_id;