数据库课件:第3章 结构化查询语言_第1页
数据库课件:第3章 结构化查询语言_第2页
数据库课件:第3章 结构化查询语言_第3页
数据库课件:第3章 结构化查询语言_第4页
数据库课件:第3章 结构化查询语言_第5页
已阅读5页,还剩182页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

结构化语言查询EverythingindatabaseEveryworkoverSQL在SQL的世界,一切信手拈来同一片蓝天同一种语言SQL:StructuredQueryLanguage结构化查询语言;是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;1974年,由Boyce和Chamber提出;1975-1979年,在SystemR上实现,由IBM的SanJose研究室研制,称为SEQUEL语言;后来在SEQUEL的基础上发展了SQL语言。SQL历史SQL-86:数据库语言SQLSQL-89:增加了对完整性约束的支持SQL-92:增加了许多新特性,如新的数据类型,更丰富的数据操作,更强的完整性、安全性支持等。SQL-99:增加对面向对象模型的支持SQL-2003:支持XML,支持Window函数、Merge语句等SQL-2006:增强XML对数据处理的能力SQL-2008:继续增强对XML的支持SQL标准化SQL用户BaseTableB1ViewV1ViewV2BaseTableB2BaseTableB3BaseTableB4StoredFileS1StoredFileS1StoredFileS1StoredFileS1外模式模式内模式SQL对三级模式的支持综合统一(一体化)集DDL,DML,DCL于一体单一的结构----关系,带来了数据操作符的统一面向集合的操作方式一次一集合高度非过程化用户只需提出“做什么”,无须告诉“怎么做”,不必了解存取路径两种使用方式,统一的语法结构SQL既是自含式语言(用户使用),又是嵌入式语言(程序员使用)语言简洁,易学易用SQL特点GRANTREVOKEDatacontrollanguage(DCL)CREATEALTERDatadefinitionlanguage(DDL)DROPINSERTUPDATEDatamanipulationlanguage(DML)DELETESELECTDataretrieval(DQL)SQL分类数据操作语言DML2数据查询语言DQL3数据控制语言DCL4课堂练习51数据定义语言DDL不同的数据库,数据库对象有所差别数据库对象索引是根据指定的数据库表列建立起来的顺序。视图:是由查询数据库表产生的虚拟表。图表:数据库表之间的关系示意图。缺省值:对没有指定其具体值的列或列数据项赋予事先设定好的值。规则:是对数据库表中数据信息的限制。它限定的是表的列。触发器:由事件来触发的相关操作SQL。存储过程:完成特定功能而汇集在一起的一组SQL程序语句。用户:有权限访问数据库的人。序列:通过提供唯一数值的顺序表用于简化程序设计工作。EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO-------------------------------------------------------------------------7839KINGPRESIDENT17-NOV-815000107698BLAKEMANAGER783901-MAY-812850307782CLARKMANAGER783909-JUN-811500107566JONESMANAGER783902-APR-812975207654MARTINSALESMAN769828-SEP-8112501400307499ALLENSALESMAN769820-FEB-811600300307844TURNERSALESMAN769808-SEP-8115000307876ADAMSCLERK778812-JAN-831100207934MILLERCLERK778223-JAN-82130010EMP(职员表)DEPT(部门表)DEPTNODNAMELOC--------------------------------- 10ACCOUNTINGNEWYORK20RESEARCHDALLAS30SALESCHICAGO40OPERATIONSBOSTON

