SQL SELECT 语句
---------------------------------------------------------------------------------------------------------------------------------------------------
SELECT 语句用于从表中选取数据。表格式的结构被存储在一个结果表中(称为结果集)。
语法
SELECT column_name(s) FROM table_name
注释:SQL语句对大小写不敏感。SELECT等效于select。
SQL SELECT 实例
如需获取名为"LastName"和"FirstName"的列的内容,(从名为"Persons"的数据库表),请使用类似这样的SELECT语句:
SELECT LastName,FirstName FROM Persons
"Persons" 表:
LastName | FirstName | Address | City |
---|---|---|---|
Hansen | Ola | Timoteivn 10 | Sandnes |
Svendson | Tove | Borgvn 23 | Sandnes |
Pettersen | Kari | Storgt 20 | Stavanger |
结果:
LastName | FirstName |
---|---|
Hansen | Ola |
Svendson | Tove |
Pettersen | Kari |
获取所有的列
如需从"Persons"表中获取所有的列,请使用符号*取代列的名称,就像这样:
SELECT * FROM Persons
结果:
LastName | FirstName | Address | City |
---|---|---|---|
Hansen | Ola | Timoteivn 10 | Sandnes |
Svendson | Tove | Borgvn 23 | Sandnes |
Pettersen | Kari | Storgt 20 | Stavanger |
结果集(result-set)
由SQL查询程序获得的结果被存储在一个结果集中。大多数数据库软件系统都允许使用编程函数在结果集中进行导航,比如:Move-To-First-Record、Get-Record-Content、Move-To-Next-Record等等。
类似这些的编程函数不在本教程讲解之列。如需学习通过函数调用访问数据的知识,请访问我们的ADO教程。
在SQL语句后使用分号?
分号是数据库系统中分隔每条SQL语句的标准方法,这个方法使得对服务器的同一个调用中的若干语句都得到执行。
某些SQL轿车使用分号结束每条SQL语句。这是必需的吗?如果您正在使用Access 和SQL Server 2000,就不必在每条语句后都放置分号,但是在某些数据库中,您就不得不这么做了。
SELECT DISTINCT 语句
关键词DISTINCT用于返回仅为不同的值。
SELECT语句会从表的列中返回信息。但是假如我们仅仅希望获取独特的(不同的)元素呢?
通过SQL,我们所要做到所有事情就是向SELECT语句添加DISTINCT关键词:
语法:
SELECT DISTINCT column_name(s) FROM table_name
使用DISTINCT关键词
如果要从"Company"列中选取所有的值,我们需要使用SELECT语句:
SELECT Company FROM Orders
"Orders"表:
Company | OrderNumber |
---|---|
Sega | 3412 |
W3School | 2312 |
Trio | 4678 |
W3School | 6798 |
结果:
请注意,在结果集中,W3School被列出了两次。
如需从Company"列中仅选取不一样的值,我们需要使用SELECT DISTINCT语句:
SELECT DISTINCT Company FROM Orders
结果:
Company |
---|
Sega |
W3Schools |
Trio |
现在,在结果集中,"W3School"仅被列出了一次。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
WHERE 子句
WHERE 子句用于规定选择的标准。
WHERE 子句
如需有条件地从表中选取数据,可将 WHERE 子句添加到SELECT语句。
语法
SELECT column FROM table WHERE column operator value
下面的运算符可在 WHERE 子句中使用:
操作符 | 描述 |
---|---|
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
注释:在某些版本的SQL中,操作符<>可以写为!=。
使用WHERE子句
如果只需选取居住于城市"Sandnes"中的某些人,我们需要向SELECT语句添加WHERE子句:
SELECT * FROM Persons WHERE City='Sandnes'
"Persons" 表
LastName | FirstName | Address | City | Year |
---|---|---|---|---|
Hansen | Ola | Timoteivn 10 | Sandnes | 1951 |
Svendson | Tove | Borgvn 23 | Sandnes | 1978 |
Svendson | Stale | Kaivn 18 | Sandnes | 1980 |
Pettersen | Kari | Storgt 20 | Stavanger | 1960 |
结果:
LastName | FirstName | Address | City | Year |
---|---|---|---|---|
Hansen | Ola | Timoteivn 10 | Sandnes | 1951 |
Svendson | Tove | Borgvn 23 | Sandnes | 1978 |
Svendson | Stale | Kaivn 18 | Sandnes | 1980 |
引号的使用
请注意,我们在例子中的条件值周围使用的是单引号。
SQL使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。
文本值:
这是正确的: SELECT * FROM Persons WHERE FirstName='Tove' 这是错误的: SELECT * FROM Persons WHERE FirstName=Tove
数值:
这是正确的: SELECT * FROM Persons WHERE Year>1965 这是错误的: SELECT * FROM Persons WHERE Year>'1965'
LIKE 条件
LIKE用于规定针对列中某个模式的搜索。
语法
SELECT column FROM table WHERE column LIKE pattern
符号"%"可用于定义模式之前及模式之后的通配符(模式中缺少的字符)。
使用LIKE
下面的语句会返回名字的第一个字符为'O'的人:
SELECT * FROM Persons WHERE FirstName LIKE 'O%'
下面的语句会返回名字的最后一个字符为'a'的人:
SELECT * FROM Persons WHERE FirstName LIKE '%a'
下面的语句会返回名字中包含字符'la'的人:
SELECT * FROM Persons WHERE FirstName LIKE '%la%'
--------------------------------------------------------------------------------------------------
INSERT INTO 语句
INSERT INTO 语句用于向表格中插入新的行。
语法
INSERT INTO table_name VALUES (value1, value2,....)我们也可以指定所要插入数据的列:
INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,....)插入新的行
"Persons" 表:
LastName FirstName Address City Pettersen Kari Storgt 20 Stavanger SQL 语句:
INSERT INTO Persons VALUES ('Hetland', 'Camilla', 'Hagabakka 24', 'Sandnes')结果:
LastName FirstName Address City Pettersen Kari Storgt 20 Stavanger Hetland Camilla Hagabakka 24 Sandnes 在指定的列中插入数据
"Persons" 表:
LastName FirstName Address City Pettersen Kari Storgt 20 Stavanger Hetland Camilla Hagabakka 24 Sandnes SQL 语句:
INSERT INTO Persons (LastName, Address) VALUES ('Rasmussen', 'Storgt 67')结果:
LastName FirstName Address City Pettersen Kari Storgt 20 Stavanger Hetland Camilla Hagabakka 24 Sandnes Rasmussen Storgt 67 -----------------------------------------------------------------------------------------------Update 语句
Update 语句用于修改表中的数据。
语法:
UPDATE table_name SET column_name = new_value WHERE column_name = some_valuePerson:
LastName FirstName Address City Nilsen Fred Kirkegt 56 Stavanger Rasmussen Storgt 67 更新某一行中的一个列
我们为last name是"Rasmussen"的人添加first name:
UPDATE Person SET FirstName = 'Nina' WHERE LastName = 'Rasmussen'结果:
LastName FirstName Address City Nilsen Fred Kirkegt 56 Stavanger Rasmussen Nina Storgt 67 更新某一行中的若干列
我们会修改地址(address),并添加城市名称(name of the city):
UPDATE Person SET Address = 'Stien 12', City = 'Stavanger' WHERE LastName = 'Rasmussen'结果:
LastName FirstName Address City Nilsen Fred Kirkegt 56 Stavanger Rasmussen Nina Stien 12 Stavanger -----------------------------------------------------------------------------------------DELETE 语句
DELETE 语句用于删除表中的行。
语法
DELETE FROM table_name WHERE column_name = some_valuePerson:
LastName FirstName Address City Nilsen Fred Kirkegt 56 Stavanger Rasmussen Nina Stien 12 Stavanger 删除某行
"Nina Rasmussen"会被删除:
DELETE FROM Person WHERE LastName = 'Rasmussen'结果:
LastName FirstName Address City Nilsen Fred Kirkegt 56 Stavanger 删除所有行
可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_nameorDELETE * FROM table_name