第二周周测
选择题:每题3分,共45分
1. 数据表students中likes字段数据类型为set(“python”,”study”,”MySQL”),当在表中插入该字段值时以下正确的是?(AC) 多选
A. “Python,MySQL”
B. “Python”,”MySQL”
C. ‘Python,MySQL’
D. Python,MySQL,MongoDB
解析: MySQL数据类型中的枚举类型分为单选enum()和多选set(),在set()类型的字段插入记录有两个要求:1、字段值必须在给定值的范围内选择;2、选择多个值时用一对引号把所有值引起来,不同值之间用逗号隔开。
2. 您有一个包含有关您学校中所有学生的信息的表。要更改表中学生的名字,应使用哪个 SQL 关键字?(B)单选
A. change
B. update
C. insert
D. select
解析:change为修改表名,update为更新表记录,insert为插入表记录,select为查询表记录。
3. 在表中插入记录时,如果不给该字段赋值,该字段返回系统当前时间的数据类型是?( A) 单选
A. timestamp
B. datetime
C.now
D.nowtime
解析:MySQL数据类型中的日期时间类型有两个函数,datetime()和timestamp(),datetime()在不给值时默认返回值为NULL,而timestamp()在不给值时会默认返回系统的当前时间。
4. 有一个学生信息表,其中一个字段成绩定义如下:
score int(2)
则该字段可以插入如下哪几条记录?(ABCD)多选
A.99
B.100
C.60
D.3
解析:int数据类型为大整型,有符号存储范围为-2**31 ~ +2**31 – 1,int(2)括号中的2仅仅为显示宽度,和存储数据的位数无关,而字符类型的宽度则为实际存储数据的宽度,二者在本质上是不同的。
5. 有一张顾客信息表customer,包含如下字段:
id int primary key auto_increment,
name varchar(20),
order varchar(20)
表中有如下2条记录:
1 张三 iphone
2 李四 ipad
现执行如下两条SQL命令,
delete from customer where id = 2;
insert into customer(name,order)values(“王五”,”iwatch”)
则customers表中 王五 该条记录的内容为?:(C)单选
A. 1 王五 iwatch
B. 2 王五 iwatch
C. 3 王五 iwatch
D. NULL 王五 iwatch
解析:表中id字段一般为能唯一锁定一条记录的字段,一旦表中id字段设置为了主键并附加自增长属性,则在插入记录时如未给id字段赋值,会在最后一次输入的id字段值的基础上 +1,如最后一条或多条记录被删除则会继续 +1。
6. 一个数据库包含两个表,分别为 Customer 和 Order. Order外键关联Customer表主键
执行以下语句:
delete from Order where CustomerID=209;
结果是什么?(D)单选
A. 从 Customer 表中删除 CustomerID为209的记录
B. 从 Order 表中删除 CustomerID为209 的所有记录,并从 Customer 表中删除 CustomerID为209的记录
C. 从 Order 表中删除 CustomerID为209 的第一条记录
D. 从 Order 表中删除 CustomerID为209 的所有记录
解析:本题考查delete语句的使用, 无论delete语句中涉及到几张表,删除记录时删除的是delete from后所跟的表名中的相关记录。
7. 哪条语句会在students表中删除未输入电话号码的行?(C)单选
A. delete from students where phone is not null
B. delete from students where phone = “”
C. delete from students where phone is null
D. delete from students phone = null
解析:NULL为空值,””为空字符串,匹配空值(NULL)必须用 is 或者 is not,而匹配空字符串(””)则用 = 或者 !=。
8. 以下能够删除一列的是?:(B)单选
A. alter table students remove age
B. alter table students drop age
C. alter table students delete age tinyint unsigned
D. alter table students drop age tinyint unsigned
解析:删除表字段使用关键字drop,且要删除的字段名之后无需给定该字段的数据类型,delete是删除表中相关记录,和字段操作无关。
9. update 和 delete 语句的区别是什么?(A)单选
A. update 语句不会从表中删除行
B. 一条 update 语句只能更改一行
C. delete 语句不能用 where 子句
D. delete 语句只能在存储过程中运行
解析:update语句是更新表记录,update语句后不加where条件会将表中所有记录更新,delete语句后不加where条件会将表中所有记录删除。
10. 向数据库中插入一条记录用哪一项?(D)单选
A.CREATE B.SAVE C.UPDATE D.INSERT
解析:INSERT为mysql中的插入操作语句
简答题(30分)
1. 小明家必须要过一座桥。小明过桥最快要1秒,小明的弟弟最快要3秒,小明的爸爸最快要6秒,小明的妈妈最快要8秒,小明的爷爷最快要12秒。每次此桥最多可过两人,而过桥的速度依过桥最慢者而定。过桥时候是黑夜,所以必须有手电筒,小明家只有一个手电筒,而且手电筒的电池只剩30秒就将耗尽。小明一家该如何过桥,请写出详细过程。
# 让最快的人多跑几次
# 3+1 6+1 8+1 12 = 32s
# 让慢的一起走
# 3+1 12+3 6+1 3 = 29s
#1.小明和弟弟先走 小明回来
#2.妈妈和爷爷走 弟弟回来
#3.小明和爸爸走 小明回来
#4.小明和弟弟走
while True:
#a岸
a = [1,3,6,8,12]
#b岸
b = []
#速度
SPEED = 0
#流程
step = []
while True:
#随机获取两个a中的元素
x = random.sample(a,2)
#将元素放入b中
b.extend(x)
#从a中删除元素
a.remove(x[0])
a.remove(x[1])
step.append(x)#将随机组合添加到列表
step.append(max(x))#将随机组合的过河时间也添加到列表
if not a:
break
#从b中随机找一个到a
y = random.sample(b,1)
a.extend(y)
b.remove(y[0])
step.append(y[0])#记录 返回的时间
step.append(‘||‘)
# print(step)
for i in step:
if type(i) == int:
SPEED += i
if SPEED<=30:
break
print(step)
编程题(每题20分,共40分)
1. 给你一个 n*m 的二维数组,每个元素保证递增,每列元素保证递增,试问如何找到某个数字,或者判断这个数字不存在。
matrix = [
[2,4,6,9],
[13,15,17,19],
[24,26,27,28]
]
def search(matrix,num):
row = len(matrix)
col = len(matrix[0])
i = row-1
j = 0
res = False
# matrix[i][j]
while True:
if i<0 or j==col:
break
if matrix[i][j] > num:
# 如果 左下角元素大于目标 上移
i-=1
elif matrix[i][j] < num:
# 如果 左下角元素小于目标 右移
j+=1
elif matrix[i][j] == num:
res = True
break
return res
print(search(matrix,24))
-
给你一个长度为n的数组,其中只有一个数字出现了1次,其他均出现2次,问如何快速的找到这个数字。
list01 = [2,1,1,3,3,0,0]
list01.sort()
for i in range(0,len(list01)-1,2):
if list01[i] != list01[i+1]:
print(list01[i])