GRADELOSALHISAL---------------------------17001200212011400314012000420013000530019999SALGRADE(薪水等级表)课程中使用的表课程中使用的表SnoSNameSSexSBirthdateSchoolID----------------------------------------200333103213蔡立雄男1986-07-09350200333103222陈宇锋男1986-02-06400200333103231崔继明男1985-11-04400200333103240邓忻女1984-11-21400200333103277郭冠鸿男1986-05-22400200333103286何英炜男1987-03-15400200433103019张彬彬男1986-02-25480200433103028张超男1986-06-15480200433103046张佳祺女1987-05-27480……Student(学生信息)SchoolIDSchoolNameaddr----------------------------300机械工程学院机械大楼350建筑学院建筑大楼432新闻与传播学院B8栋433政治与公共管理学院5号楼400艺术学院B1栋440外国语学院22号楼450电子商务学院B2栋470自动化学院3号楼480计算机学院B3栋……School(学院代码)SnoCnoScore-------------------------2003331032404800514472200333103240480052548620033310327748000543892003331032864800054395200433103019480004438620043310301948000543782004331030284800044388200433103028480005436920043310304648000543662004331030554800054352SC(选课成绩表)Course(课程信息表)Cno

Cname

CpnoCCredit--------

------------------

----------------48000443C++程序设计语言NULL

248000543数据库系统概论

48000443448003010计算机应用基础

NULL

248005034汇编语言与程序设计NULL448005144数据结构

48003010448005254计算机组成原理

48005345348005345操作系统

48003010348005946软件工程

480005434

字符型char(n)补齐空格varchar(n)不补空格数值型Integer-2EXP(31)到2EXP(31)的正负整数Smallint-2EXP(15)到2EXP(15)的正负整数decimal(p,q)/numeric(p,q)real、double、float(n)日期/时间型Datetime1753.1.1-9999.12.31Smalldatetime1900.1.1-2079.12.31Timestamp货币类型money/smallmoneySQL-92常用数据类CREATEDATABASEdatabase_name

[ON

[<filespec>]

[,<filegroup>]]

[LOGON{<filespec>}]

<filespec>::=[PRIMARY]

