软件测试面试之数据库部分
1.取第 4 到5 条记录
--按ID从小到大,查询第到第条数据
select top4 *from(
select top5 * from qiche
order by ID asc
) as TA
order by ID desc
--按ID从小到大,查询第到第条数据
select top 2*from(
select top 4 *from qiche
order by ID asc
)as TA
order by ID desc
--按ID从小到大,查询第m到第n条数据
select top nm+1 *from(
select top n*from qiche
order by ID asc
)as TA
order by ID desc
2. 有主键情况下如何去重
重复的品牌只剩一条(去重)
delete from qiche
where id not in(
select max(id)
from qiche
groupby pinpai
)
3.无主键情况下如何去重
--情况:无ID或主键的时候
create table aaa(sname varchar(10))
--1、查询不重复的姓名
select distinct sname from aaa
--2、保存到临时表
select distinct sname into ta from aaa
select *from ta
--3、删除源表数据
delete from aaa
--4、将临时表数据导回源表
insert into aaa select * from ta
select *from aaa
--5、删除临时表
drop table ta
4.数据库查询练习
--查询和张三丰同龄人的信息
select *
from B student
where YEAR(GETDATE())-YEAR(s_birthday)=(
select YEAR(GETDATE())-YEAR(s_birthday)
from B_student
where s_name='张三丰'
)
--查询哪些学生至少学了2门课程
select s name,COUNT(*)as 学习课程数量
from B_student,B_score
where B_student.s_id=B_score.sc_stu_id
group by s name
having COUNT(*)>=2
--查询梅超风有哪些课没考试(无成绩)
select c_name
from B_student,B_course,B_score
where B_student.s_id=B_score.sc_stu_id
and B_course.cid=B_score.sc_c_id
and s_name ='梅超风'
and sc_grade is null
--将高等数学成绩最高的学生的物理成绩加分
update A_studentcourse
set sc_score=sc score +10
where sccno =(
select c_no
from A_courseinfo
where c_subject='物理
)
and sc_sno in(
select sc_sno
from A_courseinfo,A_studentcourse
where A courseinfo.c_no =A_studentcourse.sc_cno
and c_subject ='高等数学'
and sc_score =(
select MAX(sc score)
from A_courseinfo,A_studentcourse
where A_courseinfo.c_no =A_studentcourse.sc_cno
and c_subject ='高等数学'
)
)
库存查询
--表1:入库表(ID、货物名称、入库数量)【每个物品入库1次】
--表2:出库表(ID、货物名称、出库数量)【每个物品可以出库多次】
--求:每个货物的库存
--总思路:入库总数量-出库总数量
create table ruku(
r_id int identity(1,1),
r_name varchar(10),
r_count int
)
create table chuku(
c_id int identity(1,1),
C_name varchar(10),
c_count int
)
insert into ruku values('苹果',100)
insert into ruku values('樱桃'100)insert
insert into chuku values('苹果',20)
insert into chuku values('苹果'20)
insert into chuku values('樱桃'60)
select r_name,(r_count-su)as剩余
from ruku,
(
select c_name,SUM(c_count)as su
from chuku group by c_name
)as zongchuku
where ruku.r_name = zongchuku.c_name
5.联接查询的种类并举例
1)、内部联接
内部联接(典型的联接运算,使用类似于=或<>的比较运算符)。内部联接包括同等联接和自然联接。
内部联接使用比较运算符根据每个表的通用列中的值匹配两个表中的行。例如,检索 students和courses 表中学生标识号相同的所有行。
2)、外部联接
外部联接。外部联接可以是左向外部联接、右向外部联接或完整外部联接。
在FROM 子句中可以用下列某一组关键字来指定外部联接:
2.1)、左外联接
LEFT JOIN 或 LEFT OUTER JOIN。
左向外部联接的结果集包括 LEFTOUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹面的行。如果左表的某一行在右表中没有匹配行,则在关联的结果集行中,来自右表的所有选择列表列均为空值。
2.2)、右外联接
RIGHT JOIN 或RIGHT OUTER JOIN右向外部联接是左向外部联接的反向联接。将返回右表的所有行。如果右表的某一行在左表中没有匹配行,则将为左表返回空值。
2.3)、全外联接
FULLJOIN 或 FULLOUTER JOIN
完整外部联接将返回左表和右表中的所有行。当某一行在另一个表中没有匹配行时,另一个表的选择列表列将包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
3)、交叉联接
交叉联接将返回左表中的所有行。左表中的每一行均与右表中的所有行组合。交叉联接也称作笛卡尔积。
| |
| 显示结果 |
| |
| |
| |
|
6.SQL Server 和 Oracle 数据库的区别
SQL Server 和 Oracle 都是非常流行的关系型数据库管理系统,它们在一些方面有一些区别:
-
开发商:SQL Server 是由Microsoft开发和维护的,而Oracle是由Oracle Corporation开发和维护的。
-
成本:SQL Server 通常比Oracle更便宜,而且有一些免费版本可供使用。而Oracle的许可费用通常较高。
-
平台支持:SQL Server 只能在Windows操作系统上运行,而Oracle可以在多个操作系统上运行,包括Windows、Linux、Unix等。
-
特性和功能:SQL Server 和 Oracle 在功能和特性方面都有一些差异。例如,SQL Server 更强调对BI(商业智能)和数据分析的支持,而Oracle更适合于大型企业级应用程序。
-
备份和恢复:Oracle 在备份和恢复方面提供了更多的选项和灵活性,包括逻辑和物理备份方法。而SQL Server 的备份和恢复过程相对简单。
-
扩展性和性能:在处理大规模数据和高并发访问方面,Oracle 通常比SQL Server 更强大和可扩展。
总的来说,选择 SQL Server 还是 Oracle 取决于具体的需求和应用场景。