二.简答题
1. switch语句中表达式的值可以是哪些类型?
switch语句中表达式的值可以是int、char、byte、short、枚举、String
2. delete和truncate、drop删除数据的区别?
三者的区别
1.从删除速度上区分:
就删除数据的速度而言,一般由快到慢:drop> truncate > delete
2.从语言类型上区分:
delete语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。
truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发trigger。
(核心SQL有四部分:数据定义语言DDL、数据操作语言DML、数据控制语言DCL、嵌入式SQL语言)
3.从删除内容上:
Delete: 删除部分指定数据,可以恢复
delete语句执行后,id标识列还是按顺序排列,保持连续;{自增列}
delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行进行回滚操作。
Truncate:删除整个表数据,不可以恢复
truncate语句执行以后,ID标识列不连续 {自增列}
TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放,数据不可回滚。
@truncate和 delete只删除数据不删除表的结构(定义)
drop删除内容和定义,并释放空间。执行drop语句,将使此表的结构一起删除。
3. 简要写出设计数据库的三大范式分别是什么,各有什么作用?
三大范式:第一范式:每列只描述一件事情,确保每列的原子性
第二范式:要求一个表只描述一件事情,满足第一范式情况,与主键相关
第三范式:要求表中各列必须和主键直接相关,不能间接相关
作用:减少数据冗余
4. 在java语言中,请简要说明在循环结构中 break语句 和continue 语句的区别?
break(跳出一个switch或循环) continue(在循环末尾继续) java中break、continue、return三者之间的区别 1、break (1) 结束当前整个循环,执行当前循环下边的语句。忽略循环体中任何其它语句和循环条件测试。 (2) 只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来跳出。[逐层判断,逐步跳出] (3) break在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件是否成立,直接转向循环语句下面的语句。 (4) 当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体 2、return (1) return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行。 (2) return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致。 (3) return后面也可以不带参数,不带参数就是返回空,其实主要目的就是用于想中断函数执行,返回调用函数处。 3、continue (1) 终止本次循环的执行,即跳过当前这次循环中continue语句后尚未执行的语句,接着进行下一次循环条件的判断。 (2) 结束当前循环,进行下一次的循环判断。 (3) 终止当前的循环过程,但他并不跳出循环,而是继续往下判断循环条件执行语句.他只能结束循环中的一次过程,但不能终止循环继续进行。
三.程序题
1.请使用java,编写完成下面用户登录系统:
要求: 现有用户信息,原用户名为admin,原密码为123456,用户登录系统时需要输入用户名和密码,系统对用户输入的用户名和密码进行验证。
如果密码和用户名同时正确,则输出欢迎admin(先生/女士)登陆,否则提示用户名或者密码错误,请重新输入!
并提示你还有几次机会!验证次数最多三次,超过三次则程序结束。
//输入三次用户名密码 正确就退出 系统用户名abmin 密码:123456
public class LoginCheck {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//flag 默认是 没有登录正确的
boolean flag = false;
String name,password;
for(int i=1;i<=3;i++){
System.out.print("请输入用户名:");
name=input.next();
System.out.print("请输入密码:");
password=input.next();
if(name.equals("admin") && password.equals("123456")){
flag=true;
//输入正确就不用重复输入
break;
}else{
System.out.println("输入错误!你还有”+(3-i)+“次机会!");
}
}
if(flag==true){
System.out.println("登录成功!");
}else{
System.out.println("输入错误!登录失败!");
}
}
}
2. 使用MySQL数据,完成SQL语句
create table dept (
deptno int(11) primary key,
dname varchar(10)
);
create table emp (
empno int(11) primary key,
ename varchar(10),
job varchar(10),
mgr varchar(10),
sal varchar(10),
deptno int(11),
foreign key(deptno) references dept(deptno)
);
insert into dept values (1,’事业部’);
insert into dept values (2,’销售部’);
insert into dept values (3,’技术部’);
insert into emp values (1,’jacky’,’clerk’,’tom’,1000,1);
insert into emp values (2,’tom’,’clerk’,”,2000,1);
insert into emp values (7,’biddy’,’clerk’,”,2000,1);
insert into emp values (3,’jenny’,’sales’,’pretty’,600,2);
insert into emp values (4,’pretty’,’sales’,”,800,2);
insert into emp values (5,’buddy’,’jishu’,’canndy’,1000,3);
insert into emp values (6,’canndy’,’jishu’,”,1500,3);
请回答:
(1)列出emp表中各部门的部门号,最高工资,最低工资
Select deptno, max(sal) as 最高工资, min(sal) as 最低工资
from emp
Group by deptno ;
(2)列出emp表中各部门job为’CLERK’的员工的最低工资,最高工资
Select deptno as 部门号, max(sal) as 最高工资, min(sal) as 最低工资
from emp
Where job =’ clerk ’
Group by deptno;
(3)对于emp中最低工资小于2000的部门,列出job为’CLERK’的员工的部门号,最低工资,最高工资
Select e.deptno as 部门号,max(sal) as 最高工资, min(sal) as 最低工资
from emp as e
Where e. job = ’clerk ’ and
(select min(em.sal)
from emp as em
where e.deptno=em.deptno ) <2000
Group by e.deptno ;
(4)根据部门号由高而低列出每个员工的姓名,部门号,工资
Select ename as 姓名,deptno as 部门号,sal as 工资
from emp
Order by deptno desc;
(5)根据工资由低而高列出每个员工的姓名,部门号,工资
Select ename as 姓名,deptno as 部门号,sal as工资
from emp
Order by sal;