in

谓词in 用来查找属性值属于指定集合的元组,
比如查询 班级 ‘c1’, ‘c2’, ‘c3’的所有学生的信息

select * 
from Student
where Sclass in ('c1', 'c2', 'c3')

如果查询 班级不是 ‘c1’, ‘c2’, ‘c3’的所有学生的信息

select * 
from Student
where Sclass not in ('c1', 'c2', 'c3')

加个not 就可以;
此外in 还用于创建check 约束中,要求学生的专业只能是’CS’ , ‘YU’,这

alter table Student
add constraint check_name check (Smajor in ('CS', 'YU'))

这样的 约束后, 插入的数据,学生的专业只能是’CS’ , ‘YU’

Like

–字符匹配 , ‘like’ 语句, ‘%’代表任意长度的字符串,’_’代表单个长度的字符串

–查询姓’欧阳’且全名为三个汉字的学生的信息

select *
from dbo.Stu
where Sname like '欧阳_'

–查询所有不姓’欧阳’的学生的姓名

select Sname
from dbo.Stu
where Sname not like '欧阳%'

–查询名字中第二个字为’莉’的学生的姓名

select Sname
from dbo.Stu
where Sname like '_莉%'

–如果要查询的字符串本身就有通配符’%’, ‘_’,这时就要用escape ‘<换码字符>’短语对通配字符 进行转义

--查ko_sopl课程的课程信息
select * from Course
like  'ko&_%'   ESCAPE  ‘&'
此

时,定义了转义字符“&”,搜索字符串中紧跟“&”之后的字符,即“_”看作是实际字符值,而不是通配符。

--查询以‘ko_’开头,倒数 第2个是‘l’的课程的详细信息
select * 
from Course
where Cname like 'ko&_l_' escape'&';
--这里的匹配串是 'ko&_l_',第一个'_'前有换码字符&,顺便说一下,换码字符可以任意,'\'啥的都ok, 所有第一个'_'被转换成普通的'_'后面的一个'_'仍然是单字符通配符.

有关escape的详细解释:

使用ESCAPE定义转义符
在使用LIKE关键字进行模糊查询时,“%”、“”和“[]”单独出现时,会被认为是通配符。为了在字符数据类型的列中查询是否存在百分号 (%)、下划线()或者方括号([])字符,就需要有一种方法告诉DBMS,将LIKE判式中的这些字符看作是实际值,而不是通配符。关键字 ESCAPE允许确定一个转义字符,告诉DBMS紧跟在转义字符之后的字符看作是实际值。如下面的表达式:
LIKE ‘%M%’ ESCAPE ‘M’
使用ESCAPE关键字定义了转义字符“M”,告诉DBMS将搜索字符串“%M%”中的第二个百分符(%)作为实际值,而不是通配符。当然,第一个百分符(%)仍然被看作是通配符,因此满足该查询条件的字符串为所有以%结尾的字符串。
类似地,下面的表达式:
LIKE ‘AB&_%’ ESCAPE ‘&’
此时,定义了转义字符“&”,搜索字符串中紧跟“&”之后的字符,即“”看作是实际字符值,而不是通配符。而表达式中的“%”,仍然作 为通配符进行处理。该表达式的查询条件为以“AB”开始的所有字符串。