第 6 章:过滤数据
1、WHERE子句的位置:同时使用ORDER BY和WHERE子句时,ORDER BY应位于WHERE之后,否则会出错。
2、使用的时间间隔是闭区间,例如:* FROM WHERE Age 10 AND 20; 其中 10-20 是闭区间。
3. 该语句有一个特殊的 WHERE 子句,可用于检查具有 NULL 值的列。 此 WHERE 子句是 IS NULL 子句。
示例:姓名 FROM WHERE 年龄为 NULL; 此语句返回所有不带年龄的学生姓名(年龄字段为空,而不是年龄 0)。
第 7 章:数据过滤
1、WHERE过滤时,可以添加多个过滤条件,每添加一个过滤条件都使用AND。
2. OR 运算符告诉 DBMS 匹配任意条件,而不是同时匹配两个条件。
3. SQL(像大多数语言一样)在处理 OR 运算符之前先处理 AND 运算符。
例:需要列出10岁(含)及以上姓名为张三或李四的同学。
写法错误:age,name FROM WHERE name='张三' OR name='李四' AND Age>=10;
正确写法:age,name FROM WHERE (name='张三' OR name='李四') >=10;
正确编写的语句和错误编写的语句之间的唯一区别是,在该语句中,前两个条件括在括号中。 由于括号的求值顺序高于 AND 或 OR 运算符,因此 DBMS 首先过滤括号内的 OR 条件。
注意:在 WHERE 子句中使用括号:任何时候将 WHERE 子句与 AND 和 OR 运算符一起使用时,都应该使用括号对运算符进行显式分组。 不要过分依赖默认的评估顺序,即使它正是您想要的。 使用括号没有什么坏处,它可以消除歧义。
4、IN运算符用于指定一个条件范围,范围内的每个条件都可以匹配。
示例:名称,价格 FROM WHERE id IN(1,3) ORDER BY 名称; 该语句检索学生 ID 为 1 和 3 的学生信息。
要点: IN:WHERE子句中使用的关键字,指定要匹配的值列表,其功能相当于OR。
上面的例子相当于: name,price FROM WHERE id=1 OR id=3 ORDER BY name;
问题与解答:为什么使用 IN 运算符? 优点如下。
(1) 当使用长的合法选项列表时,IN 运算符的语法更清晰、更直观。
(2)使用IN时,计算顺序更容易管理(因为使用的运算符较少)。
(3) IN 运算符通常比 OR 运算符列表执行得更快。
(4)IN最大的优点是可以包含其他语句,允许更动态地建立WHERE子句。
5、WHERE子句中的NOT运算符只有一个作用,就是否定其后面的任何条件。
示例:name,prcie FROM WHERE id NOT IN(1,3) ORDER BY name;
这里的 NOT 否定了它后面的条件。 因此,MySQL不会匹配1和3的id,而是匹配1和3以外的学生的id。
第 8 章:使用通配符过滤
1. 百分号(%)通配符:% 表示任意字符出现任意次数。
示例 1: id,name from where name like 'Liu%';
示例 2: id,name from where name like '%Liu%';
注意:(1)虽然%通配符看起来可以匹配任何东西,但有一个例外,那就是NULL。 即使 WHERE name LIKE '%' 也无法匹配以 NULL 值作为产品名称的行。
(2)% 表示搜索模式中给定位置的 0 个、1 个或多个字符,% 可以匹配 0 个字符。
2、下划线(_)通配符:下划线的用途与%相同,但下划线只匹配单个字符,而不是多个字符。
示例: id,name from where name like 'Liu_';
3. 使用通配符的提示:通配符搜索通常比前面讨论的其他搜索需要更长的处理时间。
(1)不要过度使用通配符。 如果其他运算符达到相同目的,则应使用它们。
(2) 当确实需要使用通配符时,除非绝对必要,否则不要在搜索模式的开头使用它们。 将通配符放在搜索模式的开头将导致最慢的搜索。
(3)特别注意通配符的位置。 如果放错位置,可能无法返回所需的数据。
第 9 章:使用正则表达式搜索
1.看图看文字
示例 1: id,name from where name 'Liu'; 查找姓名中包含刘的所有学生信息
示例 2: id,name from where name '^Liu'; 查找所有名字以刘开头的学生信息
示例3:id,name from where name '三$'; 查找所有名字以三结尾的学生信息
示例 4: id,name from where name 'Liu.'; 查找所有姓刘*的学生信息。 一个点代表一个字符。 同时写两个点等于两个字符。
2. 要搜索两个字符串之一(该字符串或另一个字符串),请使用 |
示例1:name from where name '刘一|刘二'; 其中刘一|刘二是正则表达式的OR运算符,表示匹配其中之一。 功能上与 OR 语句类似,多个 OR 条件可以组合成单个正则表达式。
示例2:name from where name 'Liu 1|Liu 2|Liu 3|Liu 4'; 将匹配 Liu 1 或 Liu 2 或 Liu 3 或 Liu 4。
注意:对于两个以上的OR条件,可以考虑使用正则表达式来书写。
3、匹配多个字符中的一个:如果只想匹配特定字符,可以通过指定一组|来实现。 由 [ 和 ] 括起来的字符。
示例1:id,name from where name '[123] Liu'; 匹配 1 或 2 或 3 加 Liu,即 1 Liu 或 2 Liu 或 3 Liu
注意:[]是OR语句的另一种形式。 事实上,正则表达式[123] Liu是[1|2|3] Liu的缩写。 也可以使用后者,但是需要使用[]来定义OR语句搜索。 什么。
4、匹配范围:可以使用集合来定义一个或多个要匹配的字符。 例如匹配数字0到9:[],可以使用-来定义范围,即[0-9]。 范围不限于整套,[1-3]和[6-9]也是合法范围。 此外,范围不必只是数字; [az] 匹配任何字母字符。
5. 匹配特殊字符:例如要查找包含 . 特点
示例 1:名称来自 where name '.'; (写错)这不是预期的输出。 。 匹配任何字符,因此将检索每一行。
要匹配特殊字符,必须使用 \\ 作为前导字符。 \\- 表示搜索-,\\. 意味着搜索。
示例 2:名称来自 name '\\.' (正确书写)
这种处理称为转义,正则表达式中所有具有特殊含义的字符都必须以这种方式转义。 这包括 。 | [] 和迄今为止使用的其他特殊字符。
6. \\还可以用来引用元字符(有特殊含义的字符)
(1)\\f页面变化
(2)\\n换行符
(3)\\r输入
(4)\\t制表
(5)\\v垂直制表
特别:要匹配反斜杠(\)字符本身,需要使用\\\
7. 匹配多个实例
(1)*0 或更多匹配项
(2) +1 或更多匹配项(等于 {1,})
(3)? 0 或 1 个匹配项(等于 {0, 1})
(4) {n}指定匹配次数
(5) {n,}不少于指定的匹配次数
(6) {n,m}匹配号码范围(m不超过255)
第 10 章:创建计算字段
1.计算字段实际上并不存在于数据库表中。 计算字段是在运行时在语句内创建的。
2. Field与()的含义基本相同,经常互换使用。 不过,数据库列一般称为列,术语“字段”通常与计算字段结合使用。
3. ():将值连接在一起形成单个值。 在MySQL语句中,可以使用()函数来拼接两列。
示例 1: (name,'(','id,')') from ;
(1)()拼接字符串,即将多个字符串连接起来,形成一个较长的字符串。 () 需要一个或多个指定字符串,以逗号分隔。
4、删除左右空格,两端创建空格:除了RTrim()(去掉字符串右边的空格)之外,MySQL还支持LTrim()(去掉字符串左边的空格) ) 和 Trim() (删除字符串左右两侧的空格)。 )。
示例: (rtrim(姓名),'(',rtrim(年龄),')')from ;
注意:大多数 DBMS 使用 + 或 || 来实现拼接,而MySQL则使用()函数。 将 SQL 语句转换为 MySQL 语句时,请务必牢记这一区别。
5.使用别名:as
示例:(name,id) 作为标题;
该语句本身与之前使用的相同,只是计算字段后面跟着文本 AS 标题。 它指示 SQL 创建一个名为 title 的计算字段,其中包含指定的计算。 从输出中可以看到,结果与之前相同,但现在该列被命名为 title,
任何客户端应用程序都可以按名称引用此列,就好像它是实际的表列一样。
别名的其他用途:常见用途包括当实际表列名包含非法字符(如空格)时重命名、当原名不明确或容易被误解时扩展原名等。
6. 进行算术计算:
示例:,价格,,*订单价格; 输出中的列是一个计算字段,这个计算是*。 客户端应用程序现在可以像任何其他列一样使用这个新的计算列。
7. MySQL支持基本算术运算符:
(1)+:添加
(2)-:减号
(3)*: 乘法
(4)/:除法
第 11 章:使用数据处理函数
1. 大多数 SQL 实现支持以下类型的函数:
(1) 用于处理文本字符串的文本函数(例如删除或填充值、将值转换为大写或小写)。
(2)数值函数,用于对数值数据进行算术运算(例如返回绝对值和进行代数运算)。
(3) 日期和时间函数,用于处理日期和时间值并从这些值中提取特定成分(例如,返回两个日期之间的差异、检查日期有效性等)。
(4) 返回 DBMS 使用的特殊信息的系统函数(例如返回用户登录信息、检查版本详细信息)。
2.文本处理功能
(1)Upper():将文本转换为大写
示例:name,upper(name) 按名称排序; 将名称中的所有小写字母转换为大写
(2)Lower():将文本转换为小写
示例:name, lower(name) as from order by name; 将名称中的所有大写字母转换为小写
(3)Left():返回字符串左侧的字符。 该函数有两个参数。 第一个参数是字符串,第二个参数是字符串的长度。 字符串的长度为2,所以从字符串的左侧截取两个字符串并返回。
示例: id,left(,2) 来自 ;
(4) Right():返回字符串右侧的字符。 该函数有两个参数。 第一个参数是字符串,第二个参数是字符串的长度。 字符串长度为2,所以从字符串右侧截取两个字符串并返回。
示例: id,right(,2) from;
(5)():返回字符串的长度
示例:() 来自 ;
(6) ():查找一个字符串的子串,并返回一个字符串在另一个字符串中第一次出现的位置。 如果没有找到,则返回0
示例:(13,) 来自 id=1;
id=1字段的内容是2138,13的起始位置是2。如果要查找130,则会返回0(因为130不存在)。
(7) LTrim():去除字符串左侧的空格
(8) RTrim():去除字符串右侧的空格
(9)():字符串截取函数。 该函数有点类似于 Left() 和 Right() 函数。 它们都可以截取字符串,但功能更强大。
示例 1: id,(,3) 来自; 从第 N 个字符串截取
例2: id,(,3,2) from ;从第N个字符开始,截取M个字符。
(10):可以将一个单词的读音转换成一个读音相近的单词。 简单来说,就是把方言转换成普通话。
示例:* from where ()=('lie');
记录的值为lee,但方言用户输入了lie。 Lie不等于lee,而是()=('lie')。 因为lie和lee的发音很相似,它们的值也匹配,所以where副标题语句正确地过滤出了所需的数据。
3.日期时间处理函数
(1)() 添加日期(日、周等)
(2)() 添加时间(小时、分钟等)
(3)() 返回当前日期
(4)() 返回当前时间
(5)Date()返回日期和时间的日期部分
(6)() 计算两个日期之间的差异
(7)()高度灵活的日期运算功能
(8)() 返回格式化的日期或时间字符串
(9)Day() 返回日期的天数
(10)() 对于日期,返回对应的星期几
(11) Hour() 返回时间的小时部分
(12)() 返回时间的分钟部分
(13)Month() 返回日期的月份部分
(14)Now()返回当前日期和时间
(15)() 返回时间的秒部分
(16) Time() 返回日期和时间的时间部分
(17) Year() 返回日期的年份部分
注意:MySQL使用的日期格式,每当指定日期时,无论是插入或更新表值还是使用WHERE子句过滤,日期都必须采用yyyy-mm-dd格式。