子查询
emp表:
depart表:
#工资高于JONES的员工
SELECT sal FROM emp WHERE ename='JONES';
SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename='JONES');
#查询与SCOTT同一个部门的员工
SELECT depno FROM emp WHERE ename='SCOTT';
SELECT * FROM emp WHERE depno=(SELECT depno FROM emp WHERE ename='SCOTT');
#工资高于30号部门所有人的员工信息
#第一种写法
SELECT MAX(sal) FROM emp WHERE depno = 30;
SELECT * FROM emp WHERE sal>(SELECT MAX(sal) FROM emp WHERE depno = 30);
#第二种写法
SELECT sal FROM emp WHERE depno=30;
SELECT * FROM emp WHERE sal>ALL(SELECT sal FROM emp WHERE depno = 30);
#查询工作和工资与MARTIN完全相同的员工信息
SELECT job,sal FROM emp WHERE ename='MARTIN';
SELECT * FROM emp WHERE ename != 'MARTIN'
AND (job,sal) IN (SELECT job,sal FROM emp WHERE ename='MARTIN');
#有2个以上直接下属的员工信息
SELECT mgr,COUNT(mgr) FROM emp GROUP BY mgr HAVING COUNT(mgr) >= 2;
SELECT * FROM emp t1,(SELECT mgr,COUNT(mgr) FROM emp
GROUP BY mgr HAVING COUNT(mgr) >= 2) t2 WHERE t1.empno = t2.mgr;
#查询员工编号为7788的员工名称、员工工资、部门名称、部门地址
-- 部门名称、部门地址属于depart表,查询时不需要获取depart表的所有信息
SELECT depno,dname,location FROM depart;
SELECT e.ename '员工姓名',e.sal '员工工资',d.dname '部门名称',d.location '部门地址'
FROM emp e,(SELECT depno,dname,location FROM depart) d
WHERE e.depno = d.depno AND e.empno = 7788;
#求各个部门薪水最高的员工所有信息
SELECT ename,MAX(sal),depno FROM emp GROUP BY depno;
SELECT t1.* FROM emp t1,(SELECT MAX(sal) 'sal',depno FROM emp
GROUP BY depno) t2 WHERE t1.sal = t2.sal;
日期函数
1.SELECT ADDTIME('2019-02-14 18:00:00','1:10:10');
在原有的时间上加上一个时间,显示新的时间
结果显示:
创建students表,插入一行数据
CREATE TABLE students(
id INT PRIMARY KEY,
sname VARCHAR(20),
entry_date DATE
);
INSERT INTO students VALUES (1,'AA','2019-02-14');
2.SELECT DATE_ADD(entry_date,INTERVAL 2 YEAR) FROM students;
SELECT DATE_ADD(entry_date,INTERVAL 2 MONTH) FROM students;
给年、月、日加上n年、n月、n日
SELECT DATE_SUB(entry_date,INTERVAL 2 MONTH) FROM students;
给年、月、日减去n年、n月、n日
结果显示:
3.SELECT NOW();
显示当前时间
结果显示:
4.SELECT CURRENT_DATE();
显示当前年月日
SELECT CURRENT_TIME();
显示当前时分秒
SELECT CURRENT_TIMESTAMP();
显示当前年月日时分秒
结果显示:
5.SELECT DATEDIFF('2018-02-14','2018-02-08');
两个日期的差
结果显示:
6SELECT DATE(CURRENT_TIMESTAMP());
显示日期部分
结果显示:
字符串函数
1.SELECT CONCAT('hello','world');
拼接字符串
结果显示:
2.SELECT INSTR('helloworld','e');
查询索引,起始索引从1开始
结果显示:
3.SELECT UCASE('helloworld');
SELECT LCASE('HELLOWORLD');
小写 -> 大写
大写 -> 小写
结果显示:
4.SELECT LEFT('helloworld',5);
截取len长度的字符串
结果显示:
5.SELECT LENGTH('helloworld');
显示字符串的长度
结果显示:
6.SELECT REPLACE(s.sname,'AA','CC') FROM students s WHERE sname = 'AA';
替换字符串
结果显示:
7.SELECT STRCMP('aa','cc');
比较两个字符串的大小
结果显示:
8.SELECT SUBSTR('helloworld',3,6);
根据起始和结束索引截取字符串
结果显示:
9.SELECT LTRIM(' hello');
去除左空格
SELECT RTRIM('hello ');
去除右空格
SELECT TRIM(' hello ');
去除两端的空格
结果显示:
数学函数
1.SELECT ABS(-30);
取绝对值
结果显示:
2.SELECT BIN(13);
十进制转换为二进制
结果显示:
3.SELECT CEILING(3.67);
向上取整
SELECT FLOOR(3.67);
向下取整
结果显示:
4.SELECT FORMAT(3.145,2);
保留n位小数,四舍五入
结果显示:
5.SELECT HEX(13);
二进制转16进制
结果显示:
6.SELECT LEAST(12,4,5);
求n个数中的最小值
结果显示:
7.SELECT MOD(20,3);
取余
结果显示:
8.SELECT RAND();
获取随机数,括号中可以传入参数
结果显示:
备份和恢复数据
备份数据:
mysqldump -u用户名 -p密码 数据库名>生成脚本文件的路径(C:\脚本名)
恢复数据:
方式一:
首先必须创建数据库,并且使用该数据库
执行SOURCE C:\脚本名;
方式二:
无需登陆数据库
mysql -u用户名 -p密码 数据库名<执行脚本路径