--字符匹配--谓词like可以用来进行字符串的匹配,--like关键字的使用的格式为:[not] like '<匹配串>' [escape <''换吗字符'>]--其含义就是查找指定的属性值与<匹配串>相匹配的元组.--<匹配串>可以是一个完整的字符串,也可以是含有通配符"%"和''_"字符串--%代表任意长度的字符串,长度可以是0,长度可以是1.....(或者说代表任意字符的0次,1次或者多次出现)--_代表任意的单个字符,长度只能是1(或者说任意字符的1次出现);--查询学号为201215121的学生的详细情况select *
from Student
where Sno like'201215121';select *
from Student
where Sno='201215121';--说明以上两种SQL语句的执行效果是相同的--如果like后面的匹配串中不含任何通配符,则可以使用=来代替like谓词select *
from Student
where Sno notlike'201215121';select *
from Student
where Sno!='201215121';select *
from Student
where Sno<>'201215121';--以上两条SQL语句的执行效果是相同的--如果like后面的匹配串中不含任何通配符,可以使用<>或者!=来代替not like子句--查询出所有姓刘的学生的姓名,学号,性别select Sno 学生学号 ,Sname 学生姓名 ,Ssex 学生性别
from Student
where Sname like'刘%';--查询姓刘的且全名为两个字的学生的姓名,学号,性别select Sname 学生姓名,Sno 学生学号,Ssex 学生性别,Sdept 学生院系
from Student
where Sname like'刘_';--注意:数据库字符集ASCII时一个汉字需要两个_;当字符集为GBK时只需要一个_;select * from v$nls_parameters t where t.PARAMETER='NLS_CHARACTERSET';--说明本数据库是GBk字符集,使用统配符_时,一个_代表一个汉字;--查询课程表Course 中所有课程信息select *
from Course;--查询课程表Course课程名为以"数"开始的且字数为4的课程的所有信息select Cno 课程号,Cname 课程名,Cpno 先行课程 ,Ccredit 学分
from Course
where Cname like'数___';--查询课程表Course课程名为以"数"开始的课程的所有信息select Cno 课程号,Cname 课程名,Cpno 先行课程 ,Ccredit 学分
from Course
where Cname like'数%';--查询课程表Course课程名不是以"数"开始的课程的所有信息select Cno 课程号,Cname 课程名,Cpno 先行课,Ccredit 课程学分
from Course
where Cname notlike'数%';--如果用户要查询的字符本身就含有通配符%或者_,这时候就需要使用escape <''换吗字符'>--查询课程表Course 中所有课程信息select *
from Course;--先向课程表中插入含有统配符_的一条记录insertinto Course values('8','DB_Design','5',4);--查询DB_Design课程的课程号和学分select Cno 课程号,Cname 课程名,Cpno 先行课程号,Ccredit 课程学分
from Course
where Cname like'DB\_Design'escape'\';
--使用\的目的是为了告诉SQL执行程序这是一个普通字符,而不是一个通配符,在使用的时候不要忘记使用escape
--那么我们一定要使用 \来进行转义吗,我们可以使用其他的字符吗
select Cno 课程号,Cname 课程名,Cpno 先行课程号,Ccredit 课程学分
from Course
where Cname like 'DB$_Design' escape '$';
select Cno 课程号,Cname 课程名,Cpno 先行课程号,Ccredit 课程学分
from Course
where Cname like 'DB#_Design' escape '#';
select Cno 课程号,Cname 课程名,Cpno 先行课程号,Ccredit 课程学分
from Course
where Cname like 'DB@_Design' escape '@';
select Cno 课程号,Cname 课程名,Cpno 先行课程号,Ccredit 课程学分
from Course
where Cname like 'DB#_Design' ;
--从上面三条SQL语句可见,选一个特殊字符进行转义即可,不一定非要使用\来进行转义,使用$,#,@也是可以的
--但是如果不是escape子句的话,虽然不会出错,但是_会被解释成通配符,就不是我们所想的结果了
--查询以"DB_"开头,且倒数第三个字符为i的课程的详细情况
select Cno 课程号,Cname 课程名,Cpno 先行课程号,Ccredit 课程学分
from Course
where Cname like 'DB@_%i__' escape '@';
--这条SQL语句中第一个统配符前面使用了@,让SQL执行程序知道这个_是作为普通字符出现的
--而第二个统配符%以及后面的_前面没有使用 @符号,说明任然是当做约定的统配符使用的