([NAME=logical_file_name,]

FILENAME='os_file_name'

[,SIZE=size]

[,MAXSIZE={max_size|UNLIMITED}]

[,FILEGROWTH=growth_increment])[,...n]<filegroup>::=FILEGROUPfilegroup_name<filespec>[,...n]1)创建数据库/数据库表空间CREATEDATABASEEmployeeON(NAME=Employee_dat,FILENAME='c:\programfiles\microsoftsqlserver\mssql\data\Employeedat.mdf',SIZE=10,MAXSIZE=50,FILEGROWTH=5)LOGON(NAME='Employee_log',FILENAME='c:\programfiles\microsoftsqlserver\mssql\data\Employeelog.ldf',SIZE=5MB,MAXSIZE=25MB,FILEGROWTH=5MB)A.指定数据和日志文件CREATEDATABASEArchiveONPRIMARY(NAME=Arch1,FILENAME='c:\archdat1.mdf',SIZE=100MB,MAXSIZE=200,FILEGROWTH=20),(NAME=Arch2,FILENAME='c:\archdat2.ndf',SIZE=100MB,MAXSIZE=200,FILEGROWTH=20)LOGON(NAME=Archlog1,FILENAME=‘'c:\archlog1.ldf',SIZE=100MB,MAXSIZE=200,FILEGROWTH=20),(NAME=Archlog2,FILENAME='c:\archlog2.ldf',SIZE=100MB,MAXSIZE=200,FILEGROWTH=20)B.指定多个数据和日志文件CREATEDATABASETeach注意观察:数据库存放的位置及各种参数的取值C.创建一个简单数据库必须具备:CREATETABLE的权限表存储空间需要:表名、列名,数据类型,列大小2)创建表(CREATETABLE)CREATETABLEtable-name (column

datatype[DEFAULTexpr];CREATETABLE表名(

列名数据类型[缺省值][NOTNULL]

[,列名数据类型[缺省值][NOTNULL]]….

[,UNIQUE(列名[,列名]….)]

[,PRIMARYKEY(列名[,列名]…)]

[,FOREIGNKEY(列名[,列名]…)REFERENCES表名(列名[,列名]…)]

[,CHECK(条件)])创建表的语法结构DEFAULT(缺省值):指定列的缺省值;NOTNULL:列值不能为空值;UNIQUE:取值唯一的列名;PRIMARYKEY:主关键字(主码)列名;FOREIGNKEY:外部码列名;REFERENCES:引用的外部码的表名和列名CHECK:指定表级约束条件。参数说明

--学院代码表CREATETABLESchool(SchoolIDchar(3)primarykey,--学院IDSchoolNamevarchar(50)notnull)--学院名称--学生信息表CREATETABLEStudent(Snochar(12)Primarykey,--学号SNameVarChar(30)notnull,--姓名SSexchar(2)CONSTRAINTck_SexCHECK(SSexin('男','女')),--性别SBirthdatesmalldatetime,--出生日期SchoolIDchar(3))--所属学院例子--课程信息表CREATETABLECourse(Cnochar(8)primarykey,--课程编号Cnamevarchar(40)notnull,--课程名称Cpnochar(8),--先修课程CCreditintnotnull)--学分

--学生选课表CREATETABLESC(SnoCHAR(12),--学号CnoCHAR(8),--课程号Scoreintdefault0,--成绩Primarykey(Sno,Cno),CONSTRAINTFK_SnoFOREIGNKEY(Sno)REFERENCESStudent(Sno),CONSTRAINTFK_CnoFOREIGNKEY(Cno)REFERENCESCourse(Cno))例子--创建部门信息表CREATETABLEDEPT(DEPTNOchar(2)notnull,DNAMEvarchar(20)notnull,LOCvarchar(30)notnull,constraintPK_DEPTprimarykey(DEPTNO))--创建职员信息表CREATETABLEEMP(EMPNOchar(4)notnull,ENAMEvarchar(20)notnull,JOBvarchar(18)notnull,MGRchar(4)null,HIREDATEsmalldatetimenotnull,SALfloatnull,COMMfloatnull,DEPTNOchar(2)notnull,constraintPK_EMPprimarykey(EMPNO),constraintFK_EMP_DEPTforeignkey(DEPTNO)referencesDEPT(DEPTNO))例子--薪水等级表CREATETABLESALGRADE(GRADEvarchar(2)notnull,LOSALfloatnotnull,HISALfloatnotnull,constraintPK_SALGRADEprimarykey(GRADE))例子Sp_helptable-name表创建后的相关信息ThefollowingconstrainttypesarevalidinSQLServer/Oracle:NOTNULLUNIQUEKeyPRIMARYKEYFOREIGNKEYCHECKCreateaconstraint:AtthesametimeasthetableiscreatedAfterthetablehasbeencreatedDefineaconstraintatthecolumnortablelevel.约束(constraint)列级约束定义

表级约束定义定义约束column[CONSTRAINTconstraint_name]constraint_type,column,...

[CONSTRAINTconstraint_name]constraint_type(column,...),保证空值不进入定义的列NOTNULL约束

EMP(职员信息表)EMPNO ENAME JOB ...COMMDEPTNO7839 KING PRESIDENT 107698 BLAKE MANAGER 307782 CLARK MANAGER 107566 JONES MANAGER 20NOTNULL约束(在此列没有空值)允许空值存在NOTNULL约束定义在列级NOTNULL约束CREATETABLEemp( empno NUMBER(4), ename VARCHAR2(10)NOTNULL, job VARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(7,2)NOTNULL);UNIQUEKEY约束

DEPTDEPTNODNAME LOC---------------- --------10 ACCOUNTING NEWYORK20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTONUNIQUEkeyconstraint

50 SALES DETROIT60 MARKETING BOSTONInsertintoNotallowed

(SALESalreadyexists)Allowed既可定义在列级也可以定义在表级UNIQUEKEY约束CREATETABLEdept( deptno NUMERIC(2), dname VARCHAR(14), loc VARCHAR(13), CONSTRAINTdept_dname_ukUNIQUE(dname))PRIMARYKEY约束

DEPTDEPTNODNAME LOC------------ --------10 ACCOUNTING NEWYORK20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTONPRIMARYKEYInsertinto

20 MARKETING DALLAS FINANCE NEWYORKNotallowed(DEPTNO-20alreadyexists)Notallowed(DEPTNOisnull)既可定义在表级也可定义在列级PRIMARYKEY约束CREATETABLEdept( deptno char(2), dname VARCHAR(14), loc VARCHAR(13), CONSTRAINTdept_dname_ukUNIQUE(dname), CONSTRAINTdept_deptno_pkPRIMARYKEY(deptno))FOREIGNKEY约束

DEPTDEPTNODNAME LOC---------------- --------10 ACCOUNTING NEWYORK20 RESEARCH DALLASPRIMARY

KEY

EMPEMPNO ENAME JOB ...COMMDEPTNO7839 KING PRESIDENT 107698 BLAKE MANAGER 30...FOREIGN

KEY

7571 FORD MANAGER ...200 97571 FORD MANAGER ...200InsertintoNotallowed

(DEPTNO-9不在DEPT表中Allowed

既可在列级定义也可以在表级定义FOREIGNKEY约束CREATETABLEemp( empno char(4), ename VARCHAR(10)NOTNULL, job VARCHAR(9), mgr NUMERIC(4), hiredate DATETIME, sal NUMERIC(7,2), comm NUMERIC

(7,2),--佣金

deptno NUMERIC(7,2)NOTNULL, CONSTRAINTemp_deptno_fkFOREIGNKEY(deptno) REFERENCESdept(deptno))定义一个行必须满足的条件CHECK约束...,deptno NUMERIC(2),CONSTRAINTemp_deptno_ckCHECK(DEPTNOBETWEEN10AND99),...用子查询创建表CREATETABLEtable [column(,column...)]ASsubquery;CreatetableCsStudentasselect*fromstudentwhereschool='480';select*intonewtablefromexisttablewherecondition例:建立计算机系学生情况基本表select*intoCsStudentfromstudentwhereschoolID='480'SQLServer:Oracle:用ALTERTABLE:增加一个新列、约束修改一个存在的列删除列3)修改表定义ALTERTABLEALTERTABLEtable_nameADD (columndatatype[DEFAULTexpr] [,columndatatype]...)ALTERTABLEtable_nameMODIFY/Alter(columndatatype[DEFAULTexpr] [,columndatatype]...)ALTERTABLEtable_nameDROP (column...)Student增加新列增加一个名族列进入学生信息表新列SnoSNameSSexSBirthdateSchoolID----------------------------------------200333103213蔡立雄男1986-07-09350200333103222陈宇锋男1986-02-06400200333103231崔继明男1985-11-04400200333103240邓忻女1984-11-21400200333103277郭冠鸿男1986-05-22400…

NationSnoSNameSSexSBirthdateSchoolID200333103213蔡立雄男1986-07-09350200333103222陈宇锋男1986-02-06400200333103231崔继明男1985-11-04400200333103240邓忻女1984-11-21400200333103277郭冠鸿男1986-05-22400

Nation用ADD语句增加列定义增加列SnoSNameSSexSBirthdateSchoolIDNation-------------------------------------------------200433103019张彬彬男1986-02-25480200433103028张超男1986-06-15480200433103046张佳祺女1987-05-27480200433103055张今宁男1986-04-02480200433103213张志兵男1985-06-01480200433103222赵昭男1986-06-15480200433103231郑棣桦女1984-04-25480200433103240郑妍女1987-05-29480ALTERTABLEstudentADDnationVARCHAR(9)Tablealtered.新增加的列变成最后的列,不论基本表中原来是否已有数据,新增加的列一律为空值。你能修改表一个列的数据类型,大小、默认值对默认值的变更只影响后续插入表的数据修改列ALTERTABLE studentAltercoulumn SnameVARCHAR(50)为列增加约束条件,但受到表中已有数据的限制增加约束条件altertablestudentaddunique(sname)INSERTINTOstudentVALUES('200633103028','张超','男','1987-06-15',480)CREATEUNIQUEINDEX终止,唯一索引冲突。删除学生姓名必须取唯一值的约束。ALTERTABLEStudentDROPUNIQUE(Sname)删除属性列:直接/间接删除先把表中要保留的列及其内容复制到一个新表中,再删除原表,再将新表重命名为原表名直接删除属性列:ALTERTABLEStudentDROPcoloumnnation删除列定义及约束所有的数据及结构均被删除任何未决的事务被提交所有索引被删除你不能rollback这个操作4)删除表(droptable)DROPTABLEstudent???建立索引是加快查询速度的有效手段建立索引DBA或表的属主(即建立表的人)根据需要建立有些DBMS自动建立以下列上的索引PRIMARYKEYUNIQUE维护索引

