ORM(Object relationship mapping对象关系映射)基本思想: ?表定义了数据结构,类似于Java中的类。 ?字段定义了表的详细结构,类似于Java中类的属性。 ?记录(行)定义了某个数据,类似于Java中某个类的对象。 使用上面思路,将实验用表:emp和dept之间的关系,使用两个Java类表示。 (1)emp表: public class Emp{
private int empNo; //员工编号; private String eName;//员工姓名; private String job;//员工岗位; private int mgr;//员工上级编号; private String hireDate;//员工入职时间; private double salary;//员工基本工资; private double commit;//员工绩效; private int depNo;//员工部门编号;
//构造方法,略; //getter,setter方法,略;
}
(2)dept表: public class Dept{ private int deptNo; //部门编号; private String dName; //部门名称; private String loc;//部门地址;
//构造方法,略; //getter,setter方法,略; }
?
6.【上机】完成下面的sql语句,并截图表示出结果。
i.每个员工的所有信息 分析:把员工表的所有内容都列出来; select * from emp; ii.每个人的部门编号,姓名,薪水 分析:这3项在一个表里吗?在,简单了。 同上题一样,也是14条纪录。把“*”换成指定的列名。 select deptno,ename,sal from emp; iii.每个人的年薪 分析:还是查员工信息。没有“年薪”字段,但有”sal(月薪)”,可以通过计算得到年薪信息。 select ename,sal*12 from emp; iv.计算2*3的值(利用虚拟表:dual) select 2*3 from dual; v.得到当前时间 select sysdate from dual; vi.求每个人的年薪,列的别名:“年薪”; 分析:怎么给列起别名呢?“as”关键字; select ename,sal*12 as 年薪 from emp;--“年薪”可以加或不加双引号,但单引号不行。 vii.计算每个人的全年的收入包括月薪和年终津贴(使用:nvl函数处理null值) 分析: (1)年薪 是 (月薪+绩效)*12; (2)但绩效(comm)有null值,当comm是null值时,月薪+绩效的结果也是null值; (3)所以,当comm为null值时,需要把它当作0来处理。哪个函数能胜此重任呢?nvl(); (4)nvl()相当于一条if…else语句:如果字段值不为空,取原值;否则,空值当作0来处理。
select ename,sal*12+nvl(comm,0)as 年薪 from emp;
viii.求姓名和薪水和津贴,格式为smith-sal-123(利用拼接字符串) 分析:拼接字符串不同于java中用“+”,这里用”||“。这里拼接的字符串是作为数据出现在字段内容中的。 select ename||‘-‘||sal||‘-‘||nvl(comm,0) 收入信息 from emp;
7.Oracle中,||表示什么含义?
字符串拼接。见上题“分析”部分。
8.Oracle中,双引号一般用于什么地方?单引号用于什么地方?
(1)双引号:在给字段起别名时,双引号可以加在别名上(也可以不加); 如下例中的“年薪“: select ename,sal*12 as “年薪” from emp; (2)单引号: i.字段数据中需要拼接字符串时,字符串常量要加单引号。如下例中的连字符“-“: select ename||‘-‘||sal||‘-‘||nvl(comm,0)from emp; ii.通过某varchar类型的字段数据值来查询记录时,这个用来查询的字段值要用单引号,如下例中的“KING“: select * from emp where ename=‘KING‘;
?
9.【上机】完成下面的sql语句,并截图表示出结果。
i.求10这个部门的所有员工 分析:查员工信息;但只是查部分员工而不是全部员工的信息。那是哪部分员工呢?条件是:部门编号为10的员工。用where子句。员工表包含部门信息,所以还是单表查询。 select * from emp where deptno=10; ii.求名字是KING的这个人的信息 select * from emp where ename=’KING’; iii.求薪水大于2000的员工信息 select * from emp where sal>2000; iv.求部门不是10的员工信息 (1)select * from emp where deptno<>10; (2)select * from emp where deptno!=10; v.求薪水在800和1500之间的员工信息(包含800和1500) select * from emp where sal between 800 and 1500; vi.列出deptno为10或者30,并且工资>2000的所有人 select * from emp where deptno in(10,30) and sal>2000; vii.利用in操作符,列出部门10和20的人员 select * from emp where deptno in (10,20); viii.利用like操作符,查询名字中含有"H"的人员 select * from emp where ename like ‘%H%‘; ix.分别利用like操作符和正则表达式,查询名字中含有"S"或者"M"的人员 select * from emp where ename like ‘%H%’or ename like‘%S%’;
10.下面两句话是否结果相同:相同。
select * from Emp where not ( deptno in(10,20)); select * from Emp where deptno not in(10,20);
11.数据库查询时,哪些内容区分大小写?哪些不区分?
sql语句关键字,如:select,from等不区分大小写; 表名和字段名:不区分大小写; 字段中的内容:区分大小写。
12.【上机】完成下面的sql语句,并截图表示出结果。
--把所有姓名变成小写 select lower(ename) from emp; --把所有姓名变成大写 select upper(ename) from emp; --求所有人名中包含‘a‘的员工信息不区分大小写 select ename from emp where lower(ename) like ‘%a%‘; --截取子字符串,比如求Hello的一部分 select substr(‘Hello‘,2) from dual; --求Hello的一部分,并指明长度 select substr(‘Hello‘,2,3) from dual; --求ascii码对应的字符 select chr(65) from dual; --求字符对应的ascii码 select ascii(‘中‘) from dual; --四舍五入 select round(23.652) from dual; --四舍五入小数点后面多少位 select round(23.652,1) from dual; --四舍五入小数点前面多少位 select round(23.652,-1) from dual; -------------------------------------------------------- --important!日期转换函数 -------------------------------------------------------- --将当前日期转换成1981-03-12 12:00:00这种形式的字符串 select to_char(sysdate,‘YYYY-MM-DD HH24:MI:SS‘) from dual; --将1981-03-12 12:00:00字符串转换成日期 select to_date(‘1981-03-12 12:00:00‘,‘YYYY-MM-DD HH24:MI:SS‘) from dual; --将每个人的薪水转换成固定格式的字符串 select to_char(sal,‘L00,000.9999‘) from emp; --将固定格式的字符串转换成数值 select to_number(‘$1,250.00‘,‘$9,999.99‘) from dual; --null当null参与计算时候,需要要nvl这个函数 select ename,sal*12+comm from emp; select ename,sal*12+ nvl(comm,0) from emp;
?
13.【上机】完成下面的sql语句,练习分组函数的使用,并截图表示出结果。 (编辑:淮北站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|