您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 关系数据库语言-(精)
关系数据库语言-SQL关系数据库语言-SQL结构化查询语言SQL-StructuredQueryLanguageSQL已不限于查询,还包括数据操纵、定义、控制和管理等功能。它是一个综合的、通用的、功能极强的关系数据库语言。国际标准化组织(ISO)89年公布了SQL语言的国际标准(SQL89)。我国也制定了类似的标准(SQL89)实际系统大都对SQL语言作了扩充。SQL语言的特点非过程化SQL语言是非过程化语言(第四代语言)。一体化SQL集DDL、DML、DCL为一体。用SQL语言可实现DB生命周期的全部活动。因实体、联系均用关系来表示,这种数据结构的单一性也带来了DB语言的统一性。两种使用方式,统一的语法结构。联机交互使用方式。嵌入某种高级程序设计语言。表格实例之一选课(学号,课程号,成绩)sc(sno,cno,grade)课程(课程号,课程名,学分,上课时间,名额)course(cno,cname,credit,ctime,quota)系(系号,系名,电话)dep(dno,dname,tel)学生(学号,姓名,性别,出生年月,系号)student(sno,sname,sex,birthday,dno)表格实例之二emp(eno,ename,sex,age,sal,mgr,dno)职工职工号姓名性别年龄工资领导部门号其中,mge为职工的上一级领导(即上一级领导的职工号)建立表对象CREATETABLEstudent(snoNUMBER(6),snameCHAR(6),sexCHAR(2),birthdayDATE,dnoCHAR(3));insertintostudentvalues(980001,“李力”,“男”,“17-12月-1980”,“d01”);INSERTINTOempVALUES(`e01`,`李宏`,‘男’,32,580.0,‘e100’,’d02’);INSERTINTOemp(eno,ename,dno)VALUES(‘eo1’,’王兰‘,’d01’);UPDATEempSETsal=sal*1.1WHEREdno=`d01`;DELETEFROMempWHEREdno=`d01`;DML语句(DB写语句)Select语句SELECT*FROMstudentWHEREsex='男'ANDdno='D01';查询的结果仍可看成是一个关系,它由查出的记录组成。查询语句中的投影操作SELECTsno,sname,dnoFROMstudentWHEREsex=‘男’;该语句输出如下:snosnamedno980001张自立d01970020李春生d02查询语句中的选择操作例:查询79、80两年出生的男同学的名单:SELECTsname,birthdayFROMstudentWHEREsex=‘男'ANDbirthdayBETWEEN'01-1月-79'AND'31-12月-80';查询1980年以前出生的学生:SELECT*FROMstudentWHEREbirthday'01-1月-1980';SQL语句中的运算符算术运算符:+,-,*,/逻辑运算符:与AND、或OR,非NOT比较符:=,!=,,,=,=其他运算符:IN,NOTIN判断是否是集合的成员。BETWEEN…AND…判断列值是否满足指定的区间LIKE匹配模式_%IS[NOT]NULL测试空值查询语句中的选择操作在查询条件中,可以使用集合运算符SELECTdname,telFROMdepWHEREdnameIN(`计算机系`,`外语系`,`中文系`);该表达式等同于:dname='计算机系'ORdname='外语系'ORdname='中文系'集合运算符NOTIN是IN的反义词,WHEREdnameNOTIN(`计算机系`,`外语系`,`中文系`);查询语句中的选择操作空值查询学号为980001的同学正在学习的课程:SELECTcnoFROMscWHEREsno=980001ANDgradeISNULL;模糊匹配。_表示任意一个字符%表示任意个字符(包括0个)。例如,查询姓王的同学信息;SELECT*FROMstudentWHEREsnameLIKE'王%';查询的排序输出查询学生c01课程的成绩,并按成绩由高到低的顺序输出:SELECTsno,grade(输出学号和成绩)FROMscWHEREcno='c01'andgradeISNOTNULLORDERBYgradeDESC;排序输出的隐含顺序是升序(ASC),如果要求按列值的降序输出,需在列名后指定DESC。(5)多表查询与连接操作(joins)笛卡尔积操作将结果关系扩展,如果笛卡尔积的两关系元组数分别为m和n,那么结果关系的元组数为m×n,而在处理中往往只是需要其中部分元组。连接(Join)操作是从笛卡尔积中选择满足条件的元组。最常用的条件是等值连接Select*fromstudent,depwherestudent.dno=dep.dnodnostudentdep多表查询与连接操作表之间的连接操作(通常是自然连接)体现在WHERE子句中的连接条件。例:查询计算机系的学生信息SELECTsno,sname,sexFROMstudent,depWHEREstudent.dno=dep.dnoANDdname='计算机系';查询物理课不及格的学生名单(输出学生的学号、姓名及成绩):SELECTstudent.sno,sname,gradeFROMstudent,sc,courseWHEREcname='物理'ANDgrade60ANDcourse.cno=sc.cnoANDsc.sno=student.sno:在该例中,查询的结果来自两张表,而决定查询结果的因素涉及到三张表的信息。当一个查询涉及到几个关系时,为了区别不同表中的同名属性,我们可以在属性名前冠以关系名。多表查询与连接操作聚合操作聚合是把关系作为运算对象的另一类操作,是对关系中的列值进行统计工作,最终得到一个统计值。例如求职工的平均年龄,求职工的工资总额等。常用5种聚合的操作符:SUM—对某列的值求和。AVG—求某列值的平均值。MIN—求某列值的最小值。MAX—求某列值的最大值。COUNT—统计某列值的个数(计数)。例:统计职工的工资总额:SELECTSUM(sal)FROMemp;例:求职工的最高工资、最低工资和平均工资:SELECTMAX(sal),MIN(sal),AVG(sal)FROMemp;例:求女学生的学生总数:SELECTCOUNT(*)FROMstudentWHEREsex='女';d01d02d01d03d01d0121d02181920211822sumcount聚合操作聚合操作查询有多少名同学物理课不及格:SELECTCOUNT(sno)FROMsc,courseWHEREcname='物理'ANDcourse.cno=sc.cnoANDgrade60;聚合操作求每个系的学生数而不是求学生总数。希望得到下面的输出:dnocount(*)d01120d0265……SELECTdno,count(*)FROMstudentGROUPBYdno;d01d01d01d02d02d01980001d02980003980002980004981001981003981002dnocountcount聚合操作查询每个学生已获得的学分(注:成绩及格即取得相应课程的学分):SELECTsno,sum(credit)FROMsc,courseWHEREgrade60ANDsc.cno=course.cnoGROUPBYsno;子查询查询物理系的学生名单(非子查询)SELECTsnameFROMstudent,depWHEREdname='物理系'ANDdep.dno=student.dno;子查询:SELECTsnameFROMstudentWHEREdno=(SELECTdnoFROMdepWHEREdname=‘物理系’);子查询SQL提供的对于关系的操作符,并产生一个布尔型的结果。例如:EXISTSR是一个条件,当且仅当关系R不空时为真。集合运算符IN,NOTIN子查询例:查体育课不及格的男生名单:SELECTsnameFROMstudentWHEREsex=`男`ANDsnoIN(SELECTsnoFROMscWHEREgrade60ANDcnoIN(SELECTcnoFROMcourseWHEREcname=‘体育’));查找年龄在50岁以上、工资小于本部门平均工资的职工,输出他们的姓名、年龄、工资:SELECTename,age,salFROMempWHEREage50andsal(SELECTavg(sal)FROMempWHEREdno=);e1?dnoe1.dnoemp.dno子查询SQL*Plus登录界面javao8i1student151SQL*Plus窗口(交互界面)SQL*Plus命令SQLselect*fromcat;SQLdescstudentSQLselect*fromstudent;SQL*Plus命令SQLeditaSQL@a
本文标题:关系数据库语言-(精)
链接地址:https://www.777doc.com/doc-3868304 .html