DBMS自动完成

使用索引

DBMS自动选择是否使用索引以及使用哪些索引5)建立索引CREATEINDEX

create[unique][clustered]index<索引名>on<表名>(<列名>[<次序>][,<列名>[<次序>]]…)CREATEINDEX emp_ename_idxON emp(ename)在职工信息表中基于姓名建立索引建立索引(CREATEINDEX)unique(distinct):唯一性索引,不允许表中不同的行在索引列上取相同值。若已有相同值存在,则系统给出相关信息,不建此索引。系统并拒绝违背唯一性的插入、更新clustered:聚簇索引,表中元组按索引项的值排序并物理地聚簇在一起。一个基本表上只能建一个聚簇索引。适用范围:很少对基表进行增删操作很少对其中的变长列进行修改操作asc/desc:索引表中索引值的排序次序,缺省为asc几种常见的索引类型可以动态地定义索引,即可以随时建立和删除索引;不允许用户在数据操作中引用索引。索引如何使用完全由系统决定,这支持了数据的物理独立性;一个表上可建多个索引。索引可以提高查询效率,但索引过多耗费空间,且降低了插入、删除、更新的效率;建立索引的两个主要目的:加快查询速度、保证行的唯一性。索引的说明下列情况,需要建立索引在WHERE或连接条件中频繁使用的列列取值范围较大时列包含大量的非空值查询少于2-4%行的大表下列条件不要创建索引:小表列并不频繁用在查询条件中查询超过2–4%的行表频繁被更新(如操作日志表、事件表)索引的注意事项从数据字典中删除索引定义6)删除索引DROPINDEXDROPINDEXindex-name数据操作语言DML2数据查询语言DQL3数据控制语言DCL4课堂练习51数据定义语言DDL

