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和科目,分数,找出每个人最大分数的科目

 

 

 

posted @ 2024-01-20 09:21  越长大越孤单哦  阅读(294)  评论(0编辑  收藏  举报