SQL 系列教程(一)

目录

[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)的 ContactNameCity 字段。

【实例】

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
相关推荐
Hacker_LaoYi2 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
独行soc2 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
冷眼看人间恩怨3 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
清平乐的技术专栏4 小时前
Hive SQL 查询所有函数
hive·hadoop·sql
cmdch20179 小时前
Mybatis加密解密查询操作(sql前),where要传入加密后的字段时遇到的问题
数据库·sql·mybatis
Hejjon9 小时前
SpringBoot 整合 SQLite 数据库
笔记
程序猿小柒9 小时前
【Spark】Spark SQL执行计划-精简版
大数据·sql·spark
听见~11 小时前
SQL优化
数据库·sql
西洼工作室11 小时前
【java 正则表达式 笔记】
java·笔记·正则表达式