DEPTDEPTNODNAME LOC10 ACCOUNTING NEWYORK20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTON

新的一行记录50 DEVELOPMENT DETROIT

DEPTDEPTNODNAME LOC10 ACCOUNTING NEWYORK20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTON“…insertanewrowintoDEPTtable…”

50 DEVELOPMENT DETROIT1)插入数据INSERT向表中增加一行数据采用INSERT语句

采用这种Insert语句一次只能插入一行记录INSERTINTO table[(column[,column...])]VALUES (value[,value...]);INSERT语法Insertanewrowcontainingvaluesforeachcolumn.Listvaluesinthedefaultorderofthecolumnsinthetable.OptionallylistthecolumnsintheINSERTclause.Enclosecharacteranddatevalueswithinsinglequotationmarks.插入一行记录INSERTINTO dept(deptno,dname,loc)VALUES ('50','DEVELOPMENT','DETROIT')1rowcreated.Implicitmethod:Omitthecolumnfromthecolumnlist.INSERTINTO dept(deptno,dname)VALUES ('60','MIS')1rowcreated.Explicitmethod:SpecifytheNULLkeyword.INSERTINTO deptVALUES ('70','FINANCE',NULL)1rowcreated.插入带空值的行INSERTINTO emp(empno,ename,job, mgr,hiredate,sal,comm, deptno)VALUES (7196,'GREEN','SALESMAN', 7782,GETDATE(),2000,NULL, 10)1rowcreated.GetDate函数记录当前的日期和时间插入函数值EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO-----------------------------------------------2296AROMANOSALESMAN77822005-03-31130010INSERTINTOempVALUES(2296,'AROMANO','SALESMAN',7782, convert(smalldatetime,'03-31-2005',110), 1300,NULL,10)1rowcreated.增加一个新的职员插入特定的日期值验证你的增加没有指定列,Values的值必须与数据库表结构的定义一致(包括顺序、类型、字段数),除identity字段。INTO子句中没有出现的属性列,新记录在这些列上将取空值(NULL)或默认值。如果在表定义时说明了NOTNULL的属性列不能取空值则操作失败。注意事项INSERTINTO<表名>[(<属性列1>[,<属性列2>…)]子查询CREATETABLECS_student(SnoCHAR(12)primarykey,snamevarchar(50)notnull)--插入计算机学院的学生到cs_student表中insertintoCS_studentselectsno,snamefromStudentwhereschoolID='480'插入子查询数据DBMS在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则:实体完整性参照完整性用户定义的完整性如:对于有NOTNULL约束的属性列是否提供了非空值对于有UNIQUE约束的属性列是否提供了非重复值对于有值域约束的属性列所提供的属性值是否在值域范围内插入修改数据的约束性检查

在表中变更数据EMP更新一行数据EMPEMPNO ENAME JOB ...DEPTNO7839 KING PRESIDENT 107698 BLAKE MANAGER 307782 CLARK MANAGER 107566 JONES MANAGER 20...20EMPNO ENAME JOB ...DEPTNO7839 KING PRESIDENT 107698 BLAKE MANAGER 307782 CLARK MANAGER 107566 JONES MANAGER 20...修改存在的行用UPDATE语句UPDATE可以对多行进行修改UPDATE语句UPDATE tableSET column=value[,column=value][WHERE condition]SpecficroworrowsaremodifiedwhenyouspecifytheWHEREclause.AllrowsinthetablearemodifiedifyouomittheWHEREclause.更新行UPDATE empSET deptno=20WHERE empno=77821rowupdated.UPDATE employeeSET deptno=2014rowsupdated.Updateemployee7698’sjobanddepartmenttomatchthatofemployee7499.采用子查询进行更新UPDATEempSET(job,deptno)= (SELECTjob,deptnoFROMempWHEREempno=7499)WHEREempno=76981rowupdated.Oracle支持UsesubqueriesinUPDATEstatementstoupdaterowsinatablebasedonvaluesfromanothertable.基于别的表进行更新 UPDATE emp SET deptno=(SELECT deptno FROM emp WHERE empno=7788) WHERE job=(SELECT job FROM emp WHERE empno=7788)2rowsupdated.

从DEPT表中删除一行从表中删除数据DEPTDEPTNODNAME LOC10 ACCOUNTING NEWYORK20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTON50 DEVELOPMENT

DETROIT60 MIS ...

DEPTDEPTNODNAME LOC10 ACCOUNTING NEWYORK20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTON60 MIS ...YoucanremoveexistingrowsfromatablebyusingtheDELETEstatement.DELETE语句DELETE[FROM] table[WHERE condition]SpecificroworrowsaredeletedwhenyouspecifytheWHEREclause.

AllrowsinthetablearedeletedifyouomittheWHEREclause.从表中删除数据DELETEFROM deptWHERE dname='DEVELOPMENT'1rowdeleted.DELETEFROM dept4rowsdeleted.UsesubqueriesinDELETEstatementstoremoverowsfromatablebasedonvaluesfromanothertable.基于另一个表删除行DELETEFROM empWHERE deptno= (SELECTdeptno FROMdept WHEREdname='SALES')6rowsdeleted.Youcannotdeletearowthatcontainsaprimarykeythatisusedasaforeignkeyinanothertable.删除行违背约束DELETEFROM deptWHERE deptno=‘10’DELETEFROMdeptDELETE语句与COLUMNREFERENCE约束'FK_EMP_DEPT'冲突课堂练习SnoSNameSSexSbirthdateSchoolID----------------------------------------200333103213蔡立雄男1986-07-09350200333103222陈宇锋男1986-02-06400200333103231崔继明男1985-11-04400200333103240邓忻女1984-11-21400200333103277郭冠鸿男1986-05-22400200333103286何英炜男1987-03-15400200433103019张彬彬男1986-02-25480200433103028张超男1986-06-15480200433103046张佳祺女1987-05-27480……Student(学生信息)SchoolIDSchoolNameaddr----------------------------300机械工程学院机械大楼350建筑学院建筑大楼432新闻与传播学院B8栋433政治与公共管理学院5号楼400艺术学院B1栋440外国语学院22号楼450电子商务学院B2栋470自动化学院3号楼480计算机学院B3栋……School(学院代码)SnoCnoScore-------------------------2003331032404800514472200333103240480052548620033310327748000543892003331032864800054395200433103019480004438620043310301948000543782004331030284800044388200433103028480005436920043310304648000543662004331030554800054352SC(选课成绩表)Course(课程信息表)Cno

Cname

CpnoCCredit--------

------------------

----------------48000443C++程序设计语言NULL

248000543数据库系统概论

48000443448003010计算机应用基础

NULL

248005034汇编语言与程序设计NULL448005144数据结构

48003010448005254计算机组成原理

48005345348005345操作系统

48003010348005946软件工程

480005434

1、学生张超转到了建筑学院学习2、把“数据库系统概论”课程的学生成绩均加2分3、删除“张佳琪”学生信息4、插入一门“组成原理”课程信息5、在学生信息中加入“民族”属性课堂练习数据操作语言DML2数据查询语言DQL3数据控制语言DCL4过程语言51数据定义语言DDLSELECT语句选择投影Table1Table2Table1Table1连接SELECT标识哪些列输出FROM标识从哪个表获取数据SELECT语法SELECT [DISTINCT]{*,column[alias],...}FROM table

选择所有列(*)DEPTNODNAMELOC------------------------------------10ACCOUNTINGNEWYORK20RESEARCHDALLAS30SALESCHICAGO40OPERATIONSBOSTONSELECT*FROM deptDEPTNOLOC----------------------10NEWYORK20DALLAS30CHICAGO40BOSTON

选择特定的列SELECTdeptno,locFROMdept基于数值、日期等表达式计算需采用下面的数学运算符。数学运算符操作符+-*/ 描述加减乘除

用数学运算符

SELECTename,sal,sal+300FROM empENAMESAL----------------------------KING50005300BLAKE28503150CLARK24502750JONES29753275MARTIN12501550ALLEN16001900...14rowsselected.

用圆括弧来提升优先级SELECTename,sal,12*(sal+100)FROMempENAMESAL------------------------------KING500061200BLAKE285035400CLARK245030600JONES297536900MARTIN125016200...14rowsselected.ENAMEJOBCOMM----------------------------KINGPRESIDENTNullBLAKEMANAGERNull...TURNERSALESMAN0...14rowsselected.

Anullisavaluethatisunavailable,unassigned,unknown,orinapplicable.Anullisnotthesameaszeroorablankspace.NULL值SELECT ename,job,commFROM emp

包含空值的数学表达式结果仍为空值。NULL值在数学表达式中

selectenameNAME,12*sal+commfromempWHEREename='KING'NAME---------------------KING重命名一列的列名常用于查询计算结果列的输出在列名和别名之间可采用AS关键字进行标识如果别名中包含空格、特殊字符、大小写敏感字符则需要用单引号(’’)对别名标注定义列的别名(alias)

用列的别名输出实例

SELECTenameASname,salsalaryFROMempNAMESALARY----------------------

...SELECTename'Name',sal*12'AnnualSalary'FROMemp

NameAnnualSalary--------------------------

...连接列或字符串采用连接符号“+”能创建一个列为组合字符串表达式选择输出中用连接符号(+)Employees-------------------KINGPRESIDENTBLAKEMANAGERCLARKMANAGERJONESMANAGERMARTINSALESMANALLENSALESMAN...14rowsselected.用连接符号举例SELECT ename+jobAS'Employees'FROM emp例子EmployeeDetails-------------------------KINGisaPRESIDENTBLAKEisaMANAGERCLARKisaMANAGERJONESisaMANAGERMARTINisaSALESMAN...14rowsselected.SELECTename +''+'isa'+''+job AS'EmployeeDetails'FROMemp

默认显示查询中的所有行,包括重复行。查询结果包含重复行SELECTdeptnoFROMempDEPTNO---------10301020...14rowsselected.

消除重复行在SELECT语句中用DISTINCT消除重复行SELECTDISTINCTdeptnoFROMempDEPTNO---------102030

用选择限制行的输出获取所有在10部门工作的员工

EMPEMPNO ENAME JOB ...DEPTNO7839 KING PRESIDENT 107698 BLAKE MANAGER 307782 CLARK MANAGER 107566 JONES MANAGER 20...

EMPEMPNO ENAME JOB ...DEPTNO7839 KING PRESIDENT 107782 CLARK MANAGER 107934 MILLER CLERK 10用WHERE语句获取满足条件的行记录WHERE语句放在FROM之后SELECT中的WHERE语法SELECT [DISTINCT]{*,column[alias],...}FROM table[WHERE condition(s)]ENAMEJOBDEPTNO----------------------------JAMESCLERK30SMITHCLERK20ADAMSCLERK20MILLERCLERK10用WHERE语句SELECTename,job,deptnoFROMempWHEREjob='CLERK'字符串和日期采用单引号分隔字符串是否大小写敏感视不同的数据库而定。日期格式根据数据库默认的日期格式而定。SQLSERVER默认格式为:YYYY-MON-DAYHOUR:MINUTE:SECONDORACLE默认格式为:'DD-MON-YY'条件判断中的字符串和日期处理SELECT ename,job,deptnoFROM empWHERE ename='JAMES'条件判断中使用比较运算符运算符=>>= <<= <>描述等于大于大于等于小于小于等于不等于用比较运算符进行条件判断SELECTename,sal,commFROMempWHEREsal<=commENAMESALCOMM----------------------------MARTIN12501400其他比较运算符OperatorBETWEEN...AND...IN(list)LIKEISNULLMeaningBetweentwovalues(inclusive)MatchanyofalistofvaluesMatchacharacterpatternIsanullvalue获取一个范围的结果用运算符BETWEEN…AND用BETWEEN运算符ENAMESAL-------------------MARTIN1250TURNER1500WARD1250ADAMS1100MILLER1300SELECT ename,salFROM empWHERE salBETWEEN1000AND1500Lower

limitHigher

limit用IN判断在枚举数据中的存在性用IN操作符SELECT empno,ename,sal,mgrFROM empWHERE mgrIN(7902,7566,7788)EMPNOENAMESALMGR-------------------------------------7902FORD300075667369SMITH80079027788SCOTT300075667876ADAMS11007788用LIKE操作符用LIKE操作符从一个字符串中进行匹配查询%代表0到多个字符匹配_代表单个字符匹配SELECT enameFROM empWHERE enameLIKE'S%'Youcancombinepatternmatchin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论