当第3章MsOL查询和视图 外连接包括 ●左外连接( LEFT OUTER JOIN):结果表中除了匹配行外,还包括左表有的但右表中不匹 配的行,对于这样的行,从右表被选择的列设置为NULL 右外连接( RIGHT OUTER JOIN):结果表中除了匹配行外,还包括右表有的但左表中不 匹配的行,对于这样的行,从左表被选择的列设置为NULL 自然连接( NATURAL JOIN):自然连接包括自然左外连接( NATURAL LEFT OUTER JOIN)和自然右外连接( NATURAL RIGHT OUTER JOIN) NATURAL JOIN的语义定义与使用 了ON条件的 INNER JOIN相同 【例322】査找所冇学生情况及他们选修的课程号,若学生未选修任何课,也要包括其情况 select xs.*,课程号 from xs left outer join xs kc on xs.学号=xskc,学号; 本例结果中返回的行中有未选任何课程的学生信息,相应行的课程号宇段值为 说明NULL。 【例323】查找被选修了的课程的选修情况和所有开设的课程名 select xs kc from xs kc right join kc on xs kc.课程号=kc 结果显示如图3.18所示。 uLL!计算机基础 图3.18执行结果 【例324】使用自然连接查询xscj数据库中所有学生选过的课程名和课程号。 select课程名,课程号 from kc ( select distinct课程号 from kc natural right outer join xs kc) 日 SELECT语句中只选取一个用来连接表的列时,可以使用自然连接代替内连接。用 这种方法,可以用自然左外连接来替换左外连接,自然右外连接替换右外连接 函 外连接只能对两个表进行 ③交叉连接。指定了 CROSS JOIN关键字的连接是交叉连接
MSQL数据库教程(视频指导版 在不包含连接条件时,交叉连接结果表是由第一个表的每一行与第二个表的每一行拼接后形 成的表,因此结果表的行数等于两个表行数之积 在 MySQL中, CROSS JOIN语法上与 INNER JOIN等同,两者可以互换 【例3.25】列出学生所有可能的选课情况。 select学号,姓名,课程号,课程名 rom xs cross join kc: 另外, STRAIGHT JOIN连接用法和 INNER JOIN连接基本相同。不同的是, STRAIGHT JOI 后不可以使用 USING子句替代ON条件。 【例3.26】使用 STRAIGHT JOIN连接査找ⅹsj数据库中所有学生选过的课程名和课程号。 elect distinct课程名,xskc,课程号 from kc straight join xs kc on(kc.课程号=xskc.课程号); 3.13查询条件: WHERE子句 WHERE子句的基本格式为 条件>格式如下 表达式<比较运算符>表达式 比较运算·/ 逻辑表达式<逻辑运算符>逻辑表达式 1表达式[NoT1LIKE表达式[ ESCAPE'esc字符 /*LIKE运算符*/ 表达式[NOT[ REGEXP| RLIKE]表达式 /* REGEXP运算符* 1表达式[Nor] BETWEEN表达式AND表达式 指定范围*/ 1表达式Is[ NOT] NULL /*是否空值判断 1表达式No1IN(子查询|表达式t,n1) /*TN子句*/ 表达式<比较运算符> soAY)(子查询 /*比较子查询*/ / EXIST子查询*/ WHERE子句会根据条件对FROM子句一行一行地进行判断,当条件为TRUE的时候,一行 就被包含到 WHERE子句的中间结果中。 IN关键字既可以指定范围,也可以表示子查询。在SQL中,返回逻辑值(TRUE 说明或 FALSE)的运算符或关键字都可称为谓词 判定运算包括比较运算、模式匹配、范围比较、空值比较和子查询。 比较运算 较运算符用于比较两个表达式值,当两个表达式值均不为空值(NULL)时,比较运算返 逻辑值TRUE(真)或 FALSE(假);而当两个表达式值中有一个为空值或都为空值时,将返 回 UNKNOWN MySQL支持的比较运算符有:=(等于)、<(小于)、<=(小于等于)>(大于)、>=(大于 等于)、<→>(相等或都等于空)、<(不等于)、!=(不等于)。 【例3.27】查询xscj数据库xs表中学号为081101的学生的情况。 select姓名,学号,总学分 where学号=081101';
当第3章MsOL查询和视图 执行结果如图3.19所示。 图3.19执行结果 【例328】查询xs表中总学分大于50分的学生的情况。 select姓名,学号,出生日期,总学分 from xs where总学分>50 执行结果如图3.20所示。 g81187:199485- 图3.20执行结果 ySoL有一个特殊的等于运算符“<”,当两个表达式被此相等或都等于空值时,它的值 为TRUE,其中有一个空值或都是非空值但不相等,这个条件就是 FALSE。其中没有 UNKNOWN 的情况 【例329】查询xs表中备注为空的同学的情况。 select姓名,学号,出生日期,总学分 ron Xs where 可以通过逻辑运算符(AND、OR、XOR和NOT)组成更为复杂的查询条件。 查询xs表中专业为计算机、性别为女(0)的同学的情况 select姓名,学号,性别,总学分V from xs here专业名=·计算机’and性别=0 执行结果如图3.21所示。 2.模式匹配 (1)LIKE运算符 LIKE运算符用于指出一个字符串是否与指定的字符串相匹配,其运算对象可以是char varchar、text、 datetime等类型的数据,返回逻辑值TRUE或 FALSE LIKE谓词表达式的格式为
MSQL数据库教程(视频指导版 表达式[NOr1LIKE表达式[ ESCAPE'esc字符,1 使用LKE进行模式匹配时,常使用特殊符号和%,可进行模糊查询。“%”代表0个或多个 字符 代表单个字符。 由于 MySQL默认不区分大小写,要区分大小写时需要更换字符集的校对规则 【例330】查询xscj数据库xs表中姓“王”的学生学号、姓名及性别。 select学号,姓名,性别 where姓名1ke'王8 执行结果如图3.,22所示。 名1性别 et (0.8 图3.22执行结果 【例331】查询xs数据库xs表中,学号倒数第二个数字为0的学生的学号、姓名及专业名 select学号,姓名,专业名 from xs here学号1ike80 执行结果如图3.23所示。 图3.23执行结果 如果我们想要查找特殊符号中的一个或全部(和%),必须使用一个转义字符。 【例3.32】查询ⅹs表中名字包含下划线的学生学号和姓名。 学号,姓名 from xs where学号1ke号’ escape!井 由于没有学生满足这个条件,所以这里没有结果返回。定义了 说明后,语句中在“”后而的“”就失去了它原来特殊的恋义。 (2) REGEXP运算符 REGEXP运算符用来执行更复杂的字符串比较运算。 REGEXP是正则表达式的缩写,但它不 是SQL标准的一部分。 REGEXP运算符的一个同义词是RLKE
当第3章MsOL查询和视图 REGEXP运算符的语法格式如下 表达式[NOT1[ REGEXP| RLIKE]表达式 REGEXP运算符特殊含义的符号如表3.2所示 表32 属于 REGEXP运算符的特殊字符 殊字符 特殊字符 含义 匹配字符串的开始部分 b]|匹配方括号里出现的字符串abe 匹配字符串的结束部分 a4|匹配方括号里出现的a-z之间的1个字符 匹配方括号里出现的不在a~z之间的1个 匹配任何一个字符(包括回车和新行 [a-z 字符 匹配星号之前的0个或多个字符的任何序列 符号左边或右边出现的字符串 匹配加号之前的1个或多个字符的任何序列/-匹配方括号里出现的符号(如空格、换行 括号、句号冒号、加号、连字符等) ?匹配问号之前0个或多个字符 和匹配一个单词的开始和结束 里出现的字符中的任意一个字 n}|匹配括号前的内容出现n次的序列 [1:] 0匹配括号里的内容 【例3.33】查询姓李的同学的学号、姓名和专业名。 select学号,姓名,专业名 where姓名 regexp'^李 执行结果如图3.24所示。 图3.24执行结果 【例3.34】查询学号里包含4、5、6的学生学号、姓名和专业名。 lect学号,姓名,专业名 rom x here学号 regexp'[4,5,6 执行结果如图3.25所示 图3.25执行结果