打开heidisql,进入一个新的数据库。
数据库里最初是没有表单的
需要我们要向数据库里面create新的表单,分别是bonus,dept,emp
并且在导入表单后插入数据
简单的查看后,数据已经被导入到表单中
接着我们创建新的表单及其约束,表单名字为infos
创建完成后,我们再对scores进行操作
现在表单中还没有数据,我们向表单中手动添加数据
插入数据的时候我们发现SYSDATE显示 unknown column ,上网搜了一下,这里的SYSDATE本意应该是向表单中插入一个当前时间,这个SYSDATE是Oracle的函数,在HeidiSQL相应的函数是CURDATE(),然后我们将其改成CURDATE()就成功填入表单了。
现在我们对orders这个表单进行操作
select
order_num
from orders
where year(order_date) = 2021 -- 这个里面的year()函数也可以改成
-- extract(year from order_date)
order by order_num;
每个数据库里面有自己不同的函数,造成代码的可移植性很差,要根据不同的数据库选择不同的函数
拿日期来说,在Oracle里面可以用函数to_date,但是在MySQL里面只能使用str_to_date,并且后面的格式与Oracle不一样,在复制代码粘贴的时候总是遇到很多问题,需要我们一个个去手动调整
附个日期的格式,MySQL与Oracle日期格式的不同之处
1.mysql日期和字符相互转换方法
date_format(date,’%Y-%m-%d’) ————–>oracle中的to_char();
str_to_date(date,’%Y-%m-%d’) ————–>oracle中的to_date();
%Y:代表4位的年份
%y:代表2为的年份
%m:代表月, 格式为(01……12)
%c:代表月, 格式为(1……12)
%d:代表月份中的天数,格式为(00……31)
%e:代表月份中的天数, 格式为(0……31)
%H:代表小时,格式为(00……23)
%k:代表 小时,格式为(0……23)
%h: 代表小时,格式为(01……12)
%I: 代表小时,格式为(01……12)
%l :代表小时,格式为(1……12)
%i: 代表分钟, 格式为(00……59) 【只有这一个代表分钟,大写的I 不代表分钟代表小时】
%r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)
%T:代表 时间,格式为24 小时(hh:mm:ss)
%S:代表 秒,格式为(00……59)
%s:代表 秒,格式为(00……59)
2.例子:
select str_to_date(‘09/01/2009’,’%m/%d/%Y’)
select str_to_date(‘20140422154706’,’%Y%m%d%H%i%s’)
select str_to_date(‘2014-04-22 15:47:06’,’%Y-%m-%d %H:%i:%s’)
特别要注意的地方,这个时要区分大小写的。
这时候发现两个问题,阮小二的地址不详,班级错误,我们怎么才能对地址和班级进行更新呢?
我们可以使用 UPDATE 命令来操作。
语法:
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
现在来演示一下
F5刷新
更新表单之后,林冲因为出去买酒耽误了上课,教务处做出退学处理,需要把林冲从表单上移除,怎么实现呢?
可以使用delete语句
DELETE FROM table_name [WHERE Clause]
同样来实操下
现在林冲被退学了
另外我们还可以利用已有的表单做些新的事情
为了相应提高基本工资的号召,我们想要知道基本工资在 2000 元以上的员工姓名及其工资和不含奖金的年总工资信息,以方便统计哪些员工不需要提高工资水平。
键入以下代码
SELECT ENAME,SAL,SAL*12 AS Year_SAL
FROM emp
WHERE SAL>2000;
容易得到
如果我们还想看看这些员工的工作都是什么,只需要在后面加上JOB
大部分都是manager
接下来,我们还可以
查询 EMP 表中的员工所在部门编号;
查询出薪酬少于 2000 且没有发奖金的员工
查询工作职责是 SALESMAN、PRESIDENT 或 ANALYST 的员工
查询工资从 1000 到 2000 之间的员工
查询员工名称以 J 开头以 S 结尾的员工的姓名、工资和工资
查询出 DEPT 表中没有员工的部门编号
查询出月工资大于 2000 元的员工姓名、工作、工资,及其所在部门名称
前几个问题的解决比较简单,只需要在一个表里面就可以实现,所以把代码贴在一起
SELECT distinct DEPTNO
FROM emp;
SELECT ENAME
FROM emp
WHERE SAL<2000 AND COMM is NULL;
SELECT ENAME
FROM emp
WHERE JOB = 'SALESMAN' OR 'PRESIDENT' OR 'ANALYST';
SELECT ENAME
FROM emp
WHERE SAL BETWEEN 1000 AND 2000;
SELECT ENAME,SAL
FROM emp
WHERE ENAME LIKE 'J%S';
结果如图
最后两个问题单独列出来
SELECT distinct dept.DEPTNO
FROM dept,emp
WHERE dept.DEPTNO NOT IN (
SELECT distinct emp.DEPTNO
FROM emp
);
以及
SELECT ENAME,JOB,SAL,dept.DNAME
FROM emp,dept
WHERE emp.SAL>2000 AND emp.DEPTNO = dept.DEPTNO;
下面还有几个问题
1、查询出工作职责不是 SALESMAN、PRESIDENT 或 ANALYST 的员工姓名、工作、工资,及其所在部门名称。
SELECT ENAME,SAL,JOB,dept.DNAME
FROM emp,dept
WHERE emp.SAL>2000 AND emp.DEPTNO = dept.DEPTNO
AND (JOB NOT IN ('SALESMAN' , 'PRESIDENT' ,'ANALYST'))
2、换一种方法查询出工资大于 2000 元的员工姓名、工作、工资,及其所在部门名称。
SELECT ENAME,JOB,SAL,dept.DEPTNO
FROM emp,dept
WHERE SAL > 2000 AND emp.DEPTNO = dept.DEPTNO
ORDER BY EMPNO;
3、查询出每个部门下的员工姓名和工资。
SELECT emp.ENAME,emp.SAL,emp.DEPTNO
FROM emp,dept
WHERE emp.DEPTNO = dept.DEPTNO
ORDER BY emp.DEPTNO;
4、如果在步骤 2.4 中使用 sys 用户查询学生用户的 INFOS 表,能否查询到学生
用户 INFOS 表的添加、删除、修改操作?为什么?如果不同,如何才能让 sys 用
户查询到学生用户对 INFOS 表的添加、删除、修改操作?