关于作者
金山老师:从事Java、大数据职业化培训6年,项目管理软件开发14年。欢迎添加我的微信号【jshand】
-- 排序
-- 升序(默认升序)
SELECT * FROM emp ORDER BY sal ASC
SELECT * FROM emp ORDER BY sal
-- 降序
SELECT * FROM emp ORDER BY sal DESC;
-- 多列排序
SELECT empno ,ename ,sal FROM emp ORDER BY sal DESC, empno DESC
SELECT empno ,ename ,sal FROM emp ORDER BY sal DESC, empno ASC
-- 使用数字代替列明排序 列的序号 从1开始
SELECT `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`
FROM `emp`
ORDER BY 1 DESC
-- limit 限制查询条数
-- 按照排序规则取前5条数据
-- limt count 默认start 0
-- limt start ,count
SELECT * FROM emp
SELECT * FROM emp LIMIT 5;
SELECT * FROM emp LIMIT 0,5;
SELECT * FROM emp LIMIT 5,5
pageSize: 5
pageNo: 1 SELECT * FROM emp LIMIT 5,5
推导limit分页sql过程
-- pageNo start pageSize start start : (pageNo-1) * pageSize
-- 查询 1 0 5 (1-1) *5
-- 查询 2 5 5 (2-1) *5
-- 查询 3 10 5 (3-1) *5
SELECT * FROM emp LIMIT 0,5
SELECT * FROM emp LIMIT 5,5
SELECT * FROM emp LIMIT 10,5
最终的sql语句
pageNo: 当前页号
pageSize: 每页显示条数
SELECT * FROM emp LIMIT (pageNo-1) * pageSize ,pageSize
ABS(x):返回x的绝对值;
SQRT(x):返回非负数x的平方根;
PI():返回圆周率;
MOD(x,y)或%:返回x被y除的余数;
CEIL(x)、CEILING(x):返回大于或者等于x的最小整数值;
FLOOR(x):返回小于或者等于x的最大整数值;
ROUND(x,y):返回保留小数点后面y位,四舍五入的整数;
TRUNCATE(x,y):返回被舍弃的小数点后y位的数字x;
RAND():每次产生不同的随机数;
SIGN(x):返回参数的符号;
POW(x,y)和POWER(x,y): 返回x的y次乘方的结果值;
EXP(x):返回以e为底的x乘方后的值;
LOG(x):返回x的自然对数,x相对于基数e的对数;
LOG10(x):返回x的基数为10的对数;
RADIANS(x):将参数x由角度转化为弧度;
DEGREES(x):将参数x由弧度转化为度。
SIN(x):返回x正弦,其中x为弧度值;
ASIN(x)返回x的反正弦,即正弦为x的值;
COS(x):返回x的余弦;
ACOS(x):返回x反余弦
TAN(x):返回x的正切;
ATAN(x)返回x的反正切;
/***********************************************/
/****************字符串类函数***********************/
/***********************************************/
CHAR_LENGTH(str):返回字符串str的所包含字符个数;
LENGTH(str):返回字符串str的长度;
-- 中文字符,'中' 在utf8编码下 占三个字节
SELECT CHAR_LENGTH('abcdef') , LENGTH('abcdef') , CHAR_LENGTH('中国') , LENGTH('中国')
-- CONCAT(s1,s2,...): 字符串连接;
-- CONCAT_WS(x,s1,s2,…):字符串连接, x是其它参数的分隔符;
SELECT CONCAT_WS('-','你好','我是金山老师') he
-- INSERT(s1,x,len,s2) :返回字符串s1,s1中插入字符串s2;
SELECT INSERT('abcdef',1,2,'qwert')
-- LOWER (str)|LCASE (str):将字符串全部转换成小写字母;
-- UPPER(str)|UCASE(str):将字符串全部转换成大写字母;
SELECT 'Abc' ,UPPER('Abc') 全大写 ,LOWER('Abc') 全小写
-- LEFT(s,n):返回最左边指定长度的字符;
-- RIGHT(s,n):返回最右边指定长度的字符;
SELECT LEFT('abcdef',4),RIGHT('abcdef',4)
LPAD(s1,len,s2)| RPAD(s1,len,s2) :填充字符串函数;
SELECT LPAD('abc',10,'***');
SELECT ename,LPAD(job,10,'*'),RPAD(job,10,'*') FROM emp
-- TRIM(s1 FROM s)|LTRIM(s)|RTRIM(s):删除空格函数
SELECT 'abc' ,TRIM(' ab c '),LTRIM(' ab c ') ,RTRIM(' ab c ')
-- REPEAT(s,n):重复生成字符串函数;
SELECT REPEAT('hello ',3)
-- SPACE(n):返回一个由n个空格组成的字符串;
SELECT CONCAT('start' ,SPACE(5),'end')
-- REPLACE(s,s1,s2):字符串替换函数;
SELECT REPLACE('Hello','e','a')
-- STRCMP(s1,s2):比较字符串大小函数;
SELECT STRCMP('ab','b'), STRCMP('b','a') , STRCMP('a','a')
-- SUBSTRING(s,n,len):获取子串函数;
SELECT 'hello imust' ,
SUBSTR('hello imust',6) ,
SUBSTR('hello imust',6,3),
SUBSTRING('hello imust',6) ,
SUBSTRING('hello imust',6,3),
SUBSTR('hello imust',-1) ,
SUBSTRING('hello imust',-1)
-- LOCATE(str1,str)|POSITION(str1 IN str)|INSTR(str, str1):匹配子串开始位置函数;
SELECT LOCATE('def','abcdef'),
POSITION('def' IN 'abcdef'),
INSTR('abcdef','def')
-- REVERSE(s):将字符串s反转;
SELECT 'olleh' ,REVERSE('olleh')
-- ELT(N,字符串1,字符串2,字符串3,…):返回指定位置函数;
SELECT
ELT(1 , '012' ,'abc','qqq' ) elt1,
ELT(2 , '012' ,'abc','qqq' ) elt2,
ELT(3 , '012' ,'abc','qqq' ) elt3
format 规定日期/时间的输出格式,可以有下面的格式:
%a 缩写星期名 %b 缩写月名 %c 月,数值 %D 带有英文前缀的月中的天 %d 月的天,数值(00-31) %e 月的天,数值(0-31) %f 微秒 %H 小时 (00-23) %h 小时 (01-12) %I 小时 (01-12) %i 分钟,数值(00-59) %j 年的天 (001-366) %k 小时 (0-23) %l 小时 (1-12) %M 月名 %m 月,数值(00-12) %p AM 或 PM %r 时间,12-小时(hh:mm:ss AM 或 PM) %S 秒(00-59) %s 秒(00-59) %T 时间, 24-小时 (hh:mm:ss) %U 周 (00-53) 星期日是一周的第一天 %u 周 (00-53) 星期一是一周的第一天 %V 周 (01-53) 星期日是一周的第一天,与 %X 使用 %v 周 (01-53) 星期一是一周的第一天,与 %x 使用 %W 星期名 %w 周的天 (0=星期日, 6=星期六) %X 年,其中的星期日是周的第一天,4 位,与 %V 使用 %x 年,其中的星期一是周的第一天,4 位,与 %v 使用 %Y 年,4 位 %y 年,2 位
/***********************************************/
/****************日期类函数***********************/
/***********************************************/
-- CURDATE()和CURRENT_DATE() :获取当前日期函数;
-- NOW():返回服务器的当前日期和时间;
-- CURTIME():返回当前时间,只包含时分秒;
SELECT NOW() , CURDATE() ,CURTIME()
-- UTC_DATE():返回世界标准时间日期函数;
-- UTC_TIME():返回世界标准时间函数;
-- UTC_DATE
SELECT UTC_DATE() ,UTC_TIME()
-- TIMEDIFF(expr1, expr2):返回两个日期相减相差的时间数;
-- DATEDIFF(expr1, expr2):返回两个日期相减相差的天数;
SELECT DATEDIFF('2020-11-10','2020-10-10')
SELECT TIMEDIFF('15:05:01','16:05:01')
-- DATE_ADD(date,INTERVAL expr type):日期加上一个时间间隔值;
-- select DATE_ADD(now(),'INTERVAL 1 Day')
SELECT NOW(), DATE_ADD(NOW(),INTERVAL 2 DAY) 2天后, DATE_ADD(NOW(),INTERVAL 2 YEAR) 2年后
-- DATE_FORMAT
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d'),
DATE_FORMAT(NOW(),'%y-%m-%d'),
DATE_FORMAT(NOW(),'%y-%m-%e')
/************************************/
/**************练习*********/
/************************************/
-- 练习: 字符串函数类
-- 显示所有员工姓名的前三个字符
SELECT ename ,SUBSTR(ename,1,3) FROM emp
-- 显示正好为5个字符的员工的姓名,工资,部门号
SELECT ename,sal,deptno, CHAR_LENGTH(ename) FROM emp WHERE CHAR_LENGTH(ename) = 5
-- 写一个查询,用首字母大写,其它字母小写显示雇员的 ename,
-- 显示名字的长度,并给每列一个适当的标签,条件是满足所有雇员名字的开始字母是J、A 或 M 的雇员,
-- 并对查询结果按雇员的ename升序排序。(提示:使用length、substr)
SELECT ename,
CONCAT(UCASE(SUBSTR(ename,1,1)) , LCASE(SUBSTR(ename,2))) dealname ,
LENGTH(ename) 长度,
UCASE(SUBSTR(ename,1,1)) 首字母,
LCASE(SUBSTR(ename,2)) 其他的字母,
SUBSTR(ename,1,1) FROM emp WHERE UCASE(SUBSTR(ename,1,1)) IN ('J','A','M')
ORDER BY ename
-- 查询员工姓名中中包含大写或小写字母A的员工姓名。 显示所有员工的姓名,用"A"替换所有a
SELECT REPLACE(ename,'A','a') FROM emp WHERE LCASE(ename) LIKE '%a%'
-- 查询部门编号为10或20,入职日期在81年5月1日之后,并且姓名中包含大写字母A的员工姓名,
-- 员工姓名长度
SELECT
ename,
LENGTH(ename),
hiredate ,
LOCATE('A', ename)
FROM
emp
WHERE deptno IN (10, 20)
AND hiredate > '1981-05-01'
AND ename LIKE '%A%'
-- LOCATE('A', ename) > 0
-- 查询每个职工的编号,姓名,工资 要求将查询到的数据按照一定的格式合并成一个字符串.
-- 前10位:编号,不足部分用*填充,左对齐 中间10位:姓名,不足部分用*填充,左对齐
-- 后10位:工资,不足部分用*填充,右对齐
SELECT
CONCAT(
RPAD(empno,10,'*') ,RPAD(ename,10,'*') ,LPAD(CONCAT(sal,''),10,'*') ) 薪资信息 FROM emp
第一种用法 case 字段 when 值1,,then value1
按照部门编号枚举出来 部门的名字
– 10 :销售部
– 20 :研发部
– 30 : 总裁办
– 其他 未知
SELECT
ename , deptno,
(
CASE deptno WHEN 10 THEN '销售部'
WHEN 20 THEN '研发部'
WHEN 30 THEN '总裁办'
ELSE '未知'
END
) 部门
FROM emp
第二种情况
按照工资分别显示员工的薪酬档位
SELECT ename,sal,
(CASE WHEN sal>0 AND sal<1000 THEN '初级'
WHEN sal>=1000 AND sal<2000 THEN '中级'
WHEN sal>=2000 AND sal<3000 THEN '高级'
ELSE '股东'
END ) 薪资档位
FROM emp
SELECT ename,sal,
(CASE WHEN sal BETWEEN 0 AND 999 THEN '-初级'
WHEN sal BETWEEN 1000 AND 1999 THEN '-中级'
WHEN sal BETWEEN 2000 AND 2999 THEN '-中级'
ELSE '-股东'
END ) 薪资档位
FROM emp ORDER BY sal ASC
-- 当前数据库的版本
SELECT VERSION()
-- 当前使用的数据库
USE hisjava4
SELECT DATABASE()
-- 当前会话的用户 root@localhost
SELECT USER()
-- root/root@% 密码: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
-- *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
SELECT PASSWORD('root')
SELECT MD5('root+ASDFGHJK') 张三 ,MD5('root+WERTYUI') 李四
SELECT
暴力破解:
root
63a9f0ea7bb98050796b649e85481845
root admin qwerr 放到文本
root 63a9f0ea7bb98050796b649e85481845
admin 21232f297a57a5a743894a0e4a801fc3
qwert a384b6463fc216a5f8ecb6670f86456a