目录
一、选择题
二、编程题
2.1杨辉三角的变形
2.2计算某字符出现次数
一、选择题
1.一个查询语句执行后显示的结果为: 1班 80 2班 75 3班 NULL ,则最有可能的查询语句是()
A.SELECT AVG(成绩) FROM 成绩表 WHERE class<=3
B. SELECT AVG(成绩) FROM 成绩表 WHERE class<=3 GROUP BY class
C. SELECT AVG(成绩) FROM 成绩表 WHERE class<=3 order by class
D. SELECT AVG(成绩) FROM 成绩表 HAVING class <=3 GROUP BY class
能输出null值,并给输出每个班级的平均成绩一定要对班级进行分组GROUP BY class,先判断class<=3需要用到where语句然后再分组,having是分组后的条件判断。
所以正确答案是 B
2.下列sql语句中哪条语句可为用户zhangsan分配数据库userdb表userinfo的查询和插入数据权限()。
A. grant select,insert on userdb.userinfo to'zhangsan'@'localhost'
B. grant'zhangsan'@'localhost'to select,insert for userdb.userinfo
C. grant select,insert on userdb.userinfo for'zhangsan'@'localhost'
D. grant'zhangsan'@'localhost'to userdb.userinfo on select,insert
用户的权限控制:grant
库,表级的权限控制 : 将某个库中的某个表的控制权赋予某个用户
Grant all ON db_name.table_name TO user_name [ indentified by ‘password’ ];
所以正确答案是 A
3.下列对于数据库索引的说法一定是错误的()
A. 索引可以提升查询,分组和排序的性能
B.索引不会影响表的更新、插入和删除操作的效率
C. 全表扫描不一定比使用索引的执行效率低
D. 对于只有很少数据值的列,不应该创建索引
当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度所以B错误。
所以正确答案是 B
4.在oracle中,下面哪个SQL命令用来向表中添加列()
A. MODIFY TABLE TableName ADD COLUMN ColumnName
B. MODIFY TABLE TableName ADD ColumnName
C. ALTER TABLE TableName ADD COLUMN ColumnName
D. ALTER TABLE TableName ADD ColumnName Type
modify:修改字段类型和长度,alter:修改表的数据结构,增加列:alter table tableName add columnName varchar (30)
所以正确答案是 C
5.有订单表orders,包含字段用户信息userid,字段产品信息productid,以下语句能够返回至少被订购过两次的productid?
A. select productid from orders where count(productid)>1
B. select productid from orders where max(productid)>1
C. select productid from orders where having count(productid)>1 group by productid
D.select productid from orders group by productid having count(productid)>1
返回productid:select productid
订单表orders检索:from orders
至少被订购过两次的productid,则需要根据字段产品信息进行分组,如果出现了两次,那么就能输出 group by productid having count(productid)>1
所以正确答案是 D
6. 在手机开发中常用的数据库是 ___
A. SQLite
B. Oracle
C. Sql Server
D. Db23
在手机开发中常用的数据库是SQLite
所以正确答案是 A
7.下列哪个特性与此事相关:已落实的事务会保证所有操作均已完成,并且在事务回滚中,所有操作产生的影响均已得到恢复?
A. 隔离性
B. 原子性
C. 一致性
D. 持久性
原子性:事务是一个不可分割的整体,为了保证事务的总体目标,事务必须具有原子性,即当数据修改时,要么全执行,要么全不执行,即不允许事务部分的完成,避免了只执行这些操作的一部分而带来的错误。原子性要求失误必须被完整执行。
一致性:一个事务执行之前和之后,数据库数据必须要保持一致性状态。数据库的一致性状态应该满足模式锁指定的约束,那么在完整执行该事务后数据库仍然处于一致性的状态。为了维护所有数据的完整性,在关系型数据库中,所有规则必须应用到事务的修改上。数据库的一致性状态由用户来负责,由并发控制机制实现。例如银行转账,转账前后两个账户金额之和应保持不变。由此并发操作带来的数据不一致性包括丢失数据修改、读脏数据。不可重复读、产生‘幽灵’数据。
隔离性:隔离性也被成为独立性,当两个或多个事务并发执行时,为了保证数据的安全性,将一个事物内部的操作与事务的操作隔离起来,不被其他正在执行的事务看到。
持久性:持久性也被成为永久性,事务完成之后,DBMS保证它对数据库中的数据的修改是永久性的,当系统或介质发生故障时,该修改也永久保持。持久性一般通过数据库备份与恢复来保证。
所以正确答案是 B
8.athletes 表包含运动员姓名,年纪和代表国家。下面哪个查询可以找出代表每个国家最年轻的运动员情况?
A. SELECT name, country, age FROM athletes WHERE (country, age) IN (SELECT country, min(age) FROM athletes GROUP BY country)
B. SELECT name, country, age FROM athletes WHERE (country, age) IN (SELECT min(age), country FROM athletes GROUP BY country)
C. SELECT name, country, age FROM athletes WHERE (country, age) IN (SELECT country, min(age) FROM athletes) GROUP BY country
D. SELECT name, country, age FROM athletes WHERE age IN (SELECT country, min(age) FROM athletes GROUP BY country)
查询运动员情况SELECT name, country, age
从athletes 表中检索FROM athletes
每个国家最年轻的需要在创建一个检索找到年龄最小的运动员,然后当第一次检索检索到这个年龄则输出 WHERE age IN (SELECT country, min(age) FROM athletes GROUP BY country)
所以正确答案是 A
9.执行以下 SQL ,下面哪个名字会被查询出来()
SELECT FirstName FROM StaffList WHERE FirstName LIKE’_A%’
A. Allen
B. CLARK
C. JACKSON
D. David
LIKE指和后面引用中长相相似的元素,_A%中_代表一个字符%代表一个或者多个字符。所以是A前有一个字符,后面有一个或多个字符。所以是JACKSON。
所以正确答案是 C
10.MySQL数据库有选课表learn(student_id int,course_id int),字段分别表示学号和课程编号,现在想获取每个学生所选课程的个数信息,请问如下的sql语句正确的是
A. select student_id,sum(course_id)from learn
B. select student_id,count(course_id)from learn group by student_id
C. select student_id,count(course_id)from learn
D. select student_id,sum(course_id)from learn group by student_id
获取每个学生所选课程的个数信息 select student_id,count(course_id)
从选课表中获取from learn
每个学生是需要分组的group by student_id
所以正确答案是 B
二、编程题
2.1杨辉三角的变形
以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数、左上角数和右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。 求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3,输入2则输出-1。 数据范围: 1 \le n \le 10^9 \1≤n≤10 9
根据如上图中我们能发现其中规律,当n==1||n==2是没有偶数的,所以这个条件则直接输出-1,当n-1是2的倍数是,第二个位置一定是偶数,直接输出2,所以n能整除4,则第三个位置一定是偶数输出3,。如果n不能那个整除4,也不满足之前的条件那么第四个位置是偶数,直接输出4。
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n == 1 || n == 2) {
System.out.println(-1);
} else if ((n - 1) % 2 == 0) {
System.out.println(2);
} else if (n % 4 == 0) {
System.out.println(3);
} else if (n % 4 != 0) {
System.out.println(4);
}
}
}
2.2计算某字符出现次数
写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母) 数据范围: 1 \le n \le 1000 \1≤n≤1000
首先取得两个字符串之后,对每个字符串都变成小写,然后存储第二个字符串的唯一字符。然后遍历第一个字符串,如果相等则count++,最后遍历完成后输出count的值即可。
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String s = sc.nextLine();
s = s.toUpperCase();
str = str.toUpperCase();
char c = s.charAt(0);
int count = 0;
for (int i = 0; i < str.length(); i++) {
char c1 = str.charAt(i);
if(c1==c){
count++;
}
}
System.out.println(count);
}
}