SQL常见面试题(测试工程师)
用一条 SQL 语句 查询出每门课都大于 60 分的学生姓名。表 scores 如下
SELECT name,MIN(score) as higt
from student_score ss
group by name
HAVING higt >60
用一条 SQL 语句 查询两门以上不及格课程的同学的学号姓名以及其平均成绩, 并按成绩排序
SELECT student.id ,student.student_name ,AVG(score)
FROM student ,score
WHERE student.id =score .id AND score .score <60
GROUP BY student.id
HAVING COUNT(*)>1
或者
SQL 中常用的聚合函数都有哪些?
max():最大值 min():最小值 avg():平均值 sum():求和 count():统计总数
主键、 外键和索引的区别
1) 定义
主键: 唯一标识一条记录,不能有重复的,不允许为空
外键: 表的外键是另一表的主键, 外键可以有重复的, 可以是空值
索引: 该字段没有重复值,但可以有一个空值
2) 作用
主键: 用来保证数据完整性
外键: 用来和其他表建立联系用的
索引: 提高查询排序的速度
3) 个数
主键: 只能有一个
外键: 一个表可以有多个外键
索引: 一个表可以有多个索引
drop、delete、truncate 三者的区别
都表示删除,但是三者有一些差别,
Delete 用来删除表的全部或者一部分数据行,执行 delete 之后,用户需要提交(commmit) 或者回滚(rollback)来执行删除或者撤销删除。会触发这个表上所有的delete 触发器
Truncate 删除表中的所有数据,这个操作不能回滚, 也不会触发这个表上的触发器, TRUNCATE 比 delete 更快, 占用的空间更小;
Drop 命令从数据库中删除表, 所有的数据行, 索引和权限也会被删除, 所有的 DML 触 发器也不会被触发, 这个命令也不能回滚。
列举几种表连接的方式,有什么区别?
左外连接: 左边为主表表数据全部显示, 匹配表的不匹配部分不显示。 left join on
右外连接: 右边为主表表数据全部显示, 匹配表的不匹配部分不显示。 right join on
内连接: 只有两个元素表相匹配的才能在结果集中显示 inner join on
全外连接: 连接中的不匹配的数据全部会显示出来
交叉连接: 笛卡尔乘积, 显示的结果是连接表数的乘积 cross join on
一、 列出总人数大于 4 的部门编号和该部门人数
select dept_id, count(*)
from employees
group by dept_id
having count(*)>4
二、 列出开发部和测试部的职工号, 姓名
select e.emp_id,d.emp_name
from employees e
inner join department d
on e.dept_id = d.dept_id
where d.dept_name in ('开发部','测试部')
另外一种
三、 显示工资最高的前 3 名职工的职工号和姓名
select e.emp_id, e.emp_name,s.money
from salary s
inner join employees e on s.emp_id = e.emp_id
order by s.money desc
limit 3
四,列出工资在 1000-2000 之间的所有职工姓名
select e.empname,s.salary
from salary s
inner join employees e on s.empid = e.empid
where s.salary between 1000 and 2000
查询出表中相同数据
SQL,成绩表中有id和科目,分数,找出每个人最大分数的科目