数据库学习Day8

子查询

emp表:数据库学习Day8_第1张图片
depart表:
数据库学习Day8_第2张图片

#工资高于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');
在原有的时间上加上一个时间,显示新的时间

结果显示:
1.结果显示

创建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日

结果显示:
数据库学习Day8_第3张图片
数据库学习Day8_第4张图片
在这里插入图片描述

3.SELECT NOW();
  显示当前时间

结果显示:
数据库学习Day8_第5张图片

4.SELECT CURRENT_DATE();
  显示当前年月日
  SELECT CURRENT_TIME();
  显示当前时分秒
  SELECT CURRENT_TIMESTAMP();
  显示当前年月日时分秒

结果显示:
数据库学习Day8_第6张图片
数据库学习Day8_第7张图片
数据库学习Day8_第8张图片

5.SELECT DATEDIFF('2018-02-14','2018-02-08');
  两个日期的差

结果显示:
数据库学习Day8_第9张图片

6SELECT DATE(CURRENT_TIMESTAMP());
  显示日期部分

结果显示:
数据库学习Day8_第10张图片

字符串函数

1.SELECT CONCAT('hello','world');
  拼接字符串

结果显示:
数据库学习Day8_第11张图片

2.SELECT INSTR('helloworld','e');
  查询索引,起始索引从1开始

结果显示:
数据库学习Day8_第12张图片

3.SELECT UCASE('helloworld');
  SELECT LCASE('HELLOWORLD');
  小写 -> 大写
  大写 -> 小写

结果显示:
数据库学习Day8_第13张图片
数据库学习Day8_第14张图片

4.SELECT LEFT('helloworld',5);
  截取len长度的字符串

结果显示:
数据库学习Day8_第15张图片

5.SELECT LENGTH('helloworld');
  显示字符串的长度

结果显示:
数据库学习Day8_第16张图片

6.SELECT REPLACE(s.sname,'AA','CC') FROM students s WHERE sname = 'AA';
  替换字符串

结果显示:
数据库学习Day8_第17张图片

7.SELECT STRCMP('aa','cc');
  比较两个字符串的大小

结果显示:
数据库学习Day8_第18张图片

8.SELECT SUBSTR('helloworld',3,6);
  根据起始和结束索引截取字符串

结果显示:
数据库学习Day8_第19张图片

9.SELECT LTRIM(' hello');
  去除左空格
  SELECT RTRIM('hello ');
  去除右空格
  SELECT TRIM(' hello ');
  去除两端的空格

结果显示:
数据库学习Day8_第20张图片

数学函数

1.SELECT ABS(-30);
  取绝对值

结果显示:
数据库学习Day8_第21张图片

2.SELECT BIN(13);
  十进制转换为二进制

结果显示:
数据库学习Day8_第22张图片

3.SELECT CEILING(3.67);
  向上取整
  SELECT FLOOR(3.67);
  向下取整

结果显示:
数据库学习Day8_第23张图片
数据库学习Day8_第24张图片

4.SELECT FORMAT(3.145,2);
  保留n位小数,四舍五入

结果显示:
数据库学习Day8_第25张图片

5.SELECT HEX(13);
  二进制转16进制

结果显示:
数据库学习Day8_第26张图片

6.SELECT LEAST(12,4,5);
  求n个数中的最小值

结果显示:
数据库学习Day8_第27张图片

7.SELECT MOD(20,3);
  取余

结果显示:
数据库学习Day8_第28张图片

8.SELECT RAND();
  获取随机数,括号中可以传入参数

结果显示:
在这里插入图片描述

备份和恢复数据

备份数据:
mysqldump -u用户名 -p密码 数据库名>生成脚本文件的路径(C:\脚本名)

恢复数据:
方式一:
首先必须创建数据库,并且使用该数据库
执行SOURCE C:\脚本名;
方式二:
无需登陆数据库
mysql -u用户名 -p密码 数据库名<执行脚本路径

你可能感兴趣的:(数据库学习Day8)