版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章SQL数据定义语句本章介绍数据库、基本表、索引的定义方法数据库系统原理及应用5.1定义数据库5.2定义基本表5.3定义索引主要内容定义数据库5.11)创建数据库在SQL中,一个模式(SHEMA)定义为基本表的集合。模式由模式名和模式拥有者的用户名或账号来确定,并包含模式中每一个元素(基本表、视图、索引等)的定义。创建一个模式,可以理解为建立一个数据库,或定义一个存储空间。CREATESCHEMA与CREATEDATABASE同义。语法格式为:CREATE{DATABASE|SCHEMA}[IFNOTEXISTS]db_name;参数:(1)IFNOTEXISTS:防止数据库已经存在时系统报错。(2)db_name:拟创建的数据库的名字。1)创建数据库[例5-1]:创建名称为饭卡管理
的数据库。
[例5-2]:创建名称为
饭卡管理
的数据库(该数据库已存在)。CREATEDATABASE饭卡管理;CREATEDATABASE饭卡管理;CREATEDATABASEIFNOTEXISTS饭卡管理;第一个语句执行时系统提示错误,因为数据库已存在。第二个语句执行成功。2)删除数据库DROPDATABASE删除数据库中的所有表并删除数据库。DROPSCHEMA是DROPDATABASE的同义词。语法格式为:DROP{DATABASE|SCHEMA}[IFEXISTS]db_name;参数:IFEXISTS:防止数据库不存在时发生错误。2)删除数据库[例5-3]:删除数据库
饭卡管理
及其下属所有的对象。
[例5-4]:删除数据库
饭卡管理(不存在该数据库)。。DROPSCHEMA饭卡管理;或DROPDATABASE饭卡管理;DROPDATABASE饭卡管理;DROPDATABASEIFEXISTS饭卡管理;第一个语句执行时系统提示错误,因为数据库不存在。第二个语句执行成功。定义基本表5.21)创建基本表创建基本表时,只需要定义型,定义后得到具有表结构的一张空表。SQL使用CREATETABLE语句定义基本表语法格式为:CREATETABLE[IFNOTEXISTS]tbl_name(col_namecolumn_definition,...)参数:(1)tbl_name:基本表的表名。(2)col_namecolumn_definition:列定义子句,其中col_name为列名,column_definition定义列的数据类型和列的完整性约束。一个基本表由多个列组成,多个列定义语句之间用逗号分开,最后一个列定义语句除外。表级的完整性约束需要单独的子句进行定义。列级的完整性约束可以在列定义子句中进行说明,也可以用单独的子句定义在表级。1)创建基本表[例5-5]:定义基本表card,改表的表结构如表5-1所示。
CREATETABLEcard(CIDCHAR(6)PRIMARYKEY,passwordVARCHAR(6)NOTNULL,balanceDECIMAL(10,2)NOTNULLCHECK(balance>=0),stateCHAR(1)CONSTRAINTstate_1CHECK(statein('0','1','2'))));1)创建基本表[例5-6]:定义基本表student,表结构如表5-2所示。CREATETABLEstudent(SIDCHAR(12),CIDCHAR(6),snameVARCHAR(20),genderCHAR(1),collegeVARCHAR(20)NOTNULL,CONSTRAINTSID_pkPRIMARYKEYNONCLUSTERED(SIDDESC),FOREIGNKEY(CID)REFERENCEScard(CID)ONDELETECASCADE);2)修改基本表在基本表建立使用一段时间后,可能由于分析设计不到位或应用需求的不断变化等原因,需要对基本表结构进行修改,比如新增列和完整性约束、修改原有的列定义和完整性约束定义等。SQL语言使用ALTERTABLE命令来完成这一功能。其基本格式为:ALTERTABLEtbl_name[alter_option[,alter_option]...]参数:(1)tbl_name:需要修改表结构的基本表。(2)alter_option:修改项。2)修改基本表修改项包含两大类,一类是对列的修改,一类是对完整性约束的修改。如下所示:alter_option:{|RENAMECOLUMNold_col_nameTOnew_col_name
//改列名|RENAME[TO|AS]new_tbl_name
//改表名
|ADD[COLUMN](col_namecolumn_definition,...)
//增加列
|ALTER[COLUMN]col_name{SETDEFAULT{literal|(expr)}|DROPDEFAULT
//设置或删除列的默认值|DROP[COLUMN]col_name
//删除列|MODIFY[COLUMN]col_namecolumn_definition
//修改列|CHANGE[COLUMN]old_col_namenew_col_namecolumn_definition
//修改列|ADD[CONSTRAINT[symbol]]PRIMARYKEY[index_type].(key_part,...)
//增加主键约束|ADD[CONSTRAINT[symbol]]FOREIGNKEY(col_name,...)reference_definition//增加外键约束|ADD[CONSTRAINT[symbol]]CHECK(expr)
//增加用户定义约束|DROPPRIMARYKEY
//删除主键约束|DROPFOREIGNKEYfk_symbol
//删除外键约束|DROP{CHECK|CONSTRAINT}symbol
//删除用户定义约束}2)修改基本表[例5-9]:在student表中添加“专业(major)”列。ALTERTABLEstudentADDmajorCHAR(8);[例5-11]:使用MODIFY将student表中的SID列的数据类型改为CHAR(20)。ALTERTABLEstudentMODIFYcolumnSIDCHAR(20);例5-10:删除列。删除student中的major列。ALTERTABLEstudentDROPmajor;3)删除基本表
删除基本表命令的基本格式为DROPTABLE[IFEXISTS]tbl_name[,tbl_name]...[RESTRICT|CASCADE]参数:(1)IFEXISTS:不使用IFEXISTS子句,删除的表不存在时系统给出错误提示;使用IFEXISTS子句时,删除的表不存在时系统不报错。(2)RESTRICT:拒绝删除主表。该值是默认值。(3)CASCADE:删除主表时,自动删除从表中的匹配行。[例5-12]:删除card表。DROPTABLEcard;定义索引5.35.3.1索引的概念5.3.1索引的概念索引为数据快速检索提供支持,并可作为其他数据库对象的数据源。索引定义的是关键字与其存储地址的对应关系。索引是依赖于表的,它提供了数据库中编排表中数据的内部方法。当删除基本表时,表上建立的索引一并被删除。当基本表中插入、删除、修改数据时,行的存储地址可能发生变化,索引需要同步进行更新,即数据库不仅要更新基本表,还要更新基本表上的索引。索引可以提高基本表的查询速度,但会降低基本表的更新速度。适合建立索引的列
经常被查询、排序、分组的列
值域很大的列
经常用在连接的列上
经常需要使用WHERE子句的列
经常被组合在一起查询的列上适合建立组合索引,且把使用最频繁的列作为
组合索引的前导列。5.3.2索引类型1)单列索引与组合索引单列索引是在单个列上创建索引。组合索引是由多个列组合构建的索引,多个列中的值都不允许有空值。使用组合索引时遵循“最左前缀规则”,只有当查询条件使用了组合索引的第一个列时索引才会被使用。2)主键索引主键索引是建立在主键上的索引,列的值不允许重复,也不允许有空值。主键索引一般是在创建表、定义主键时由系统自动创建的。3)唯一索引唯一索引是指列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。4)普通索引用表中的普通列构建的索引,对列值没有任何限制。5)全文索引全文索引是大文本适用的一种索引类型。全文索引为文本生成一份单词的清单,并根据清单来索引。生成全文索引非常消耗时间和空间,但是对于大文本,或者较大的字符型数据的查询速度比普通索引快。5.3.2索引类型聚集索引是指索引的逻辑顺序与表中相应行的物理顺序一致,因此一个表只能包含一个聚集索引。非聚集索引是指索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表可以包含多个非聚集索引。5.3.3创建索引1)CREATETABLE语句创建索引CREATETABLE语句在基本表上定义PRIMARYKEY、FOREIGNKEY或者UNIQUE约束时,数据库管理系统自动在主键上创建主键索引、在外键上创建普通索引、在唯一值约束的列上创建唯一索引。CREATETABLE语句中使用INDEX子句在其它列上创建索引。INDEX子句的语法格式为:[UNIQUE|FULLTEXT]INDEXindex_name(key_part,...)key_part:col_name[(length)][ASC|DESC]参数:(1)index_name:索引的名称。(2)UNIQUE|FULLTEXT:索引类型。UNIQUE是唯一索引,FULLTEXT是全文索引,缺省值为普通索引,即NORMAL类型。(3)key_part:可以是单列索引,也可以是多列组成的组合索引。组合索引中多个列用逗号分开。(4)length:用作索引的列名长度过长会造成索引的关键字太大,导致效率降低,在允许的情况下,可以只取索引列的前几个字符作为索引。(5)ASC|DESC:ASC为升序排列,DESC为降序排列。默认值是ASC。5.3.3创建索引[例5-13]:创建student表时在CID列建立名为normal_index的单列、普通索引,在college列建立名为single_index的单列、普通索引,索引长度为8。CREATETABLEstudent(SIDCHAR(12)PRIMARYKEY,CIDCHAR(6),snameVARCHAR(20),genderCHAR(1)DEFAULT'M'CHECK(genderin('M','F')),collegeVARCHAR(20)NOTNULL,FOREIGNKEY(CID)REFERENCEScard(CID)ONDELETECASCADE,INDEXnormal_index(sname), INDEXsingle_index(college(8)));5.3.3创建索引2)ALTERTABLE语句创建索引INDEX子句的语法格式为:ADD[UNIQUE|FULLTEXT]INDEXindex_name(key_part,...)...key_part:col_name[(length)][ASC|DESC][例5-14]:设创建student表时,为了提高查询效率,需要在sname列建立名为normal_index的普通索引,在college列和sname列上建立名为multi_index的组合索引。ALTERTABLEstudentADDINDEXnormal_index(sname),ADDINDEXmulti_index(college(8),sname(6));5.3.3创建索引3)CREATEINDEX语句创建索引CREATEINDEX语句创建索引的基本语法格式为:CREATE[UNIQUE|FULLTEXT]INDEXindex_nameONtbl_name(key_part,...)key_part:col_name[(length)][ASC|DESC][例5-14]:在student表上在并在CID列建立名为unique_index的唯一索引CREATE
UNIQUEINDEXunique_index(CID);5.3.4删除索引1)直接删除索引DROPINDEX语句的基本语法格式为:DROPINDEXindex_nameONtbl_name;2)修改表结构删除索引ALTERTABLE语句删除索引的基本语法格式为:ALTERTABLEtbl_nameDROPINDEXindex_name;[例5-15]:删除student上的multi_index索引。DROPINDEXmulti_indexONstudent;或者ALTERTABLEstudentDROPINDEXmulti_index;5.3.4删除索引3)删除主键索引其基本的语法格式为:ALTERTABLEtab_nameDROPPRIMARYKEY;当有其它表参照该主键时,即该主键是其他表的外键,则不能删除该主键索引。例如,删除card表的主键索引会出错,因为salebill表中的外键CID是参照该表的主键CID的。此外,如果主键是自增型变量,不能直接删除该列的主键索引,修改变量类型后才能删除主键索引。第6章SQL数据操纵语句本章介绍数据操纵语言的基本概念及相关数据操作。数据库系统原理及应用6.1插入数据6.2更新数据6.3删除数据主要内容6.1.1VALUES或VALUE赋值INSERT[INTO]tbl_name[(col_name[,col_name]...)]{VALUES|VALUE}(value_list)[,(value_list)]...value:{expr|DEFAULT}value_list:value[,value]...基本格式:参数:[(col_name[,col_name]...)]:如果给表中所有列赋值,表名后面不需要指明列名,并且值列表中值的顺序必须与表中列的顺序完全一致,不可跳过或颠倒,空数据用NULL表示。否则按照指定的列名依次赋值。有NOTNULL约束的字段必须全部列出,否则操作不能成功。6.1.1VALUES或VALUE赋值具体语法分成3种情形:1)完整型INSERTINTOtabnameVALUES(val1,val2,......)2)列举型INSERTINTOtabname(col1,col2,......)VALUES(val1,val2,......)3)复制型INSERTINTOtabname1(col1,col2,......)SELECT(col1,col2,......)FROMtabname26.1.1VALUES或VALUE赋值注意:1)字符、日期等数据类型用单引号或双引号界定,数值型不用引号。2)每个数据之间用逗号隔开。3)运用完整型语法时,数据顺序要与定义表时的字段顺序完全一致,不可跳过或颠倒,空数据用NULL表示。4)运用列举型语法时,数据顺序要与列举的字段顺序完全一致,空数据用NULL表示,也可不列出;属性为NOTNULL约束的字段必须全部列出,否则,操作不能成功。5)运用复制型语法时,要求两个表具有大致相同的表结构。6.1.2SET赋值如果使用SET子句插入行,则必须至少为一列赋值。如果某一个字段使用了默认值或自增值,SET子句中可以省略这些字段语法格式为:INSERT[INTO]tbl_name
SETcol_name=value[,col_name=value]...[例6-1]:向student中插入一条新记录,学号为20200301001,姓名为黄磊,院系为管理学院,其它信息暂缺。INSERTINTOstudent(SID,sname,college)VALUES('20200301001','黄磊','经济学院');或INSERTINTOstudentSETSID='20200301001',sname='黄磊',college='经济学院';6.1.3SELECT赋值SELECT赋值可以用一个INSERT语句向基本表中插入多行。SELECT赋值基本语法格式为:INSERT[INTO]tbl_name[(col_name[,col_name]...)]{SELECT...|TABLEtable_name}[例6-2]:求每个院系的学生人数,并把结果存入数据库中。首先在建立一个存储院系名称和学生人数的表table_sum。CREATETABLEtable_sum(collegeVARCHAR(20)PRIMARYKEY,total_numberINT);然后向table_sum表中插入行。INSERTINTOtable_sumSELECTcollege,COUNT(*)学生人数FROMstudentGROUPBYcollege;6.2更新数据UPDATE语句用于更新数据其基本语法格式为:
UPDATEtbl_name
SETcol_name={value|DEFAULT}[,...n]
[WHEREwhere_condition]参数:(1)SET子句:指明要修改的列以及应提供的数据值,数据值可以是表达式或DEFAULT。(2)WHERE子句:指定修改数据的条件,如果不提供WHERE子句,表中的所有行都将被更新。6.2更新数据1)单字段更新UPDATEtabnameSETCOL1=VAL1 [WHEREcondition]2)多字段更新型UPDATEtabnameSETCOL1=VAL1,COL2=VAL2, ...... [WHEREcondition]当不包含条件语句WHERE时,该命令对所有记录进行操作。例6-3:将C00004校园卡的状态由挂失改为正常使用,并充值500元。修改前该卡的信息如表所示。
UPDATEcardSETstate='0',balance=balance+500WHERECID='C00004';6.3删除数据SQL中,DELETE语句用于删除数据,但不会改变表结构。其基本语法格式为:DELETE[FROM]tbl_name[WHEREcondition]参数:WHERE子句:定义删除条件,符合条件的数据将被删除。如果不使用WHERE子句,将删除表中所有行。[例6-4]:删除C00004校园卡的消费记录。DELETEFROMsalebillWHERECID='C00004';[例6-5]:删除管理学院“周萍”的消费记录。DELETEFROMsalebillWHERECIDIN(SELECTCIDFROMstudentWHEREcollege='管理学院'ANDsname='周萍');第7章SQL数据查询语句本章介绍SQL中数据查询语言的基本概念及数据操作。数据库系统原理及应用7.1数据查询语句基本结构7.2简单查询7.3联合查询7.4连接查询主要内容7.5嵌套查询数据查询语句基本结构7.17.1数据查询语句基本结构SELECT[ALL|DISTINCT]col_name1(,...n)FROMtable_references[WHEREwhere_condition][GROUPBYcol_name,...][HAVINGwhere_condition][ORDERBYcol_name[ASC|DESC],...]参数:(1)SELECT:指定查询结果的列或列表达式。ALL|DISTINCT:使用ALL选项时,显示符合条件的所有行。使用DISTINCT选项时,对于所有重复的数据行在结果集合中只保留一行。默认为ALL。col_name1(,...n):查询结果中显示的列(4)
FROM:指定查询范围。WHERE:指定查询条件。不使用WHERE子句时返回所有行。GROUPBY:指定分组依据。HAVING:指定对分组结果的筛选条件。不使用HAVING子句时返回所有分组结果。ORDERBY:对查询结果按照指定的列进行排序,ASC是升序,DESC是降序,默认值是升序。SELECT语句的基本语法格式简单查询7.27.2.1SELECT子句指定查询列1)“*”表示显示表中所有列[例7-1]:显示student中所有数据。SELECT*FROMstudent;3)显示/删除重复行2)仅显示部分列[例7-2]:查询student表中的学号和学生名。SELECTSID,snameFROMstudent;[例7-3]:查询student中学生所在的院系,有多少人就显示多少个学院名称。SELECTALLcollegeFROMstudent;或者SELECTcollegeFROMstudent;7.2.1SELECT子句指定查询列4)限制返回的行数
LIMITn:返回前n行;
LIMITn,m:返回第n行之后的m行。[例7-4]:查询student中前5名学生的校园卡号和姓名。SELECT*FROMstudentLIMIT5;5)重命名
oldname[AS]newname[例7-5]:查询student中的sname和college,把表名命名为学生表,把各列命名为对应的中文。SELECTSIDAS学号,CID卡号,sname姓名,gender性别,collegeAS院系FROMstudent;7.2.2WHERE子句设置查询条件7.2.2WHERE子句设置查询条件1)比较运算符(大小比较)>、>=、=、<、<=、<>、!=[例7-6]:查询消费金额大于等于50元的消费信息。SELECT*FROMsalebillWHERE
payamount>=50;2)范围运算符(表达式值是否在指定的范围)BETWEEN…AND…和NOTBETWEEN…AND…[例7-7]:查询消费金额在20元至30元之间的消费信息。SELECT*FROMsalebillWHEREpayamountBETWEEN20AND30;3)列表运算符(判断表达式是否为列表中的指定项)IN(项1,项2……)或者NOTIN(项1,项2……)[例7-8]:查询管理学院和机械学院的学生信息。SELECT*FROMstudentWHEREcollegeIN('管理学院','机械学院');7.2.2WHERE子句设置查询条件4)空值判断符(判断表达式是否为空)ISNULL和ISNOTNULL[例7-9]:查询尚未办理校园卡的学生姓名和院系。SELECTsname,collegeFROMstudentWHERECIDISNULL;5)逻辑运算符(用于多条件的逻辑连接)AND、NOT、OR其优先级从高到低依次是NOT、AND、OR。[例7-10]:查询2020年5月28日B003商户的销售情况。SELECT*FROMsalebillWHEREBID='B003'ANDsaledate='2020-5-28';7.2.2WHERE子句设置查询条件[例7-13]:查询密码为“12_”开头的校园卡卡号。6)模式匹配符(用于字符串的模糊匹配)LIKE和NOTLIKE[例7-11]:查询姓“张”的学生的姓名。SELECTsnameFROMstudentWHEREsnameLIKE'张__';SELECTsnameFROMstudentWHEREsnameLIKE'张%';百分号%:可匹配任意类型和长度的字符。下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。[例7-12]:查询姓“张”且姓名一共三个字的人员的信息。转义符:如果要查询的字符串中包含%或_,需要使用转义符。\为默认的转义符,也可以使用ESCAPE子句指定其他转义符SELECTCID,passwordFROMcardWHERE`password`LIKE'12_%';7.2.3聚合函数1)计数函数COUNT2)求和函数SUM3)求平均值函数AVG7.2.3聚合函数4)求最大值函数MAX5)求最小值值函数MIN7.2.3聚合函数[例7-14]:统计学生表中的学生总人数。SELECTCOUNT(*)FROMstudent;[例7-15]:统计消费清单中单比消费的最大值和最小值,以及总金额和平均消费水平。SELECTMAX(payamount),MIN(payamount),SUM(payamount),AVG(payamount)FROMsalebill;7.2.4GROUPBY子句进行分组计算分组的目的是细化聚合函数的统计范围。分组语句跟在WHERE子句的后面,它的基本形式为
GROUPBYcol_name[例7-16]:统计每个院系的学生人数。SELECTcollegeAS院系,COUNT(*)AS学生人数FROMstudentGROUPBYcollege;7.2.5HAVING子句对分组结果进行筛选子句HAVING用来对GROUPBY后的数据进行条件筛选。HAVING子句的基本语法格式为:
HAVINGwhere_condition
参数:
where_condition:HAVING的条件表达式中一般都包含聚合函数,
以此来筛选符合条件的分组。子句HAVING必须放在GROUPBY之后,ORDERBY之前。[例7-17]:统计每个学院的学生数,只列出人数大于2人的学院名称和学生总数。SELECTSchoolAS学院名称,COUNT(*)AS学生数FROMTable_Student GROUPBYSchool HAVINGCOUNT(*)>27.2.6ORDERBY子句对查询结果排序ORDERBY子句可以对查询结果排序。ORDERBY子句的语法格式为:
ORDERBYcol_name[ASC|DESC][,…n]
参数:
ASC表示升序,为默认值,DESC表示降序;
对多个列排序,列名之间用逗号分开,每个列都可以指定按升序或降序排序。[例7-18]:
查询校园卡的卡号和消费总额,并将查询结果按消费总额的升序排序。SELECTCID,SUM(payamount)消费总额FROMsalebillGROUPBYCIDORDERBYSUM(payamount);联合查询7.3集合查询种类联合查询语法格式select_statementUNION[ALL|DISTINCT]selectstatementUNION[ALL|DISTINCT]selectstatement][…n]
参数:select_statement:待联合的SELECT查询语句。
ALL:不会消除重复行直接返回联合运算的结果。
DISTINCT:消除重复行。MySQL仅支持UNION集合运算INTERSECT和EXCEPT和UNION语法格式类似联合查询[例7-19]:
查询消费总额低于100元或高于300元的校园卡信息。SELECTCID校园卡号,SUM(payamount)消费总额FROMsalebillGROUPBYCIDHAVINGSUM(payamount)<100UNIONSELECTCID校园卡号,SUM(payamount)消费总额FROMsalebillGROUPBYCIDHAVINGSUM(payamount)>300;联合查询联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。在使用联合查询时,应保证每个联合查询语句的选择列表中列数相同,对应列的数据类型相同,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。连接查询7.4为了从多个表中获取数据,需要进行多表连接。连接查询在SELECT
语句的FROM子句中实现语法格式为FROM
join_table
join_type
join_table[ON
(join_condition)]其中,join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。join_type指的是连接类型,可分为内连接、外连接和交叉连接三种类型。ON
(join_condition)
子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。连接查询7.4.1内连接(Inner
Join或Join)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。(1)等值连接:在连接条件中使用等于(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。(2)自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。(3)不等连接
:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。7.4.1内连接[例7-20]:查询在2019年6月29号,消费金额累计超过20元的学生学号和其消费总额。SELECTStudentID,SUM(PayAmount)AS消费总额FROMstudentAJOINsalebillBONA.CardID=B.CardIDWHERESaleDate='2019-06-29'GROUPBYStudentIDHAVINGSUM(PayAmount)>20多表的连接查询SELECTa.*,b.*,c.*,d.*FROMTable_StudentaJOINTable_Cardb ONa.CardID=b.CardIDJOINTable_SaleBillc ONb.CardID=c.CardIDJOINTable_Machined ONc.MachineID=d.MachineID7.4.2外连接外连接分为三种左外连接(LeftOuterJoin或LeftJoin)右外连接(Right
Outer
Join或RightJoin)全外连接(Full
Outer
Join或Full
Join)MySQL中没有全外连接7.4.2外连接外连接分为三种左外连接(LeftOuterJoin或LeftJoin)右外连接(Right
Outer
Join或RightJoin)全外连接(Full
Outer
Join或Full
Join)MySQL中没有全外连接7.4.2外连接7.4.2外连接7.4.2外连接7.4.2外连接左外连接左连接的含义是不管表1的元组是否满足连接条件,均输出表1的内容。其语法格式为FROM表1LEFTJOIN表2ON<连接条件>[例7-21]:查询所有饭卡的消费情况,包括没有消费的饭卡和消费的饭卡。SELECTcard.CardID,salebill.CardID,PayAmount,SaleDateFROMcardLEFTJOINsalebillONcard.CardID=salebill.CardID7.4.2外连接右外连接右外连接的含义是不管表2的元组是否满足连接条件,均输出表2的内容。其语法格式为FROM表1RIGHTJOIN表2ON<连接条件>[例7-22]:查询所有饭卡的消费情况,包括没有消费的饭卡和消费的饭卡。SELECTcard.CardID,salebill.CardID,PayAmount,SaleDateFROMsalebillRIGHTJOINcardONcard.CardID=salebill.CardID;7.4.2外连接全外连接全外连接没有WHERE子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。嵌套查询7.5嵌套查询嵌套查询嵌套查询1)子查询必须用括号包含。2)子查询中不能使用ORDERBY子句,ORDERBY子句永远只能对外层查询结果排序。3)返回多行的子查询可以和多值操作符如IN一起使用。4)BETWEEN操作符不能和子
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行大润发活动方案策划书3篇
- 安全演讲稿模板锦集五篇
- 关于动物的英语
- 第17课《第二次世界大战》中职高一下学期高教版(2023)世界历史全一册
- 颈椎病术后护理诊断及措施
- 汽车维修临时工聘用协议模板
- 医院合作协议范本
- 老年健康捐赠实施准则
- 环保企业技术人员合同样本
- 旅游景点配奶服务准则
- 学校2025元旦假期安全教育宣传课件
- 教职工趣味运动会活动方案(7篇)
- 语文01-2025年1月“八省联考”考前猜想卷(全解全析)
- 人教版八年级物理上册《第六章质量与密度》单元测试卷(带答案)
- 电梯维保服务客户满意度提升方案
- 项目经理年度工作总结
- 2024冬至节气的教案
- 【碳足迹报告】中车齐齐哈尔车辆有限公司产品碳足迹报告
- 2024公职人员时事政治试题库含答案(综合题)
- 《三七蒸制前后质量评价及蒸三七多糖化学成分研究》
- 最好的设备年终总结报告
评论
0/150
提交评论