SQL语言基础本章学习目标SQL语言是数据库的标准语言。只有理解了SQL才能真正理解关系数据库。本章将介绍怎样使用“结构化查询语言”(SQL)来操作数据库。第二章SQL语言基础本章内容安排2.1SQL简介2.2SQL基本语法2.3数据查询语言(DQL)2.4数据操纵语言(DML)2.5数据定义语言(DDL)2.6数据控制语言(DCL)2.7常用函数2.1.2SQL的优点2.1.3操作界面2.1.1发展历史3.1SQL简介SQL语言是数据库的核心语言。全称是“结构化查询语言(StructuredQueryLanguage)”,最早的是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEMR开发的一种查询语言,它的前身是SQUARE语言。1.非过程化语言SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动导航。SQL允许用户在高层的数据结构上工作,而不对单个记录进行操作,可操作记录集。所有SQL语句接受集合作为输入,返回集合作为输出。SQL的集合特性允许一条SQL语句的结果作为另一条SQL语句的输入。SQL不要求用户指定对数据的存放方法。这种特性使用户更易集中精力于要得到的结果。2.1.2SQL的优点2.1.2SQL的优点2.统一的语言SQL可用于所有用户的DB活动模型,包括系统管理员、数据库管理员、应用程序员、决策支持系统人员及许多其它类型的终端用户。SQL为许多任务提供了语句,包括:•查询数据•在表中插入、修改和删除记录•建立、修改和删除数据对象•控制对数据和数据对象的存取•保证数据库一致性和完整性2.1.2SQL的优点3.是所有关系数据库的公共语言由于所有主要的关系数据库管理系统都支持SQL语言,用户可将使用SQL的技能从一个RDBMS转到另一个,所有用SQL编写的程序都是可以移植的。1.SQL*PLUS界面:(1)登录输入SQLPLUS,再回车;接着输入正确的Oracle用户名并回车;输入用户口令并回车,会显示提示符:SQL。(2)退出输入EXIT即可。2.语句的编辑与运行语句的编辑与运行可以在语句提示符后输入SQL语句并运行。执行单条语句,以分号结束输入;执行程序块以斜杠结束输入,或者以空行结束输入。也可以利用SQL缓冲区进行PL/SQL块的编辑和运行,或利用语句文件进行PL/SQL块的编辑和运行。2.1.3操作界面2.2.2SQL语言的语法结构2.2.1SQL语言的主要功能3.2SQL基本语法通过SQL语句,程序员或数据库管理员(DBA)可以做如下的主要工作:(1)建立数据库的表格,包括设置表格所可以使用之空间。(2)改变数据库系统环境设置。(3)针对某个数据库或表格,授予用户存取权限。(4)对数据库表格建立索引值。(5)修改数据库表格结构(新建、删除或是修改表格字段)。(6)对数据库进行数据的新建。(7)对数据库进行数据的删除。(8)对数据库进行数据的修改。(9)对数据库进行数据的查询。2.2.2SQL语言的语法结构SQL语句是针对关系型数据库所建立出来的语法叙述,所以SQL在这类数据库中所发挥的功能非常的强,SQL的语句不多,而且其语法也相对较简单。归纳起来,共有六大类:1.第一类——属性词(Predicates)2.第二类——声明(Declaration)3.第三类——条件子句(Clause)4.第四类——运算符(Operator)5.第五类——函数(Function)6.第六类——SQL语句(Statement)2.3.2复合查询2.3.1基本查询2.3数据查询语言(DQL)2.3.3集合函数1.DQL的基本结构2.SELECT语句的格式SELECT[distinct字段列表][table.字段名][字段名as别名][*][集合函数(字段名)]FROM表名1[,...][WHERE...][GROUPBY...][HAVING...][ORDERBY...]2.3.1基本查询3.SELECT中的条件语句(1)FROM条件子句SELECTfieldlist(可以使用算术运算符(+-*/))FROMtableexpression(2)WHERE条件子句SELECTfieldlistFROMtableexpressionWHEREcriteria(后副:where子句中的运算符)(3)“*”,DISTINCT属性词用法SELECT[*|DISTINCT]FROMtable(4)ORDERBY条件子句SELECTfieldlistFROMtableWHEREselectcriteriaORDERBYfield[ASC|DESC][,field2[ASC|DESC][,...]](5)GROUPBY条件子句SELECTfieldlistFROMtableWHEREcriteriaGROUPBYgroupfieldlist(6)HAVING条件子句SELECTfieldlistFROMtableWHEREselectcriteriaGROUPBYgroupfieldlistHAVINGgroupcriteriawhere子句中的运算符:(1)比较运算符:===(2)范围运算符:[NOT]Between…….and(3)列表运算符:[NOT]IN(expressionlistvalue)(4)模式匹配运算符like_,%(5)NULL运算符:isnotnull(6)逻辑运算符:andornot(not要与其他两个共同使用)例如:WHERE(type='business'ORtype='psychology')ANDNOTadvance55004.注意事项(1)字段名之间可以进行算术运算,例如:(字段名1*字段名2)/3(2)查询语句可以嵌套,例如:SELECT……FROM表名1WHERE字段1in(SELECT……FROM表名1,表名2,……WHERE条件1WHERE条件2);(3)查询结果集的排序操作,默认的排序是升序ASC,降序是DESC。1.连接查询连接可以在SELECT语句的FROM子句或WHERE子句中建立,在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。这样就可以将多个表中的数据进行有条件的查询:select*fromtablename1,tablename2,…whereexpre2.3.2复合查询2.联合查询UNION运算符可以将两个或两个以上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:select_statementUNION[ALL]selectstatement[UNION[ALL]selectstatement][…n]3,外联接查询:左外连接查询:leftjoin右外连接查询:rightjoin全外连接查询:fulljoin条件的指定用on4,内连接查询:第一种:在from后直接添加表名,中间用逗号隔开;第二种:使用“join”连接,条件的指定用“on”5,自连接:就是将同一个表其不同的别名,使他在逻辑上成为两张表1.统计字段值的数目函数COUNT()用来统计一个表中有多少条记录。Count(distinct/*字段名称)注意:函数COUNT()没有指定任何字段。这个语句计算表中所有记录所数目,包括有空值的记录。因此,不需要指定要被计算的特定字段。2.计算字段的平均值函数AVG()可以返回一个字段中所有值的平均值。注意:函数AVG()只能对数值型字段使用。这个函数在计算平均值时也忽略空值。2.3.3集合函数3.计算字段值的和计算字段值的和使用函数SUM()。注意:函数SUM()的返回值代表字段purchase_amount中所有值的总和。4.返回最大值或最小值函数MAX()和函数MIN()分别用于返回最大值和最小值。注意:函数MIN()返回一个字段的所有值中的最小值。如果字段是空的,函数MIN()返回空值。2.4.2DELETE语句2.4.1INSERT语句2.4数据操纵语言(DML)2.4.3UPDATE语句1.INSERT语句格式INSERT语句用于往数据表里插入记录。(1)插入单条记录的语句格式为:INSERTINTOtablename(target.field1,target.field2,...)VALUES(value1,value2,...)、(2)同时插入多条记录的语句格式为:INSERTINTOtablename(target.field1,target.field2,……)SELECT(source.field1,source.field2,……)FROMtableexpression2.4.1INSERT语句2.注意事项(1)字符串类型的字段值必须用单引号括起来,例如:’GOODDAY’。(2)如果字段值里包含单引号需要进行字符串转换,把它替换成两个单引号‘‘。(3)字符串类型的字段值超过定义的长度会出错,最好在插入前进行长度校验。(4)日期字段的字段值可以用当前数据库的系统时间SYSDATE,精确到秒。(5)INSERT时如果要用到从1开始自动增长的序列号,应该先建立一个序列号。(6)在添加数据时可以使用转换函数添加指定的数据类型。有to_char()to_date()to_number()1.DELETE语句格式DELETE语句删除数据表里的记录。用DELETE语句删除的记录,无法再复原,所以条件设置一定要正确。DELETE语句格式为:DELETE[tablename]FROMtableexpressionWHEREcriteria2.4.2DELETE语句2.注意事项(1)删除记录并不能释放Oracle里被占用的数据块表空间。它只把那些被删除的数据块标成unused。(2)如果确实要删除一个大表里的全部记录,可以用TRUNCATE语句,它可以释放占用的数据块表空间,其语句格式为:TRUNCATETABLE表名;(3)此操作不可回退。UPDATE语句通过条件的限制来修改特定的数据。UPDATE语句格式为:UPDATEtablenameSETnewvalue[FROMtableexpression]WHEREcriteria;DML语句对表都加上了行级锁,确认完成后,必须加上事物处理结束的语句COMMIT才能正式生效,否则改变不一定写入数据库里。如果想撤回这些操作,可以用语句ROLLBACK复原。2.4.3UPDATE语句2.5.2ALTER语句2.5.1CREATE语句2.5数据定义语言(DDL)2.5.3DROP语句2.5.4TRUNCATE语句1.表的建立表是存储用户数据的基本结构。建立表主要指定义下列信息:•列定义•完整性约束2.5.1CREATE语句字段数据类型:字符型:1、char(n):定长字符串长度1~20002、varchar2(n):变长字符串长度1~40003、nchar(n):定长字符串长度1~10004、nvarchar2(n)变长字符串长度1~10005、long(n)变长字符串长度2G数字型1、Number(p,s):p为所有位数,s为小数位数number范围10的-38次方到10的38次方日期型1、date:储存从公元前4712/1/1到公元4712/12/31大对象数据类型1、Blob(n):存4G的二进制数据2、Clob(n):存4G的字符数据3、NClob(n):存4Gunicode的字符数据(1)建立一个新表的语句格式可以利用CREATETABLE语句,来建立一个全新的表,但前提是:数据库必须已经存在。语句格式为:CREATETABLEtablename(field1type[(size)][index1],field2type[(size)][index2],...,nultifieldindex[,...])[constraint约束名]primarykey(列名)[constraint约束名]primarykey(列名):不重复,不能有null值可以被外键引用,一个表中只能有一个主键[constra