SQL通配符 - 查找数据中的匹配和模式
当您希望查找符合特定条件的数据或查找数据中的模式时,可以使用通配符查询。在SQL中,通配符与语句(如SELECT语句)一起使用,以检索由模式确定的数据。例如,如果您希望在一个包含模式“ville”的表中找到所有城市,那么使用通配符将使您能够这样做。您可以选择使用不同的通配符,其使用取决于搜索的目的以及您想要收集的数据类型。
通配符
与许多SQL对象一样,Oracle和Access使用不同选项的通配符。
Oracle使用以下符号作为通配符:
%(%符号用于查找带有字符串的模式)
_(下划线用于查找只有一个字符的模式;搜索条件可包含多个字符)
\*, \_(一个反斜杠加上另一个字符允许进行反斜杠的字符被当作文字;你必须设置一个escape来使用这个技巧)
访问使用以下符号来获取通配符:
*(星号用于查找带有字符串的模式)
吗?(问号用于查找含有一个字符的模式;搜索条件可包含多个字符)
[*] [?](方括号允许方括号内的字符被视为字面量)
#(磅标志用于查找特定数字)
[A-Z](括号内用逗号分隔的两个字符的方括号用于查找与范围的模式)
使用通配符的例子
场景1
在第一个例子中,有一家公司进行了一项调查,调查人员输入了他们居住的城镇或城市的名称。你想要搜索的城市或城镇输入包含模式“ville”。下面是一个名为Survey_Tbl的表,您将最初使用它:
SURVEY_ID SURVEY_CITY
1452湾点
1468年Cayey
1489 keokuk.
1463桑迪亚大吼
1452 Waynesville.
1476 Sparta.
1421林河
1411邓肯瀑布
1451年森尼维耳市
1434年达文波特
1458 Clarkesville.
1428矿产
1542 Myerstown.
1578年Mocksville
1563年Pattonsburg
1598沙湖
1563 Maplewood.
1542年诺顿海岸
1572 Reedsville.
1516北贝尔莫尔
1584 Hyattsville.
1621年温莎的地方
1656蜜岭
1642 Camptonville.
1682 Johnston City
1625 Niceville.
1721 Spricport.
1742年Knightdale
1765年瓦尔登堡
1795 Troutville.
1799东格林维尔
1821年Reinbeck
1874阿什维尔
1863年6月公园
1846个松树谷
为了找到哪些城市或城镇包含字母“ville”(按这个顺序),你可以使用一个包含适当通配符和LIKE条件的查询,如下面所示:
选择survey_id,survey_city from survey_tbl,其中survey_city等'%ville%';
在Access中,查询如下:
从Survey_tbl中选择Survey_ID,Survey_city,其中Survey_city(如'* Ville *');
SURVEY_ID SURVEY_CITY
1452 Waynesville.
1458 Clarkesville.
1578年Mocksville
1572 Reedsville.
1584 Hyattsville.
1642 Camptonville.
1625 Niceville.
1795 Troutville.
1799东格林维尔
1874阿什维尔
请注意,我已输入被搜索为Oracle示例的“Ville”的字符串;这是由于敏感性的理由。如果数据库已设置为区分大小写,则表示为小写或大写的字母是一个重要因素。在上面的示例中,如果我会搜索“Ville”,那么查询就无法生成成功的结果。您可以注意到您正在搜索的数据的情况,您可以使用其他选项,允许您搜索,而无需了解表中的数据类型,或者您可以对数据库进行激活的案例灵敏度。
对于Oracle SQL,在某些情况下,您可以使用以下命令将所有数据设置为在运行其他命令之前将所有数据设置为大写的大写:
设置Sqlcase upper;
对获得更多Oracle SQL技能感兴趣吗?拿一个udemy类。
场景2.
在第二个方案中,您已被任务查找在用于面包店的表中使用小麦面粉的所有条目。如前所述,使用下划线字符可以用于通配符查询的多个字符。通配符查询中的下划线可用于尝试匹配任何字符,并且可以通过单个字符进行前面或进行。以下是您将使用的表:
选择*来自flow_tbl;
crecape_id crecape_name flow_type.
41234 vanilla蛋糕通用
41235坚果面包小麦
41236椒盐脆饼面包
41237万能巧克力蛋糕
41238枣方酥
41239快速面包自我上升
41240奶酪饼干通用
41241茶饼干通用
41242万能开心果松饼
41243小麦煎饼小麦
41244披萨面包
41245胡萝卜蛋糕小麦
41246糕点贝壳糕点
41247黑莓烤饼小麦
您可以使用查询搜索Flow_type字段中具有模式“w_eat”的条目的查询;如以下内容:
SELECT RECIPE_ID, RECIPE_NAME, FLOUR_TYPE FROM Flour_Tbl WHERE FLOUR_TYPE LIKE 'W_eat';
在Access中,查询将使用问号(?)而不是下划线(_)。
crecape_id crecape_name flow_type.
41235坚果面包小麦
41243小麦煎饼小麦
41245胡萝卜蛋糕小麦
41247黑莓烤饼小麦
类似地,为了进一步演示Underscore通配符的使用,您可以使用以下查询来查找以字母“W”开头的所有配方名称:
选择Recipe_ID,Recipe_name,Flob_type从flow_tbl,其中recape_name(如'w_%');
crecape_id crecape_name flow_type.
41243小麦煎饼小麦
场景3.
在这个场景中,您的目标是从FLOUR_TYPE列、从Flour_Tbl表中寻找值不为“Wheat”的值。在本例中,您可以使用包含参数NOT和LIKE的查询。可以用来排除值的通配符查询示例如下:
SELECT RECIPE_ID, RECIPE_NAME, FLOUR_TYPE FROM Flour_Tbl WHERE FLOUR_TYPE NOT LIKE 'W_%';
crecape_id crecape_name flow_type.
41234 vanilla蛋糕通用
41236椒盐脆饼面包
41237万能巧克力蛋糕
41238枣方酥
41239快速面包自我上升
41240奶酪饼干通用
41241茶饼干通用
41242万能开心果松饼
41244披萨面包
41246糕点贝壳糕点
您想通过使用示例了解有关Oracle SQL的更多信息吗?拿一个udemy类。
结论
通配符可以为查询提供灵活性,因为有一个可用于查询的各种组合。通配符查询可以帮助查找符合特定标准的值,不包括值,搜索范围等。在数据库中搜索特定字符和其他值,在没有诸如通配符查询之类的选项的繁琐任务。