数据库实验报告2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
理工大学信息工程与自动化学院学生实验报告
(2011 —2012 学年第 1 学期)
课程名称:数据库系统教程开课实验室:信自楼445 2011 年11月 27日
一、上机目的及容
1.上机容:
SQL的数据查询,查询、插入、删除、修改
2.上机目的:
掌握数据查询语句,并能熟练应用
二、实验原理及基本技术路线图(方框原理图或程序流程图)
在SQL server 2008软件中的查询中,输入SQL代码
三、所用仪器、材料(设备名称、型号、规格等或使用软件)
1台PC及SQL server 2008软件
四、实验方法、步骤(或:程序代码或操作过程)
1)select查询
单表查询:查询全体学生的学号及:
SELECT SNO,SNAME FROM S;
查询全体学生的全部信息:
SELECT*FROM S;
2)查询经过计算值
(SELECT子句的<目标列表达式>为表达式,表达式可以是:算术表达式、字符串常量、函数、列别名等)
查全体学生的学号、及其出生年份:
SELECT SNO,SNAME,2012-AGE FROM S;
查询全体学生的、出生年份和所属系:
SELECT SNO,SNAME,2012-AGE,SDEPT FROM S;
查询选修了课程的学生学号:
SELECT SNO FROM SC,C WHERE O=O;
为了避免这种不合题意的情况,我们用distinct用了去除重复的元组。所以上例中的执行语句为:
SELECT DISTINCT SNO FROM SC;
SELECT DISTINCT SNO FROM SC,C WHERE O=O;
查询选修课程的各种成绩:
SELECT CNO,GRADE FROM SC;
SELECT DISTINCT CNO,DISTINCT GRADE FROM SC;
SELECT CNO,DISTINCT GRADE FROM SC;
SELECT DISTINCT CNO,GRADE FROM SC;
SELECT CNO,GRADE FROM SC;
对上述情况的分析及总结:distinct作用于其后的列,同一个selsct 后面只允许跟一个distinct而且只能放在第一个列的位置上。若此处不同distinct则执行语句按照表中的顺序顺序的执行下来(如执行语句3的结果示)
选择满足条件的元组选择满足条件的元组选择满足条件的元组选择3)满足条件的元组
比较大小比较大小比较大小比较大小在WHERE子句的<比较条件>中使用比较运算符=,>,<,>=,<=,!= 或 <>,!>,!<,逻辑运算符NOT + 比较运算符。
查询所有年龄在20岁以上,30以下的学生及其年龄:
SELECT SNAME,AGE FROM S WHERE AGE>20 and AGE<30;
SELECT SNAME,AGE FROM S WHERE AGE BETWEEN 20 AND 30;
4)使用谓词:IN <值表>,NOT IN <值表>。 <值表>:用逗号分隔的一组取值
查询信自、材料和机械学院学生的和性别:
SELECT SNAME,SEX FROM S WHERE SDEPT IN(SELECT SDEPT FROM S WHERE SDEPT='信自'or SDEPT='材料'or SDEPT='机械');
SELECT SNAME,SEX FROM S WHERE SDEPT IN('信自','材料','机械');
总结:在使用in查询某一个值在某一个围的时候,要加在围上加上括号,括号里面的表示围。如果表示某一个值不属于某一个围,则用not in
5)字符串的匹配操作字符串的匹配操作字符串的匹配操作字符串的匹配操作条件表达式中字符串的匹配操作符是“LIKE”(可以用= 运算符取代 LIKE 谓词,用 != 或 < >运算符取代 NOT LIKE 谓词。)在表达式中可以使用两个通配符:百分号(%):与零个或者多个字符组成的字符串匹配。a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串。下划线( _):与单个字符匹配。a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串。
查询2009开头学号的学生的详细情况
SELECT*FROM S WHERE SNO LIKE'2009%';
查询所有姓学生的、学号和性别:
SELECT SNO,SNAME,SEX FROM S WHERE SNAME LIKE'%'; SELECT SNO,SNAME,SEX FROM S WHERE SNAME LIKE'_';
查找不姓的学生的详细情况
SELECT SNO,SNAME FROM S WHERE SNAME not LIKE'';
6)使用换码字符将通配符转义为普通字符使用换码字符将通配符转义为普通字符使用换码字符将通配符转义为普通字符使用换码字符
将通配符转义为普通字符为了使字符串中包含特殊字符(既%和_),SQl允许定义转义字符。转义字符紧靠特殊字符(%和_)并放在它前面,表示该特殊字符将被当成普通字符。在like比较中使用ESCAPE 关键字定义转义符。一般使用(\)作为转义字符,也可以用其他字符,只要和ESCAPE后面的匹配就可以,如使用([)也可以,但为了不出现错误,尽量不要用%和_作为转义字符。
查询语文课程的课程号和课程名:
SELECT CNO,CNAME FROM C WHERE CNAME LIKE'语_'ESCAPE'\';
7)涉及空值的查询涉及空值的查询涉及空值的查询涉及空值的查询SQL中允许列值为空,空值用保留字NULL表示。可以使用谓词 IS NULL 或 IS NOT NULL,这里IS NULL 是测试列值是否为空,如果需要测试非空值则用IS NOT NULL,请注意,“IS NULL”不能用“= NULL”代替。
某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号
SELECT CNO,SNO FROM SC WHERE GRADE IS NULL;
某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询有成绩的学生的学号和相应的课程号