结构化查询语言(SQL)是一个非常强大的工具,它包含了很多特性。一旦您掌握了最重要的SQL命令,您就可以开始对SQL有更多的创造性了。今天我将向您展示有关SQL连接字符串的所有需要了解的内容。
有许多不同的SQL方言。对于所有这些示例,我使用的是PostgreSQL变体。
连接意味着把两个东西连接在一起。您可能在编程语言中使用它将两个字符串连接在一起。也许您有一个名字和姓氏变量,作为全名变量连接在一起。
串联是将两个字符串组合成一个字符串的非常有用的方法。PHP使用句号将字符串连接在一起,而JavaScript和jQuery使用加号。
SQL中的串联工作原理完全相同。你用一个特殊的运算符把两件事合并成一件事。下面是一个伪代码示例:
first_name = Joelast_name = Coburnwhole_name = first_name + last_name在编程语言中,串联使代码更易于阅读。如果您的代码总是需要访问两个字符串,那么将它们组合成一个字符串可以更容易记住,并减少代码的长度。
虽然SQL中的变量不太常见(但仍在使用),但仍然需要连接来返回组合结果或操作数据。
连接在SQL中非常容易。虽然SQL是一种公共语言,但各个数据库引擎以不同的方式实现特性。虽然所有这些示例都是用PostgreSQL方言编写的,但只要在web上搜索“Concatenate<;YOUR\DATABASE\u ENGINE>;”就可以很容易地翻译成其他变体。不同的引擎可能有不同的语法来进行连接,但原理是一样的。
回到我们的name示例,下面是一个基本的select查询:
SELECT first_name, last_name, email FROM users_table这里没有什么复杂的东西,所以让我们加入串联:
SELECT first_name || last_name AS full_name, email FROM users_table正如您所看到的,这种连接工作得很好,但是有一个小问题。结果的全名已经完全按照两列的乘积缝合在一起——名称之间应该有一个空格!
幸运的是,它很容易修复:只需在两者之间的一个空间进行连接:
SELECT first_name || ' ' || last_name AS full_name, email FROM users_table这些都是基本的例子,但是你应该看看串联是如何工作的——真的很简单!管道运算符(|)在子句之间使用了两次。您的SQL引擎知道,此符号前后的每个部分都应该连接在一起并视为一个。但是要小心,如果您使用concat运算符但不连接任何内容,您将得到一个错误。
如上所述,这些示例使用SQL的PostgreSQL变体。其他变体可能使用不同的运算符,甚至需要调用的特殊函数。如果以数据库引擎所期望的方式连接字符串,那么如何连接字符串实际上并不重要。
既然您已经了解了基础知识,那么让我们来看看一些深入的示例,以及一些常见的陷阱。
大多数数据库引擎将成功地合并字符串和整数,甚至日期。在尝试连接复杂类型(如数组)时,通常会遇到问题:
SELECT first_name || ' ' || last_name || ARRAY[123, 456] AS full_name, email FROM users_table此代码将不起作用。无法将字符串与数组等复杂对象组合。如果你考虑你需要做什么,你通常可以写简单的代码,而不是复杂的,疯狂的代码无法运行。
如果您已经仔细考虑了需要做什么,但仍然无法让SQL正常工作,那么您是否考虑过使用编程语言?作为一个处理遗留代码的软件开发人员,我知道调试SQL的痛苦,因为有人在SQL中塞进了太多的逻辑,这是一个奇迹——如果你试图用SQL编写逻辑,那么就改用编程语言(有很多容易学的语言)。
串联对于where语句也非常有效:
SELECT first_name, last_name, email FROM users_table WHERE date_of_birth = ('DAY' || '/' || 'MONTH' || '/' || 'YEAR')::date这里发生了一些事情。在本例中,DAY、MONTH和YEAR是从脚本传入的参数。可能是代码生成的,或者是用户输入的。它们连接在一起,然后转换为日期类型(使用PostgreSQL转换为日期语法::date)。
通过这种方式使用串联,可以将日期的各个部分链接在一起,然后可以将其作为“真实”日期处理,而不是字符串。不要忘记,这个基本示例并不能防止SQL注入,所以不要在没有修改的情况下在任何生产代码中使用它。
另一个要注意的陷阱是空值(空字符串是空的或不存在的字符串)。给出这个问题:
SELECT first_name || ' ' || NULL AS full_name, email FROM users_table此查询以静默方式失败。这是由于连接是在数据库引擎上进行内部编码的方式造成的。你可能不会经常遇到这个问题,但这是很常见的事情。
如果您认为查询返回的数据可能为空,则需要使用coalesce。Coalesce大致可以被认为是“如果它为null,则用另一个字符串或列替换它”:
SELECT first_name || ' ' || COALESCE(NULL, 'ERROR NULL DATA') AS full_name, email FROM users_table现在您知道如何在SQL中使用连接,您将如何处理它?你会建立一个网站,并用SQL使之活跃起来吗?或者你可能需要一个静态站点生成器来更简单地构建网站。
无论你做什么,请在下面的评论中告诉我们!
...大多数应用程序连接到数据库通常只涉及一个特定的连接字符串,因此使用一个数据库服务器测试应用程序,然后将其切换到“生产”服务器非常简单。 ...
...取消注释第一个并保存更改。默认情况下,SQL Server连接字符串设置为使用具有可信身份验证的本地计算机。根据您的环境,您可能需要更改这些连接设置。 这个ASP.NET唤醒Lan包包含SQL数据库创建脚本,用于SQL Server上的安装程序...
...。语句不能转义SQL注入,因为我们在JDBC中使用连接的SQL字符串。 报表与准备报表:比较图 总结 - jdbc语句的构造(of jdbc statement) vs. 编制报表(preparedstatement) JDBC语句和PreparedStatement接口定义了从SQL数据库发送和接收数据的方法和...
...数据类型。它描述了它可以存储的数据类型。程序员可以使用这些数据类型来创建表。 简而言之,varchar是一种数据类型,它描述一组长度不确定的字符数据。varchar数据类型的列可以保存字母和数字。它可以将数据保存到一定...
...许用户创建数据库并在数据库的表中排列数据。用户可以使用结构化查询语言来操作数据。SQL实例是sqlserver.exe可执行文件的副本。它是SQL server的安装。SQL server实例有两种类型:默认实例和命名实例。安装SQL server时,会出现“...
...行事务、编写存储过程、视图、索引等等。有各种数字、字符串、日期函数。此外,还有聚合函数对一组值执行操作。 sql语句(sql)和tsql公司(tsql)的区别 定义 SQL是一种用于编程的特定于域的语言,用于管理关系数据库管理系统中...
... 什么是烧焦(char)? char是一种有助于存储固定长度数据或字符串的数据类型。语法是char[n]。这里,n表示以字节为单位的字符串长度。因此,此数据类型可以存储固定长度的值。如果长度小于定义的大小,其余部分将填充空格字...
...教授的编程语言是SQL。程序员用它来存储不同长度的数据字符串。两种常用的数据类型是“char”和“varchar”。烧焦(char) vs. 瓦尔查尔(varchar)Char和Varchar的区别在于Char只存储固定长度的单字符串数据类型,而Varchar存储不同字符串...
...erver中的非空约束指定列不能包含空值。 Null与零或零字符串不同。Null表示未进行任何输入。 在数据库列上创建新的NOTNULL约束时,SQL Server会检查该列的当前内容中是否存在任何空值。如果列当前包含空值,则约束创建失败...