SQL笔试题1
1. 标准SQL创立索引:
create [unique] [cluster] index <索引名> on <表名> (<列名> [<次序>], ...);
如:
create unique index s_id on student(id dsc);
2. COALESCE 函数(ORACLE):
返回表达式(用,分割)中第一个非null的值。
3. 获取mysql中的版本和当前时间:select version(), now();
4. REGEXP:支持正则表达式
select * from pet where name REGEXP '^b';
表示选择所有name字段中以b开头的记录。
5. 选择前多少条数据:利用top,group by,以及DESC
select TOP 3 name form student ORDER BY grade DESC;
6. SQL Server数据库中删除表格中完全相同的数据(考察distinct)
先将不同的记录copy到一个新的表格,删除原来表格中的记录,再将没有重复的数据copy回去。
select distinct * into tmpTable from table;
delete from table;
insert into table select * from tmpTable;
drop table tmpTable;
7. 使用JDBC的步骤
- 注册数据库驱动
- 创建Connection类型对象
- 获得Statement类型对象
- 执行查询或者更新
- 处理ResultSet类型对象
- 释放资源
8. MySQL能通过MySQLDataSource直接建立数据源
9. Connection接口提供了哪些事务控制方法?
- setAutoCommit()
- commit()
- rollback()
10. 查询每门课程成绩都大于80分学生的学号
数据库 表- student
name score course
A 85 语文
A 75 数学
A 82 英语
B 75 语文
B 89 数学
B 79 英语
每门课程都超过80分的那个人名字的SQL语句:
SQL1:
select name from test.stu
group by name
having count(score) =sum(case when score>80 then 1 else 0 end )
SQL2:
select name from stu
group by name
having name not in (
select name from stu
where score <80)
SQL3:
select name from test.stu
group by name
having min(score)>=80
11. 查询课程001的成绩大于课程002成绩的学号
student表:sno(学号),sname(姓名),sex(性别),dept(系)
course课程表:cno(课程号),课程名(cname)
sc选课表:sno,cno,grade(成绩)
select cno from sc a inner join (select * from sc where cno=(select cno from course where cname='001')) as b on a.cno>o=(select cno from course where cname='002')
12、选出depart表(did, name)和employee(eid,name, depart_id)中的如下数据:
did name employee_sum
1 财务 2
2 销售 0
3 客服 2
SQL:
select depart.*, ifnull(num, 0) num from depart
left join( select did, count(*) num from employee group by did) e
on e.did=depart.did;
考点:ifnull/left join/ count 和 group by的组合
更多参考:sql语句
13、连接
内连接是保证两个表中所有的行都要满足连接条件,而外连接则不然。 在外连接中,某些不满条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行。
- JOIN (INNER JOIN): 如果表中有至少一个匹配,则返回行. 例如:from table1, table2 (‘,’就可以实现连接)
- (下面全是outer join)LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行。left join是left outer join的简写。
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行union 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
- union all 会选取所有的列,相等的会出现两次