在这篇文章中,我们将学习如何写出列名中带有空格的SQL查询。空格在数据库对象的名称和表的列名的命名规则中受到限制。如果你想在对象名或列名中加入空格,查询和应用代码必须以不同的方式编写。在编写动态SQL查询时,你必须小心和精确。本文解释了我们如何在SQL Server和MySQL中处理带有空白的对象名称和列。
在SQL Server中,我们可以在方括号或小括号中指定带有空格的列名。让我们通过一些例子来理解这个概念。
假设我们想创建一个名为 雇员表.我们创建以下查询来创建该表。
- use DemoDatabase
- go
- create table Employee Table
- (
- Employee_ID int,
- first_name varchar(50),
- first_name varchar(50),
- Dept_id int,
- grade char(5)
- )
- 复制代码
当我们执行该查询时,我们将收到以下错误。
Msg 156, Level 15, State 1, Line 3 Incorrect syntax near the keyword ‘Table’.
为了解决这个错误,我们可以在方括号中指定表名。
- use DemoDatabase
- go
- create table [Employee Table]
- (
- Employee_ID int,
- first_name varchar(50),
- last_name varchar(50),
- Dept_id int,
- grade char(5)
- )
- 复制代码
另外,你也可以在双引号(")之间指定表名。
- use DemoDatabase
- go
- create table "Employee Table"
- (
- Employee_ID int,
- first_name varchar(50),
- last_name varchar(50),
- Dept_id int,
- grade char(5)
- )
- 复制代码
假设我们想创建一个名为 tblCountries.该表有两列,分别为国家代码和国家名称。下面是创建表的语句。
- create table tblCountries
- (
- Country code varchar(15),
- Country Name varchar(15)
- )
- 复制代码
为了解决这个错误,我们必须在方括号中指定列名。
- use DemoDatabase
- go
- create table tblCountries
- (
- [Country code] varchar(15),
- [Country Name] varchar(15)
- )
- 复制代码
或者,你也可以在双引号(")之间指定列名。
- use DemoDatabase
- go
- create table tblCountries
- (
- "Country code" varchar(15),
- "Country Name" varchar(15)
- )
- 复制代码
你可以使用方括号来填充名称中带有空格的列。假设我们想从tblCountries表中获得国家代码和国家名称列。
- use DemoDatabase
- go
- select country code, country name
- from tblCountries
- 复制代码
SELECT语句返回一个错误。
- Msg 207, Level 16, State 1, Line 2
-
- Invalid column name ‘country’.
-
- Msg 207, Level 16, State 1, Line 3
-
- Invalid column name ‘country’.
- 复制代码
我们必须在方括号或双引号中指定列。查询应该写成如下。
- use DemoDatabase
- go
- /*Query with square bracket*/
- select [country code], [country name]
- from tblCountries
- Go
- /*Query with double quotes*/
- select "country code", "country name"
- from tblCountries
- Go
- 复制代码
当我们运行INSERT、UPDATE和DELETE语句时,我们必须使用方括号或双引号来处理带有空格的列名。在下面的例子中,我在tblCountries中插入一些记录。该表有国家代码和国家名称两列。
- INSERT INTO tblcountries
-
- ([country code],
- [country name])
-
- VALUES ('AUS',
- 'Austrelia')
- 复制代码
假设我们想用UPDATE语句将国名从印度改为Bharat。
- UPDATE tblcountries
- SET [country name] = 'Bharat'
- WHERE [country name] = 'India'
- 复制代码
假设我们想用DELETE语句删除代码为AUS的国家。
- DELETE FROM tblcountries
- WHERE [country code] = 'AUS'
- 复制代码
现在,让我们了解如何在MySQL Server 8.0中编写列名中带有空格的SQL查询。
数据库对象名称中的空格
假设我们想创建一个名为电影列表的表。我们运行以下查询来创建该表
- create table film list
- (
- film_id int,
- title varchar(500),
- Certificate varchar(10),
- duration int,
- rental numeric(10,2)
- )
- 复制代码
当我们执行该查询时,我们将收到以下错误。
error 1064 (42000):你的SQL语法有误;请查看与你的MySQL服务器版本相对应的手册,了解在'list'附近使用的正确语法。
为了解决这个错误,我们可以在后缀中指定表名(`)。CREATE TABLE语句可以写成以下样子。
- create table `film list`
- (
- film_id int,
- title varchar(500),
- Certificate varchar(10),
- duration int,
- rental numeric(10,2)
- )
- 复制代码
假设我们想创建一个名为 tblmultiplex.该表有两列,分别为多路影院名称和影院总屏幕。下面是创建表的语句。
- create table tblmultiplex
- (
- ID int,
- Multiplex name varchar(500),
- Total Cinema screen int,
- Address varchar(500),
- CityID int
- )
- 复制代码
当我们执行查询时,我们会遇到以下错误。
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘name varchar(500),
为了解决这个错误,我们可以使用反斜线。创建表的语句应该写成以下样子。
- create table tblmultiplex
- (
- ID int,
- `Multiplex name` varchar(500),
- `Total Cinema screen` int,
- Address varchar(500),
- CityID int
- )
- 复制代码
你可以使用反符号来填充名称中带有空格的列。假设我们想从tblmultiplex表中填入复式影院名称和总影院屏幕列。
select multiple name, Total Cinema Screen from tblmultiplex
我们将遇到以下错误。
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘screen from tblmultiplex’ at line 1
让我们使用反斜线来写SELECT查询。它应该写成以下样子。
- select `multiple name`, `Total Cinema Screen` from tblmultiplex
- 复制代码
正如你所看到的,该查询被成功执行。
当我们在MySQL服务器上运行INSERT、UPDATE和DELETE语句时,我们必须使用背号来处理带有空格的列名。在下面的例子中,我在tblmultiplex表中插入一些记录。该表有多路电视名称和总电影屏幕列。
- insert into tblmultiplex (ID, `multiplex name`, `Total cinema screen`, address, CityID )
- values
- (2,'Big Cinema Inc',3,'Ashram Road', 1);
-
- insert into tblmultiplex (ID, `multiplex name`, `Total cinema screen`, address, CityID )
- values
- (3,'Wide Angal Mehsana',3,'Near Balaji township', 2);
- 复制代码
假设我们想用UPDATE语句将多厅影院的名称从Big Cinema Inc改为Cinemax。
- UPDATE tblmultiplex
- SET `multiplex name` = 'Cinemax'
- WHERE `multiplex name` = 'Big Cinema Inc'
- 复制代码
假设我们想用DELETE语句删除名称为PVR影院的多路影院的详细信息。
- delete from tblmultiplex where `multiplex name`='PVR Multiplex';
- 复制代码
在这篇文章中,我们学习了如何写一个列名中带有空格的SQL查询。我已经涵盖了以下内容。