目录
[SQL 简介](#SQL 简介)
[SQL 是什么](#SQL 是什么)
[SQL 能做什么](#SQL 能做什么)
[SQL 语法](#SQL 语法)
[SQL 语句](#SQL 语句)
[SQL 语句后面的分号](#SQL 语句后面的分号)
[一些最重要的 SQL 命令](#一些最重要的 SQL 命令)
[SQL SELECT 语句](#SQL SELECT 语句)
[SQL SELECT 语句](#SQL SELECT 语句)
[SELECT Column 实例](#SELECT Column 实例)
[SELECT * 实例](#SELECT * 实例)
[SQL SELECT DISTINCT 语句](#SQL SELECT DISTINCT 语句)
[SQL SELECT DISTINCT 语句](#SQL SELECT DISTINCT 语句)
[不使用 SELECT DISTINCT 实例](#不使用 SELECT DISTINCT 实例)
[使用 SELECT DISTINCT 实例](#使用 SELECT DISTINCT 实例)
[SQL WHERE 子句](#SQL WHERE 子句)
[SQL WHERE 子句](#SQL WHERE 子句)
[WHERE 子句实例](#WHERE 子句实例)
[文本字段 vs. 数值字段](#文本字段 vs. 数值字段)
[WHERE 子句中的运算符](#WHERE 子句中的运算符)
[SQL AND, OR, NOT 运算符](#SQL AND, OR, NOT 运算符)
[SQL AND, OR, NOT 运算符](#SQL AND, OR, NOT 运算符)
[AND 实例](#AND 实例)
[OR 实例](#OR 实例)
[NOT 实例](#NOT 实例)
[结合 AND, OR 和 NOT](#结合 AND, OR 和 NOT)
[SQL ORDER BY 关键词](#SQL ORDER BY 关键词)
[SQL ORDER BY 关键词](#SQL ORDER BY 关键词)
[ORDER BY 实例](#ORDER BY 实例)
[ORDER BY DESC 实例](#ORDER BY DESC 实例)
[ORDER BY 多列实例](#ORDER BY 多列实例)
[SQL INSERT INTO 语句](#SQL INSERT INTO 语句)
[SQL INSERT INTO 语句](#SQL INSERT INTO 语句)
[INSERT INTO 实例](#INSERT INTO 实例)
[SQL NULL 值](#SQL NULL 值)
[什么是 NULL 值](#什么是 NULL 值)
[IS NULL](#IS NULL)
[IS NOT NULL](#IS NOT NULL)
[SQL UPDATE 语句](#SQL UPDATE 语句)
[UPDATE 语句](#UPDATE 语句)
[UPDATE 实例](#UPDATE 实例)
[UPDATE 多行](#UPDATE 多行)
[Update 警告](#Update 警告)
SQL 简介
**SQL (Structured Query Language:结构化查询语言)**是用于管理关系数据库管理系统(RDBMS)。 SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。
SQL 是什么
- SQL 指结构化查询语言,全称是 Structured Query Language。
- SQL 让您可以访问和处理数据库,包括数据插入 、查询 、更新 和删除。
- SQL 在1986年成为 ANSI(American National Standards Institute 美国国家标准化组织)的一项标准,在 1987 年成为国际标准化组织(ISO)标准。
SQL 能做什么
- SQL 面向数据库执行查询
- SQL 可从数据库取回数据
- SQL 可在数据库中插入新的记录
- SQL 可更新数据库中的数据
- SQL 可从数据库删除记录
- SQL 可创建新数据库
- SQL 可在数据库中创建新表
- SQL 可在数据库中创建存储过程
- SQL 可在数据库中创建视图
- SQL 可以设置表、存储过程和视图的权限
SQL 语法
数据库表
一个数据库通常包含一个或多个表。每个表由一个名字标识(例如"客户"或者"订单")。表包含带有数据的记录(行)。
在本教程中,我们将使用著名的 Northwind 示例数据库(包括在 MS Access 和 MS SQL Server 中)。
以下是从"客户"表中选择的内容:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
上表包含五条记录(每个客户一条)和七列 (CustomerID, CustomerName, ContactName, Address, City, PostalCode, Country)。
SQL 语句
您需要在数据库上执行的大部分工作都由 SQL 语句完成。
下面的 SQL 语句从 "Customers" 表中选取所有记录:
【实例】
sql
SELECT * FROM Customers;
注意事项
- SQL 对大小写不敏感:SELECT 与 select 是相同的。
SQL 语句后面的分号
-
某些数据库系统要求在每条 SQL 语句的末端使用分号。
-
分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。
-
在本教程中,将在每条 SQL 语句的末端使用分号。
一些最重要的 SQL 命令
- SELECT - 从数据库中提取数据
- UPDATE - 更新数据库中的数据
- DELETE - 从数据库中删除数据
- INSERT INTO - 向数据库中插入新数据
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
SQL SELECT 语句
SQL SELECT 语句
SELECT 语句用于从数据库中选取数据。结果被存储在一个结果表中,称为记录集。
【SELECT 语法】
sql
SELECT column1, column2, ...
FROM table_name;
这里, column1, column2, ... 是要从中选择数据的表的字段名。如果要选择表中的所有可用字段,请使用以下语法:
sql
SELECT * FROM table_name;
演示数据库
以下是从演示数据库的"客户"表中选择的内容:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
SELECT Column 实例
以下 SQL 语句从 "Customers" 表中选择 "CustomerName" 和 "City" 列:
【实例】
sql
SELECT CustomerName, City FROM Customers;
SELECT * 实例
以下 SQL 语句从 "Customers" 表中选择所有列:
【实例】
sql
SELECT * FROM Customers;
SQL SELECT DISTINCT 语句
SQL SELECT DISTINCT 语句
SELECT DISTINCT 语句用于返回唯一不同的值。
在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
【SELECT DISTINCT 语法】
sql
SELECT DISTINCT column1, column2, ...
FROM table_name;
演示数据库
以下是从演示数据库的"客户"表中查询的内容:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
不使用 SELECT DISTINCT 实例
以下 SQL 语句从 "Customers" 表的 "Country" 列中选择所有(包括重复项)值:
【实例】
sql
SELECT Country FROM Customers;
使用 SELECT DISTINCT 实例
下面的 SQL 语句仅选择 "Customers" 表 "Country" 列中的不同值:
【实例】
sql
SELECT DISTINCT Country FROM Customers;
以下 SQL 语句列出了不同(不同)客户国家/地区的数量:
【实例】
sql
SELECT COUNT(DISTINCT Country) FROM Customers;
SQL WHERE 子句
SQL WHERE 子句
WHERE 子句用于过滤记录。
WHERE 子句用于提取那些满足指定条件的记录。
【WHERE 语法】
sql
SELECT column1, column2, ...
FROM table_name
WHERE condition;
注: WHERE 子句不仅用于 SELECT 语句,还用于 UPDATE、 DELETE 等语句。
演示数据库
以下是从演示数据库的"客户"表中查询的内容:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
WHERE 子句实例
以下 SQL 语句选择 "客户" 表中国家是 "墨西哥"的所有客户:
【实例】
sql
SELECT * FROM Customers
WHERE Country='Mexico';
文本字段 vs. 数值字段
SQL 要求在文本值周围使用单引号(大多数数据库系统也允许使用双引号)。
如果是数值字段,请不要使用引号。
【实例】
sql
SELECT * FROM Customers
WHERE CustomerID=1;
WHERE 子句中的运算符
下面的运算符可以在 WHERE 子句中使用:
运算符 | 描述 |
---|---|
= | 等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
<> | 不等于 (注: 在某些版本的 SQL 中,此运算符可以写成 !=) |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
IN | 指定针对某个列的多个可能值 |
SQL AND, OR, NOT 运算符
SQL AND, OR, NOT 运算符
WHERE 子句可以与 AND、 OR 和 NOT 运算符组合使用。
AND 和 OR 运算符用于根据多个条件筛选记录:
- 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
- 如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
如果条件不正确,NOT 操作符将显示一条记录。
【AND 语法】
sql
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
【OR 语法】
sql
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
【NOT 语法】
sql
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;
演示数据库
下表显示了样本数据库中完整的客户(Customers) 表:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
6 | Blauer See Delikatessen | Hanna Moos | Forsterstr. 57 | Mannheim | 68306 | Germany |
7 | Blondel père et fils | Frédérique Citeaux | 24, place Kléber | Strasbourg | 67000 | France |
8 | Bólido Comidas preparadas | Martín Sommer | C/ Araquil, 67 | Madrid | 28023 | Spain |
9 | Bon app' | Laurence Lebihans | 12, rue des Bouchers | Marseille | 13008 | France |
10 | Bottom-Dollar Marketse | Elizabeth Lincoln | 23 Tsawassen Blvd. | Tsawassen | T2F 8M4 | Canada |
11 | B's Beverages | Victoria Ashworth | Fauntleroy Circus | London | EC2 5NT | UK |
12 | Cactus Comidas para llevar | Patricio Simpson | Cerrito 333 | Buenos Aires | 1010 | Argentina |
13 | Centro comercial Moctezuma | Francisco Chang | Sierras de Granada 9993 | México D.F. | 05022 | Mexico |
14 | Chop-suey Chinese | Yang Wang | Hauptstr. 29 | Bern | 3012 | Switzerland |
15 | Comércio Mineiro | Pedro Afonso | Av. dos Lusíadas, 23 | São Paulo | 05432-043 | Brazil |
16 | Consolidated Holdings | Elizabeth Brown | Berkeley Gardens 12 Brewery | London | WX1 6LT | UK |
17 | Drachenblut Delikatessend | Sven Ottlieb | Walserweg 21 | Aachen | 52066 | Germany |
18 | Du monde entier | Janine Labrune | 67, rue des Cinquante Otages | Nantes | 44000 | France |
19 | Eastern Connection | Ann Devon | 35 King George | London | WX3 6FW | UK |
20 | Ernst Handel | Roland Mendel | Kirchgasse 6 | Graz | 8010 | Austria |
21 | Familia Arquibaldo | Aria Cruz | Rua Orós, 92 | São Paulo | 05442-030 | Brazil |
22 | FISSA Fabrica Inter. Salchichas S.A. | Diego Roel | C/ Moralzarzal, 86 | Madrid | 28034 | Spain |
23 | Folies gourmandes | Martine Rancé | 184, chaussée de Tournai | Lille | 59000 | France |
24 | Folk och fä HB | Maria Larsson | Åkergatan 24 | Bräcke | S-844 67 | Sweden |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
26 | France restauration | Carine Schmitt | 54, rue Royale | Nantes | 44000 | France |
27 | Franchi S.p.A. | Paolo Accorti | Via Monte Bianco 34 | Torino | 10100 | Italy |
28 | Furia Bacalhau e Frutos do Mar | Lino Rodriguez | Jardim das rosas n. 32 | Lisboa | 1675 | Portugal |
29 | Galería del gastrónomo | Eduardo Saavedra | Rambla de Cataluña, 23 | Barcelona | 08022 | Spain |
30 | Godos Cocina Típica | José Pedro Freyre | C/ Romero, 33 | Sevilla | 41101 | Spain |
31 | Gourmet Lanchonetes | André Fonseca | Av. Brasil, 442 | Campinas | 04876-786 | Brazil |
32 | Great Lakes Food Market | Howard Snyder | 2732 Baker Blvd. | Eugene | 97403 | USA |
33 | GROSELLA-Restaurante | Manuel Pereira | 5ª Ave. Los Palos Grandes | Caracas | 1081 | Venezuela |
34 | Hanari Carnes | Mario Pontes | Rua do Paço, 67 | Rio de Janeiro | 05454-876 | Brazil |
35 | HILARIÓN-Abastos | Carlos Hernández | Carrera 22 con Ave. Carlos Soublette #8-35 | San Cristóbal | 5022 | Venezuela |
36 | Hungry Coyote Import Store | Yoshi Latimer | City Center Plaza 516 Main St. | Elgin | 97827 | USA |
37 | Hungry Owl All-Night Grocers | Patricia McKenna | 8 Johnstown Road | Cork | Ireland | |
38 | Island Trading | Helen Bennett | Garden House Crowther Way | Cowes | PO31 7PJ | UK |
39 | Königlich Essen | Philip Cramer | Maubelstr. 90 | Brandenburg | 14776 | Germany |
40 | La corne d'abondance | Daniel Tonini | 67, avenue de l'Europe | Versailles | 78000 | France |
41 | La maison d'Asie | Annette Roulet | 1 rue Alsace-Lorraine | Toulouse | 31000 | France |
42 | Laughing Bacchus Wine Cellars | Yoshi Tannamuri | 1900 Oak St. | Vancouver | V3F 2K1 | Canada |
43 | Lazy K Kountry Store | John Steel | 12 Orchestra Terrace | Walla Walla | 99362 | USA |
44 | Lehmanns Marktstand | Renate Messner | Magazinweg 7 | Frankfurt a.M. | 60528 | Germany |
45 | Let's Stop N Shop | Jaime Yorres | 87 Polk St. Suite 5 | San Francisco | 94117 | USA |
46 | LILA-Supermercado | Carlos González | Carrera 52 con Ave. Bolívar #65-98 Llano Largo | Barquisimeto | 3508 | Venezuela |
47 | LINO-Delicateses | Felipe Izquierdo | Ave. 5 de Mayo Porlamar | I. de Margarita | 4980 | Venezuela |
48 | Lonesome Pine Restaurant | Fran Wilson | 89 Chiaroscuro Rd. | Portland | 97219 | USA |
49 | Magazzini Alimentari Riuniti | Giovanni Rovelli | Via Ludovico il Moro 22 | Bergamo | 24100 | Italy |
50 | Maison Dewey | Catherine Dewey | Rue Joseph-Bens 532 | Bruxelles | B-1180 | Belgium |
51 | Mère Paillarde | Jean Fresnière | 43 rue St. Laurent | Montréal | H1J 1C3 | Canada |
52 | Morgenstern Gesundkost | Alexander Feuer | Heerstr. 22 | Leipzig | 04179 | Germany |
53 | North/South | Simon Crowther | South House 300 Queensbridge | London | SW7 1RZ | UK |
54 | Océano Atlántico Ltda. | Yvonne Moncada | Ing. Gustavo Moncada 8585 Piso 20-A | Buenos Aires | 1010 | Argentina |
55 | Old World Delicatessen | Rene Phillips | 2743 Bering St. | Anchorage | 99508 | USA |
56 | Ottilies Käseladen | Henriette Pfalzheim | Mehrheimerstr. 369 | Köln | 50739 | Germany |
57 | Paris spécialités | Marie Bertrand | 265, boulevard Charonne | Paris | 75012 | France |
58 | Pericles Comidas clásicas | Guillermo Fernández | Calle Dr. Jorge Cash 321 | México D.F. | 05033 | Mexico |
59 | Piccolo und mehr | Georg Pipps | Geislweg 14 | Salzburg | 5020 | Austria |
60 | Princesa Isabel Vinhoss | Isabel de Castro | Estrada da saúde n. 58 | Lisboa | 1756 | Portugal |
61 | Que Delícia | Bernardo Batista | Rua da Panificadora, 12 | Rio de Janeiro | 02389-673 | Brazil |
62 | Queen Cozinha | Lúcia Carvalho | Alameda dos Canàrios, 891 | São Paulo | 05487-020 | Brazil |
63 | QUICK-Stop | Horst Kloss | Taucherstraße 10 | Cunewalde | 01307 | Germany |
64 | Rancho grande | Sergio Gutiérrez | Av. del Libertador 900 | Buenos Aires | 1010 | Argentina |
65 | Rattlesnake Canyon Grocery | Paula Wilson | 2817 Milton Dr. | Albuquerque | 87110 | USA |
66 | Reggiani Caseifici | Maurizio Moroni | Strada Provinciale 124 | Reggio Emilia | 42100 | Italy |
67 | Ricardo Adocicados | Janete Limeira | Av. Copacabana, 267 | Rio de Janeiro | 02389-890 | Brazil |
68 | Richter Supermarkt | Michael Holz | Grenzacherweg 237 | Genève | 1203 | Switzerland |
69 | Romero y tomillo | Alejandra Camino | Gran Vía, 1 | Madrid | 28001 | Spain |
70 | Santé Gourmet | Jonas Bergulfsen | Erling Skakkes gate 78 | Stavern | 4110 | Norway |
71 | Save-a-lot Markets | Jose Pavarotti | 187 Suffolk Ln. | Boise | 83720 | USA |
72 | Seven Seas Imports | Hari Kumar | 90 Wadhurst Rd. | London | OX15 4NB | UK |
73 | Simons bistro | Jytte Petersen | Vinbæltet 34 | København | 1734 | Denmark |
74 | Spécialités du monde | Dominique Perrier | 25, rue Lauriston | Paris | 75016 | France |
75 | Split Rail Beer & Ale | Art Braunschweiger | P.O. Box 555 | Lander | 82520 | USA |
76 | Suprêmes délices | Pascale Cartrain | Boulevard Tirou, 255 | Charleroi | B-6000 | Belgium |
77 | The Big Cheese | Liz Nixon | 89 Jefferson Way Suite 2 | Portland | 97201 | USA |
78 | The Cracker Box | Liu Wong | 55 Grizzly Peak Rd. | Butte | 59801 | USA |
79 | Toms Spezialitäten | Karin Josephs | Luisenstr. 48 | Münster | 44087 | Germany |
80 | Tortuga Restaurante | Miguel Angel Paolino | Avda. Azteca 123 | México D.F. | 05033 | Mexico |
81 | Tradição Hipermercados | Anabela Domingues | Av. Inês de Castro, 414 | São Paulo | 05634-030 | Brazil |
82 | Trail's Head Gourmet Provisioners | Helvetius Nagy | 722 DaVinci Blvd. | Kirkland | 98034 | USA |
83 | Vaffeljernet | Palle Ibsen | Smagsløget 45 | Århus | 8200 | Denmark |
84 | Victuailles en stock | Mary Saveley | 2, rue du Commerce | Lyon | 69004 | France |
85 | Vins et alcools Chevalier | Paul Henriot | 59 rue de l'Abbaye | Reims | 51100 | France |
86 | Die Wandernde Kuh | Rita Müller | Adenauerallee 900 | Stuttgart | 70563 | Germany |
87 | Wartian Herkku | Pirkko Koskitalo | Torikatu 38 | Oulu | 90110 | Finland |
88 | Wellington Importadora | Paula Parente | Rua do Mercado, 12 | Resende | 08737-363 | Brazil |
89 | White Clover Markets | Karl Jablonski | 305 - 14th Ave. S. Suite 3B | Seattle | 98128 | USA |
90 | Wilman Kala | Matti Karttunen | Keskuskatu 45 | Helsinki | 21240 | Finland |
91 | Wolski | Zbyszek | ul. Filtrowa 68 | Walla | 01-012 | Poland |
AND 实例
以下 SQL 语句从"客户"中选择所有字段,其中国家/地区为"德国",城市为"柏林":
【实例】
sql
SELECT * FROM Customers
WHERE Country='Germany' AND City='Berlin';
OR 实例
以下 SQL 语句从"客户"中选择城市为"柏林"或"慕尼黑"的所有字段:
【实例】
sql
SELECT * FROM Customers
WHERE City='Berlin' OR City='München';
以下 SQL 语句从"客户"中选择国家为"德国"或"西班牙"的所有字段:
【实例】
sql
SELECT * FROM Customers
WHERE Country='Germany' OR Country='Spain';
NOT 实例
以下 SQL 语句从"客户"中选择国家不是"德国"的所有字段:
【实例】
sql
SELECT * FROM Customers
WHERE NOT Country='Germany';
结合 AND, OR 和 NOT
我们也可以把 AND, OR 和 NOT 结合起来(使用圆括号来组成复杂的表达式):
以下 SQL 语句从"客户"中选择所有字段,其中国家/地区为"德国",城市必须为"柏林"或"慕尼黑":
【实例】
sql
SELECT * FROM Customers
WHERE Country='Germany' AND (City='Berlin' OR City='München');
以下 SQL 语句选择"客户"中的所有字段,其中国家/地区不是"德国"也不是"美国":
【实例】
sql
SELECT * FROM Customers
WHERE NOT Country='Germany' AND NOT Country='USA';
SQL ORDER BY 关键词
SQL ORDER BY 关键词
ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。
【ORDER BY 语法】
sql
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
演示数据库
以下是从示例数据库的 "客户(Customers)" 表中查询的内容:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
ORDER BY 实例
以下 SQL 语句从 "Customers" 表中选择所有客户,按 "Country" 列排序:
【实例】
sql
SELECT * FROM Customers
ORDER BY Country;
ORDER BY DESC 实例
以下 SQL 语句从 "Customers" 表中选择所有客户,按 "Country" 列降序排列:
【实例】
sql
SELECT * FROM Customers
ORDER BY Country DESC;
ORDER BY 多列实例
下面的 SQL 语句从 "customers" 表中选择所有客户,按 "Country" 和 "CustomerName" 列排序。这意味着它按国家/地区订购,但如果某些行具有相同的国家/地区,则按 CustomerName 列排序:
【实例】
sql
SELECT * FROM Customers
ORDER BY Country, CustomerName;
以下SQL语句从 "customers" 表中选择所有客户,按 "Country" 升序,按 "CustomerName" 列降序:
【实例】
sql
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;
SQL INSERT INTO 语句
SQL INSERT INTO 语句
INSERT INTO 语句用于向表格中插入新的行。
【INSERT INTO 语法】
INSERT INTO 语句可以有两种编写形式。
第一种方法指定要插入的列名和值:
sql
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
如果要为表的所有列添加值,则不需要在 SQL 查询中指定列名。但是,请确保值的顺序与表中列的顺序相同。插入语法如下所示:
sql
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
演示数据库
以下是从示例数据库的 "客户(Customers)" 表中查询的内容:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
89 | White Clover Markets | Karl Jablonski | 305 - 14th Ave. S. Suite 3B | Seattle | 98128 | USA |
90 | Wilman Kala | Matti Karttunen | Keskuskatu 45 | Helsinki | 21240 | Finland |
91 | Wolski | Zbyszek | ul. Filtrowa 68 | Walla | 01-012 | Poland |
INSERT INTO 实例
以下 SQL 语句在 "Customers" 表中插入新记录:
【实例】
sql
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');
查询 "Customers" 表现在如下所示:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
89 | White Clover Markets | Karl Jablonski | 305 - 14th Ave. S. Suite 3B | Seattle | 98128 | USA |
90 | Wilman Kala | Matti Karttunen | Keskuskatu 45 | Helsinki | 21240 | Finland |
91 | Wolski | Zbyszek | ul. Filtrowa 68 | Walla | 01-012 | Poland |
92 | Cardinal | Tom B. Erichsen | Skagen 21 | Stavanger | 4006 | Norway |
注:CustomerID 列是一个自动递增字段,在将新记录插入表时将自动生成。
在指定的列插入数据
我们也可以在指定的列插入数据。
以下SQL语句将插入新记录,但仅在 "CustomerName" 、 "City" 和 "Country" 列中插入数据(CustomerID 将自动更新):
【实例】
sql
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');
查询 "Customers" 表现在如下所示:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
89 | White Clover Markets | Karl Jablonski | 305 - 14th Ave. S. Suite 3B | Seattle | 98128 | USA |
90 | Wilman Kala | Matti Karttunen | Keskuskatu 45 | Helsinki | 21240 | Finland |
91 | Wolski | Zbyszek | ul. Filtrowa 68 | Walla | 01-012 | Poland |
92 | Cardinal | null | null | Stavanger | null | Norway |
SQL NULL 值
什么是 NULL 值
具有 NULL 空值的字段表示此字段没有值。
如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。
注: 空值不同于零值或包含空格的字段。具有空值的字段是在记录创建过程中保留为空的字段!
如何测试空值
无法使用比较运算符(如 =, <, or <>)测试空值。
我们将使用 IS NULL 和 IS NOT NULL 操作符。
【IS NULL 语法】
sql
SELECT column_names
FROM table_name
WHERE column_name IS NULL;
【IS NOT NULL 语法】
sql
SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;
演示数据库
以下是从示例数据库的 "Customers" 表中选择的内容:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
IS NULL
IS NULL 运算符用于测试空值(NULL 值)。
以下 SQL 列出了 地址(Address) 字段中具有空值的所有客户:
【实例】
sql
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NULL;
注: 请始终使用 IS NULL 来查找 NULL 值。
IS NOT NULL
IS NOT NULL 运算符用于测试非空值(非空值)。
以下 SQL 列出了 地址(Address) 字段中有值的所有客户:
【实例】
sql
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NOT NULL;
SQL UPDATE 语句
UPDATE 语句
UPDATE 语句用于修改表中的现有记录。
【UPDATE 语法】
sql
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
注: 请注意 SQL UPDATE 语句中的 WHERE 子句!WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!
演示数据库
以下是从示例数据库的 "客户(Customers)" 表中查询的内容:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
UPDATE 实例
下面的 SQL 语句更新一个记录(CustomerID=1)的 ContactName 和 City 字段。
【实例】
sql
UPDATE Customers
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1;
查询 "客户(Customers)" 表现在如下所示:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Alfred Schmidt | Obere Str. 57 | Frankfurt | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
UPDATE 多行
WHERE 子句决定将更新多少记录。
以下 SQL 语句将 Country 为 "Mexico" 的所有记录字段 contactname 更新为 "Juan":
【实例】
sql
UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';
查询 "客户(Customers)" 表现在如下所示:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Alfred Schmidt | Obere Str. 57 | Frankfurt | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Juan | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Juan | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Update 警告
注:更新记录时要小心,如果省略WHERE子句,所有记录都将更新!
【实例】
sql
UPDATE Customers
SET ContactName='Juan';
查询 "客户(Customers)" 表现在如下所示:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Juan | Obere Str. 57 | Frankfurt | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Juan | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Juan | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Juan | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Juan | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |