微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!
非常不错的SQL语句学习手册实例版
<IMG alt="" src="http:https://files.jb51.cc/upload/200732519629842.jpg">
表操作
例1对于表的教学管理
数据库中的表STUDENTS,可以定义如下:
<div class="codetitle">
<a style="CURSOR: pointer" data="47605" class="copybut" id="copybut47605" onclick="doCopy('code47605')"> 代码如下:
<div class="codebody" id="code47605">
CreateTABLESTUDENTS(SNONUMERIC(6,0)NOTNULL
SNAMECHAR(8)NOTNULL
AGENUMERIC(3,0)
SEXCHAR(2)
BPLACECHAR(20)
PRIMARYKEY(SNO))
例2对于表的教学管理
数据库中的表ENROLLS,可以定义如下:
<div class="codetitle">
<a style="CURSOR: pointer" data="39319" class="copybut" id="copybut39319" onclick="doCopy('code39319')"> 代码如下:
<div class="codebody" id="code39319">
CreateTABLEENROLLS(SNONUMERIC(6,0)NOTNULL
CNOCHAR(4)NOTNULL
GRADEINT
PRIMARYKEY(SNO,CNO)
FOREIGNKEY(SNO)REFERENCE
sstUDENTS(SNO)
FOREIGNKEY(CNO)REFERENCESCOURSES(CNO)
CHECK((GRADEISNULL)or(GRADEBETWEEN0AND100)))
例3根据表的STUDENTS表,建立
一个只包含学号、姓名、年龄的女学生表。<div class="codetitle">
<a style="CURSOR: pointer" data="17293" class="copybut" id="copybut17293" onclick="doCopy('code17293')"> 代码如下:
<div class="codebody" id="code17293">
CreateTABLEGIRLASSelectSNO,SNAME,AGE
FROMSTUDENTSWhereSEX='女';
例4
删除教师表TEACHER。 DropTABLETEACHER
例5在教师表中
增加住址列。 AlterTABLETEACHERSADD(ADDRCHAR(50))
例6把STUDENTS表中的BPLACE列
删除,并且把引用BPLACE列的所有视图和约束也一起
删除。 AlterTABLESTUDENTSDropBPLACECASCADE
例7补充定义ENROLLS表的主关键字。 AlterTABLEENROLLSADDPRIMARYKEY(SNO,CNO);
视图操作(虚表)
例9建立
一个只
包括教师号、姓名和年龄的视图FACULTY。(在视图定义中不能包含orDERBY子句) CreateVIEWFACULTYASSelectTNO,TNAME,AGEFROMTEACHERS
例10从学生表、课程表和选课表中产生
一个视图GRADE_TABLE,它
包括学生姓名、课程名和成绩。 CreateVIEWGRADE_TABLEASSelectSNAME,CNAME,GRADE
FROMSTUDENTS,COURSES,ENROLLS
WhereSTUDENTS.SNO=ENROLLS.SNOAND
COURSES.CNO=ENROLLS.CNO
例11
删除视图GRADE_TABLE DropVIEWGRADE_TABLERESTRICT
索引操作
例12在学生表中按学号建立索引。 CreateUNIQUEINDEXSTONSTUDENTS(SNO,ASC)
例13
删除按学号所建立的索引。 DropINDEXST
数据库模式操作
例14创建
一个简易教学
数据库的
数据库模式TEACHING_DB,属主为ZHANG。 CreateSCHEMATEACHING_DBAUTHRIZATIONZHANG
例15
删除简易教学
数据库模式TEACHING_DB。
(1)选用CASCADE,即当
删除数据库模式时,则本
数据库模式和其下属的基本表、视图、索引等全部被
删除。
(2)选用RESTRICT,即本
数据库模式下属的基本表、视图、索引等事先已清除,才能
删除本
数据库模式,否则拒绝
删除。 DropSCHEMATEACHING_DBCASCADE
单表操作
例16找出3个学分的课程号和课程名。 SelectCNO,CNAMEFROM COURSESWhere CREDIT=3
例17
查询年龄大于22岁的学生情况。 Select
FROMSTUDENTSWhereAGE>22
例18找出籍贯为河北的男生的姓名和年龄。 SelectSNAME,AGEFROM STUDENTS
Where BPLACE='河北'ANDSEX='男'
例19找出年龄在20~23岁之间的学生的学号、姓名和年龄,并按年龄升序排序。(ASC(升序)或DESC(降序)声明排序的方式,缺省为升序。) SelectSNO,AGEFROMSTUDENTS
WhereAGEBETWEEN20AND23
orDERBYAGE
例20找出年龄小于23岁、籍贯是湖南或湖北的学生的姓名和性别。(条件比较运算符=、<和逻辑运算符AND(与),此外还可以使用的运算符有:>(大于)、>=(大于等于)、<=(小于等于)、<>(不等于)、NOT(非)、or(或)等。
谓词LIKE只能与字符串联用,常常是“<列名>LIKEpattern”的格式。特殊字符“_”和“%”作为通配符。
谓词IN表示指定的属性应与后面的集合(括号中的值集或某个查询子句的结果)中的某个值相匹配,实际上是一系列的or(或)的缩写。谓词notin表示指定的属性不与后面的集合中的某个值相匹配。
谓词BETWEEN是“包含于…之中”的意思。) SelectSNAME,SEXFROMSTUDENTS
WhereAGE<23ANDBPLACELIKE'湖%'
或 SelectSNAME,SEXFROMSTUDENTS
WhereAGE<23ANDBPLACEIN('湖南','湖北')
例22找出学生表中籍贯是空值的学生的姓名和性别。(在sql中不能使用条件:<列名>=NULL。在sql中只有一个特殊的查询条件允许查询NULL值:) SelectSNAME,SEXFROMSTUDENTSWhereBPLACEISNULL
多表操作
例23找出成绩为95分的学生的姓名。(子查询) SelectSNAMEFROMSTUDENTS
Where SNO=
(SelectSNOFROMENROLLSWhereGRADE=95)
例24找出成绩在90分以上的学生的姓名。 SelectSNAMEFROMSTUDENTS
WhereSNOIN
(SelectSNOFROMENROLLSWhereGRADE>90)
或 SelectSNAMEFROMSTUDENTS
WhereSNO=ANY
(SelectSNOFROMENROLLSWhereGRADE>90)
例25查询全部学生的学生名和所学课程号及成绩。(连接查询) SelectSNAME,CNO,GRADEFROMSTUDENTS,ENROLLS
WhereSTUDENTS.SNO=ENROLLS.SNO 例26找出籍贯为山西或河北,成绩为90分以上的学生的姓名、籍贯和成绩。(当构造多表连接查询命令时,必须遵循两条规则。第一,连接条件数正好比表数少1(若有三个表,就有两个连接条件);第二,若一个表中的主关键字是由多个列组成,则对此主关键字中的每一个列都要有一个连接条件(也有少数例外情况)) SelectSNAME,BPLACE,ENROLLS
WhereBPLACEIN(‘山西',‘河北')ANDGRADE>=90AND STUDENTS.SNO=ENROLLS.SNO
例28查出课程成绩在80分以上的女学生的姓名、课程名和成绩。(FROM子句中的子查询) SelectSNAME,GRADEFROM(SelectSNAME,ENROLLS,COURSESWhereSEX='女')
AstemP(SNAME,GRADE)WhereGRADE>80
表达式与函数的使用
例29查询各课程的学时数。(算术表达式由算术运算符+、-、、/与列名或数值常量所组成。) SelectCNAME,COURSE_TIME=CREDIT
16FROMCOURSES
例30找出教师的最小年龄。(内部函数:sql标准中只使用COUNT、SUM、AVG、MAX、MIN函数,称之为聚集函数(SetFunction)。COUNT函数的结果是该列统计值的总数目,SUM函数求该列统计值之和,AVG函数求该列统计值之平均值,MAX函数求该列最大值,MIN函数求该列最小值。) SelectMIN(AGE)FROMTEACHERS
例31统计年龄小于等于22岁的学生人数。(统计) SelectCOUNT()FROMSTUDENTSWhereAGE<=22
例32找出学生的平均成绩和所学课程门数。 SelectSNO,AVG(GRADE),COURSES=COUNT(
)FROMENROLLSGROUPBYSNO
例34找出年龄超过平均年龄的学生姓名。 SelectSNAMEFROMSTUDENTS
WhereAGE>(SelectAVG(AGE)FROMSTUDENTS)
例35找出各课程的平均成绩,按课程号分组,且只选择学生超过3人的课程的成绩。(GROUPBY与HAVING
GROUPBY子句把一个表按某一指定列(或一些列)上的值相等的原则分组,然后再对每组数据进行规定的操作。
GROUPBY子句总是跟在Where子句后面,当Where子句缺省时,它跟在FROM子句后面。
HAVING子句常用于在计算出聚集之后对行的查询进行控制。) SelectCNO,STUDENTS=COUNT()FROMENROLLS
GROUPBYCNOHAVINGCOUNT(
)>=3
相关子查询
例37查询没有选任何课程的学生的学号和姓名。(当一个子查询涉及到一个来自外部查询的列时,称为相关子查询(correlatedSubquery)。相关子查询要用到存在测试谓词EXISTS和NOTEXISTS,以及ALL、ANY(SOME)等。) SelectSNO,SNAMEFROMSTUDENTSWhereNOTEXISTS
(SelectFROMENROLLSWhereENROLLS.SNO=STUDENTS.SNO)
例38
查询哪些课程只有男生选读。 Selec
tdistINCTCNAMEFROMCOURSESC
Where'男'=ALL
(SelectSEXFROMENROLLS,STUDENTSWhereENROLLS.SNO=STUDENTS.SNOANDENROLLS.CNO=C.CNO)
例39要求给出一张学生、籍贯列表,该表中的学生的籍贯省份,也是其他一些学生的籍贯省份。 SelectSNAME,BPLACEFROMSTUDENTSAWhereEXISTS
(Select
FROMSTUDENTSBWhereA.BPLACE=B.BPLACEANDA.SNO<>B.SNO)
例40找出选修了全部课程的学生的姓名。本查询可以改为:查询这样一些学生,没有一门课程是他不选修的。 SelectSNAMEFROMSTUDENTSWhereNOTEXISTS
(SelectFROMCOURSESWhereNOTEXISTS
(Select
FROMENROLLSWhereENROLLS.SNO=STUDENTS.SNOANDENROLLS.CNO=
关系代数运算
例41设有某商场工作人员的两张表:营业员表SP_SUBORD和营销经理表SP_MGR,其关系数据模式如下:
SP_SUBORD(SALPERS_ID,SALPERS_NAME,MANAGER_ID,OFFICE)
SP_MGR(SALPERS_ID,OFFICE)
其中,属性SALPERS_ID为工作人员的编号,SALPERS_NAME为工作人员的姓名,MANAGER_ID为所在部门经理的编号,OFFICE为工作地点。
若查询全部商场工作人员,可以用下面的sql语句: (SelectFROMSP_SUBORD)UNION(Select
FROMSP_MGR)
或等价地用下面的sql语句: SelectFROM(TABLESP_SUBORDUNIONTABLESP_MGR)
(2)INTERSECT(Select
FROMSP_SUBORD)
INTERSECT(SelectFROMSP_MGR)
或等价地用下面的
sql语句:
Select
FROM(TABLESP_SUBORDINTERSECTTABLESP_MGR)
或用带ALL的sql语句:
(SelectFROMSP_SUBORD)INTERSECTALL(Select
FROMSP_MGR)
或
SelectFROM(TABLESP_SUBORDINTERSECTALLTABLESP_MGR)
(3)EXCEPT(Select
FROMSP_MGR)
EXCEPT(SelectFROMSP_SUBORD)
或等价地用下面的
sql语句:
Select
FROM(TABLESP_MGREXCEPTTABLESP_SUBORD)
或用带ALL的sql语句:
(SelectFROMSP_MGR)EXCEPTALL(Select
FROMSP_SUBORD)
例42查询籍贯为四川、课程成绩在80分以上的学生信息及其成绩。(自然连接)
(SelectFROMSTUDENTSWhereBPLACE=‘四川')NATURALJOIN
(Select*FROMENROLLSWhereGRADE>=80)
例3.43列出全部教师的姓名及其任课的课程号、班级。(外连接与外部并外连接允许在结果表中保留非匹配
元组,空缺部分填以NULL。外连接的作用是在做连接操作时避免丢失信息。
外连接有3类:
(1)左外连接(LeftOuterJoin)。连接运算谓词为LEFT[OUTER]JOIN,其结果表中保留左关系的所有
元组。
(2)右外连接(RightOuterJoin)。连接运算谓词为RIGHT[OUTER]JOIN,其结果表中保留右关系的所有
元组。
(3)全外连接(FullOuterJoin)。连接运算谓词为FULL[OUTER]JOIN,其结果表中保留左右两关系的所有
元组。) SelectTNAME,CLASSFROMTEACHERSLEFTOUTERJOINTEACHINGUSING(TNO)
sql的数据操纵
例44把教师李映雪的记录加入到教师表TEACHERS中。(插入) InsertINTOTEACHERSVALUES(1476,'李映雪',44,'副教授')
例45成绩优秀的学生将留下当教师。 InsertINTOTEACHERS(TNO,TNAME)Selec
tdistINCTSNO,SNAME
FROMSTUDENTS,ENROLLS
WhereSTUDENTS.SNO=ENROLLS.SNOANDGRADE>=90
例47把所有学生的年龄
增加一岁。(
修改) UpdateSTUDENTSSETAGE=AGE+1
例48学生张春明在
数据库课考试中作弊,该课成绩应作零分计。 UpdateENROLLSSETGRADE=0WhereCNO='C1'AND
'张春明'=(SelectSNAMEFROMSTUDENTSWhereSTUDENTS.SNO=ENROLLS.SNO)
例49从教师表中
删除年龄已到60岁的退休教师的数据。(
删除) DeleteFROMTEACHERSWhereAGE>=60
sql的数据控制
例50授予LILI有对表STUDENTS的
查询权。(表/视图特权的授予
一个sql特权允许
一个被授权者在给定的
数据库对象上进行特定的操作。授权操作的
数据库对象
包括:表/视图、列、域等。授权的操作
包括:Insert、Update、Delete、Select、REFERENCES、TRIGGER、UNDER、USAGE、EXECUTE等。其中Insert、Update、Delete、Select、REFERENCES、TRIGGER有对表做相应操作的权限,故称为表特权。) GRANTSelectONSTUDENTSTOLILIWITHGRANTOPTION
例51取消LILI的存取STUDENTS表的特权。 REVOKEALLONSTUDENTSFROMLILICASCADE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。