MySQL 正则表达式通常是在检索数据库记录的时候,根据指定的匹配模式匹配记录中符合要求的特殊字符串
MySQL 的正则表达式使用 REGEXP 这个关键字来指定正则表达式的匹配模式,REGEXP 操作符所支持的匹配模式如表所示
实例
select id,name from www where name regexp '^li'; ##查询以li开头的学生信息
select id,name from www where name regexp 'i$'; ##查询以i结尾的的学生信息
select id,name from www where name regexp 'an'; ##查询名字中包含an的学生信息
字符串是一个整体
select id,name from www where name regexp 'an|ei'; ##查询名字包含an或者ei
select id,name from www where name regexp 'sag*'; ##查询名字中有sa,g可有可无的学生信息
必须要有的部分是'an' 而'g'可有可无
select id,name from www where name regexp 'ang+'; ##查询名字中含有an,g至少出现一次的学生信息
select id,name from www where name regexp '^[s-x]'; ##查询名字以s-x开头的学生信息
select id,name from www where name regexp '[^wangwu]'; ##查询名字不是wangwu的学生信息
select id,name from www where name regexp '^[^czx]'; ##查询学生名字不以czx各字母开头的学生信息
以 SELECT 命令来实现最基础的加减乘除运算,MySQL 支持使用的算术运算符
如表所示
在除法运算和求余数运算中,除数不能为 0,若除数是 0,返回的结果则为 NULL
需要注意的是,如果有多个运算符,按照先乘除后加减的优先级进行运算,相同优先级的运算符没有先后顺序
实例
create table qq as select 1+2,2-1,3*2,4/2,5%2;
select * from qq;
比较运算符是查询数据记录时经常使用的一类运算符
通过使用比较运算符可以判断出表中有哪些记录是符合条件的,如果比较的结果(以布尔值的方式进行返回判断)为真则返回1,如果为假则返回0,比较的结果如果不确定则返回NULL
其中字符串在进行比较的时候默认是不区分大小写的,如果要区分大小写可以通过binary关键字来实现
是用来判断数字、字符串和表达式是否相等的,如果相等则返回1,如果不相等则返回0。如果比较的两者有一个值是NULL, 则比较的结果就是NULL
其中字符的比较是根据ASCII 码来判断的,如果ASCII码相等,则表示两个字符相同;如果ASCII 码不相等,则表示两个字符不相同
例如:字符串(字母)比较:
(‘a’>‘b’)其实比较的就是底层的ASCII码
需要关注的是ascii码有: a、A、0 (97、65、48 )
如果比较的是多字符串,如: ‘abc’=‘acb’,如何比较(字符个数、字符顺序)
与linux返回值表达相反,linux中运行正常返回值是0,运行异常返回值是非0
select 'bb'>'b'; ##仍旧是比较第一位b与b
select 'abc'<>'cba',2<>2,3!=2,null<>null;
select 5>4,3<4,'a'<'b',4.4<5,'u'>=null;
select 2 is null,'a' is not null,null is null;
select 6 between 5 and 7,'c' between 'a' and 'b'; ##判断6是否在5和7之间,c是否a和b之间
select 3 between 2 and 3;
select least(1,2,3),greatest(1,2,3),least('a','b','c'),greatest('a','b','c');
select least (1,'a','b'),greatest(1,'a','b');
select 3 in(1,2,3),1 not in(1,2,3);
select 'abc' like 'ab%','abc' like 'a_c','abc' not like 'abc';
逻辑运算符又被称为布尔运算符,通常用来判断表达式的真假,如果为真返回 1,否则 返回 0,真和假也可以用 TRUE 和 FALSE 表示
MySQL 中支持使用的逻辑运算符有四种, 具体如表所示:
select not 0,!3,!null;
select 3 and 4,null and 5,0 && null,6 && 0;
由结果可以看出
and和&&的作用相同
3 and 4 :没有0或null,返回值为1
null and 5:有null,返回值null
0 && null:返回值为0
6 && 0:中有0,返回值为0
select 3 or 4,null or 5,0 or null,6 or 0,0 or 0;
select 0 or null or 2;
select 0 xor 0,0 xor 5,3 xor 4,3 xor null;
位运算符实际上是对二进制数进行计算的运算符
MySQL 内位运算会先将操作数变成二进制格式(1010 1111),然后进行位运算,最后在将计算结果从二进制变回到十进制格式,方便用户查看
MySQL 支持 6 种位运算符,具体如表所示:
实例:
select 10 & 15,10 | 15,10^15,5 &~1;
具体过程:
10 转换为二进制数是 1010, 15 转换为二进制数是 1111
以上不管哪种运算符,在使用过程中都有优先级问题。运算符的优先级决定了不同的运算符在计算过程中的先后顺序
级别高的运算符会先进行计算,如果运算符的级别相同, MySQL 会按照顺序从左到右依次进行计算
优先级如下表所示
MySQL的连接查询,通常都是将来自两个或多个表的记录行结合起来,基于这些表之间的共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择性的连接到选定的主表结果集上。使用较多的连接查询包括:内连接、左连接和右连接
select 左表 left join 右表信息
select 左表 right join 右表信息
MySQL 中的内连接就是两张或多张表中同时符合某种条件的数据记录的组合
通常在 FROM 子句中使用关键字 INNER JOIN 来连接多张表,并使用 ON 子句设置连接条件,内连接是系统默认的表连接,所以在 FROM 子句后可以省略 INNER 关键字,只使用 关键字 JOIN
同时有多个表时,也可以连续使用 INNER JOIN 来实现多表的内连接,不过为了更好的性能,建议最好不要超过三个表
简而言之:内连查询:通过inner join 的方式将两张表指定的相同字段的记录行输出出来
SELECT column_name(s)FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
实例
create table biao(name varchar(20),score decimal(4,2),address varchar(40));
insert into biao values('wangwu',80,'beijing'),('zhangsan',90,'shanghanghai'),('tianqi',79,'xian');
select www.id,www.name from www inner join biao on www.name=biao..name; 查询id、name字段,条件是www和biao中name字段值相同
左连接也可以被称为左外连接,在 FROM 子句中使用 LEFT JOIN 或者 LEFT OUTER JOIN 关键字来表示
左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行。
实例:
select * from www left join biao on www.name=biao.name; ##join左表的www表作为主表全部显示出来,右表biao只会显示符合搜索条件的记录,右表记录不足的地方均为NULL
右连接也被称为右外连接,在 FROM 子句中使用 RIGHT JOIN 或者 RIGHT OUTER JOIN 关键字来表示。右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配
实例:
select * from www right join biao on www.name=biao.name; ##join右边的biao表作为主表全部显示出来,左表www只会显示符合搜索条件的记录,坐表记录不足的地方均为NULL