MySQL基础3

1、MySQL UNION 操作符

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

语法格式:
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

说明:

  • expression1, expression2, … expression_n: 要检索的列。
  • tables: 要检索的数据表。
  • WHERE conditions: 可选, 检索条件。
  • DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复+ 数据,所以 DISTINCT 修饰符对结果没啥影响。
  • ALL: 可选,返回所有结果集,包含重复数据。

2、MySQL 排序ORDER BY 子句

如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。

语法格式:
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
实例:

这里写图片描述

3、Mysql 连接的使用

在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。

JOIN 按照功能大致分为如下三类:
  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
    这里写图片描述
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
    这里写图片描述
  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
    这里写图片描述
    实例
本实例以food数据库中的food_tb1表和food_tb2表来演示。
food_tb1的内容:

这里写图片描述

food_t2的内容:

这里写图片描述

3.1 内连接。INNER JOIN(也可以省略 INNER 使用 JOIN,效果一样)
mysql> select a.* , b.* from food_tb1 a 
    ->INNER JOIN food_tb2 b 
    ->ON a.food_id=b.food_id;
结果:

这里写图片描述

3.2左连接。left join 或者left outer join(等同于left join)
mysql> select a.* , b.* from food_tb1 a 
    ->LEFT JOIN food_tb2 b 
    ->ON a.food_id=b.food_id;
结果:

这里写图片描述

3.3右连接。right join 或者right outer join(等同于right join)
mysql> select a.* , b.* from food_tb1 a 
    ->RIGHT JOIN food_tb2 b 
    ->ON a.food_id=b.food_id;
结果:

这里写图片描述

3.4外连接。full join (mysql不支持,但是可以用 left join union right join代替)
mysql> select a.* , b.* from food_tb1 a 
    ->LEFT JOIN food_tb2 b 
    ->ON a.food_id=b.food_id;
    ->union
    ->select a.* , b.* from food_tb1 a 
    ->RIGHT JOIN food_tb2 b 
    ->ON a.food_id=b.food_id;
结果:

这里写图片描述

3.5笛卡尔积。
mysql> select * from food_tb1 JOIN food_tb2 
结果:

这里写图片描述

4、MySQL NULL 值处理

MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。为了处理这种情况,MySQL提供了三大运算符:

  • IS NULL: 当列的值是 NULL,此运算符返回 true。
  • IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
  • <=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true。

5、MySQL 正则表达式

MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表达式匹配。

模式 描述
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。
匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。
. 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。
[…] 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。
[^…] 负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’。
p1|p2|p3 匹配 p1 或 p2 或 p3。例如,’z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 则匹配 “zood” 或 “food”。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。

实例:shop数据库种的shop_tbl表

查找name字段中以’st’为开头的所有数据:

mysql> SELECT name FROM shop_tbl WHERE name REGEXP '^st';

查找name字段中以’ok’为结尾的所有数据:

mysql> SELECT name FROM shop_tbl WHERE name REGEXP 'ok$';

查找name字段中包含’mar’字符串的所有数据:

mysql> SELECT name FROM shop_tbl WHERE name REGEXP 'mar';

查找name字段中以元音字符开头或以’ok’字符串结尾的所有数据:

mysql> SELECT name FROM shop_tbl WHERE name REGEXP '^[aeiou]|ok$';

猜你喜欢

转载自blog.csdn.net/ght886/article/details/80879567