mysql实现满连接
UNION :会执行去重的操作
UNION ALL(建议使用) :不会执行去重的操作
执行UNION ALL语句时所需的资源要比UNION语句少。如果明确知道合并数据后的结果数据不存在重复数据,或者不需要去除重复的数据,则尽量使用UNION ALL语句,以提高数据查询的效率。
单行函数
1数值型
1.1 基本函数
函数 | 用法 |
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位小数的结果 |
SQRT(x) | 返回x的平方根。当X的值为负数时,返回NULL |
举例: |
SELECT
ABS(-123),ABS(32),SIGN(-23),SIGN(43),PI(),CEIL(32.32),CEILING(-43.23),FLOOR(32.32),
FLOOR(-43.23),MOD(12,5)
FROM DUAL;
SELECT RAND(),RAND(),RAND(10),RAND(10),RAND(-1),RAND(-1)
FROM DUAL;
SELECT
ROUND(12.33),ROUND(12.343,2),ROUND(12.324,-1),TRUNCATE(12.66,1),TRUNCATE(12.66,-1)
FROM DUAL;
1.2角度弧度转换
函数 | 用法 |
RADIANS(x) | 将角度转化为弧度,其中,参数x为角度值 |
DEGREES(x) | 将弧度转化为角度,其中,参数x为弧度值 |
SELECT RADIANS(30),RADIANS(60),RADIANS(90),DEGREES(2*PI()),DEGREES(RADIANS(90))
FROM DUAL;
1.3三角函数
函数 | 用法 |
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为弧度值 |
举例:
ATAN2(M,N)函数返回两个参数的反正切值。 与ATAN(X)函数相比,ATAN2(M,N)需要两个参数,例如有两个
点point(x1,y1)和point(x2,y2),使用ATAN(X)函数计算反正切值为ATAN((y2-y1)/(x2-x1)),使用ATAN2(M,N)计
算反正切值则为ATAN2(y2-y1,x2-x1)。由使用方式可以看出,当x2-x1等于0时,ATAN(X)函数会报错,而
ATAN2(M,N)函数则仍然可以计算。
ATAN2(M,N)函数的使用示例如下:
SELECT
SIN(RADIANS(30)),DEGREES(ASIN(1)),TAN(RADIANS(45)),DEGREES(ATAN(1)),DEGREES(ATAN2(1,1)
)
FROM DUAL;
1.4指数和对数
函数 | 用法 |
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 <= 0 时,返回的结果为NULL |
LOG2(X) | 返回以2为底的X的对数,当X <= 0 时,返回NULL |
SELECT POW(2,5),POWER(2,4),EXP(2),LN(10),LOG10(10),LOG2(4)
FROM DUAL;
1.5进制间的转换
函数 | 用法 |
BIN(x) | 返回x的二进制编码 |
HEX(x) | 返回x的十六进制编码 |
OCT(x) | 返回x的八进制编码 |
CONV(x,f1,f2) | 返回f1进制数变成f2进制数 |
SELECT BIN(10),HEX(10),OCT(10),CONV(10,2,8)
FROM DUAL;
2字符串函数
函数 | 用法 |
ASCII (S) | 返回字符串S中的第一个字符串的ASCII码值 |
CHAR_LENGTH(s) | 返回字符串s的字符数,作用于CHARACTER_LENGTH(s)相同 |
LENGTH(s) | 返回字符串s的字节数,和字符集有关 |
CONCAT(s1,s2,s3…,sn) | 连接s1,s2,s3…,sn为一个字符串 |
CONCAT_WS(x,s1,s2,s3,…sn) | 同CONCAT(s1,s2,s3,…sn)函数,但是每个字符之间要加上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 s2) | 去掉字符串s开始与结尾的s1 |
TRIM(LEADING s1 FROM s2) | 去掉字符串s开始处的s1 |
TRIM(TRAINING s1 FROM s2) | 去掉字符串s结尾处的s1 |
REPEAT(str,n) | 返回str重复n次的结果 |
SPACE(n) | 返回n个空格 |
STRCMP(s1,s2) | 比较字符串s1,s2的ASCII码值的大小 |
SUBSTR(s,idx,len) | 返回从字符串s的idx位置其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(s,s1,s2,s3,…,sn) | 返回字符串s在字符串列表中第一次出现的位置 |
FIND_IN_SET(s1,s2) | 返回字符串s1在字符串s2中出现的位置。其中,字符串s2是一个以逗号分隔的字符串 |
REVERSE(s) | 返回s反转后的字符串 |
NULLIF(v1,v2) | 比较两个字符串,如果v1与v2相等,则返回NULL,否则返回v1 |
3日期和时间函数
3.1获取日期、时间
函数 | 用法 |
CURDATE() , CURRENT_DATE() | 返回当前日期,只包含年-月-日 |
CURTEIME() , CURRENT_TIME() | 返回当前时间,只包含时-分-秒 |
NOW() / SYSDATE() / CURRENT_TIMESTAMP() / LOCALTIOME() / LOCALTIMESTAMP() | 返回当前系统日期和时间 |
UTC_DATE() | 返回UTC日期 |
UTC_TIME() | 返回UTC时间 |
3.2日期与时间戳转换
函数 | 用法 |
UNIX_TIMESTAMP() | 已UNIX时间戳的形式返回当前时间 |
UNIX_TIMESTAMP(date) | 返回指定时间的UNIX时间戳形式 |
FROM_UNIXTIME(timestamp) | 将UNIX时间戳的时间,转化为普通格式的时间 |
3.3获取月份、星期、星期数、天数的函数
3.4 EXTRACT
3.5时间和秒钟转换的函数
3.6计算日志和时间的函数
3.7日期的格式化与解析