首页 > 数据库 >MySQL

MySQL

时间:2022-12-11 23:24:18浏览次数:47  
标签:JOIN name MySQL 匹配 NULL SELECT

MySQL 连接的使用
在前几章节中,我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。
本章节我们将向大家介绍如何使用 MySQL 的 JOIN 在两个或多个表中查询数据。
你可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。
JOIN 按照功能大致分为如下三类:
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
本章节使用的数据库结构及数据下载:runoob-mysql-join-test.sql。

MySQL NULL 值处理
我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。
为了处理这种情况,MySQL提供了三大运算符:
IS NULL: 当列的值是 NULL,此运算符返回 true。
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
<=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。
关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 NULL,即 NULL = NULL 返回 NULL 。
MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。
注意:
select * , columnName1+ifnull(columnName2,0) from tableName;
columnName1,columnName2 为 int 型,当 columnName2 中,有值为 null 时,columnName1+columnName2=null, ifnull(columnName2,0) 把 columnName2 中 null 值转为 0。

MySQL 正则表达式
在前面的章节我们已经了解到MySQL可以通过 LIKE ...% 来进行模糊匹配。
MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表达式匹配。
如果您了解PHP或Perl,那么操作起来就非常简单,因为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 次。
实例
了解以上的正则需求后,我们就可以根据自己的需求来编写带有正则表达式的SQL语句。以下我们将列出几个小实例(表名:person_tbl )来加深我们的理解:
查找name字段中以'st'为开头的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
查找name字段中以'ok'为结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
查找name字段中包含'mar'字符串的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

标签:JOIN,name,MySQL,匹配,NULL,SELECT
From: https://www.cnblogs.com/xiaoguo-25/p/16974851.html

相关文章

  • windows下QT5.9连接MYSQL
    首先,按照教程尝试连接数据库:QSqlDatabase:availabledrivers:QSQLITEQMYSQLQMYSQL3QODBCQODBC3QPSQLQPSQL7连接失败意思大概就是:“QMYSQL驱动加载失败”......
  • 《MySQL必知必会》之快速入门游标和触发器
    第二十四章使用游标本章将介绍什么是游标以及如何使用游标游标之前的select语句检索出来的数据,没有办法得到第一行或者下一行有时,需要在检索出来的行中前进或后退一行......
  • 静态文件相关配置、request请求方法、pycharm连接MySQL、orm
    静态文件相关配置、request请求方法、pycharm连接MySQL、orm风得意马蹄疾,一日看尽长安花一、静态文件相关配置1.编写一个登录功能1.创建一个django项目并创建一个app......
  • mysql安装
    1.要看linux中有没有安装,如果有就删除rpm-qa|grepmysqlrpm-qa|grepmariadb  (自带的会和mysql冲突)rpm-e--nodeps 软件名称    (卸载软件)2.安装r......
  • 0:数据库的产生-MySQL
    (目录)0.1什么是数据库database数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据0.2抛出问题,数据库的产生数据的存储(瞬时-->稳定)在......
  • SQLyog连接MYSQL时报错 Client does not support authentication protocol requested
    之前安装MYSQL8.0的时候安装的是绿色版,在cmd中配置完所有参数之后,在连接SQLyog的时候却报出了以下错误翻译一下大致的意思为:客户端不支持服务器请求的身份验证协议;考虑......
  • Terraform to create an Azure Database for MySQL - Flexible Server
    TerraformtocreateanAzureDatabaseforMySQL-FlexibleServerhttps://learn.microsoft.com/en-us/azure/mysql/flexible-server/quickstart-create-terraform?tab......
  • 力扣181(MySQL)- 超过经理收入的员工(简单)
    题目:表:Employee 编写一个SQL查询来查找收入比经理高的员工。以 任意顺序 返回结果表。查询结果格式如下所示。示例1: 解题思路:一、【子查询】先通过子查询......
  • MySQL的redo与undo
    1.MySQL事务特性InnoDB是一个事务性的存储引擎,事务有4种特性:原子性、一致性、隔离性和持久性在事务中的操作,要么全部执行,要么全部不做,这就是事务的目的。事务的四种......
  • 【MySQL】【数据库】sql的null不能用等号
    LeetCode584.寻找用户推荐人直达给定表customer,里面保存了所有客户信息和他们的推荐人。idnamereferee_id1WillNULL2JaneNULL3Alex24Bil......