SQL 系列教程(一)

目录

SQL 简介

SQL 是什么

SQL 能做什么

SQL 语法

数据库表

SQL 语句

注意事项

SQL 语句后面的分号

一些最重要的 SQL 命令

SQL SELECT 语句

SQL SELECT 语句

演示数据库

SELECT Column 实例

SELECT * 实例

SQL SELECT DISTINCT 语句

SQL SELECT DISTINCT 语句

演示数据库

不使用 SELECT DISTINCT 实例

使用 SELECT DISTINCT 实例

SQL WHERE 子句

SQL WHERE 子句

演示数据库

WHERE 子句实例

文本字段 vs. 数值字段

WHERE 子句中的运算符

SQL AND, OR, NOT 运算符

SQL AND, OR, NOT 运算符

演示数据库

AND 实例

OR 实例

NOT 实例

结合 AND, OR 和 NOT

SQL ORDER BY 关键词

SQL ORDER BY 关键词

演示数据库

ORDER BY 实例

ORDER BY DESC 实例

ORDER BY 多列实例

SQL INSERT INTO 语句

SQL INSERT INTO 语句

演示数据库

INSERT INTO 实例

在指定的列插入数据

SQL NULL 值

什么是 NULL 值

如何测试空值

演示数据库

IS NULL

IS NOT NULL

SQL 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 中)。

以下是从"客户"表中选择的内容:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1
 
Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4
 
Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

上表包含五条记录(每个客户一条)和七列 (CustomerID, CustomerName, ContactName, Address, City, PostalCode, Country)。

SQL 语句

您需要在数据库上执行的大部分工作都由 SQL 语句完成。

下面的 SQL 语句从 "Customers" 表中选取所有记录:

【实例】

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 语法】

SELECT column1, column2, ...
FROM table_name;

这里, column1, column2, ... 是要从中选择数据的表的字段名。如果要选择表中的所有可用字段,请使用以下语法:

SELECT * FROM table_name;

演示数据库

以下是从演示数据库的“客户”表中选择的内容:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1
 
Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4
 
Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

SELECT Column 实例

以下 SQL 语句从 "Customers" 表中选择 "CustomerName" 和 "City" 列:

【实例】

SELECT CustomerName, City FROM Customers;

SELECT * 实例

以下 SQL 语句从 "Customers" 表中选择所有列:

【实例】

SELECT * FROM Customers;

SQL SELECT DISTINCT 语句

SQL SELECT DISTINCT 语句

SELECT DISTINCT 语句用于返回唯一不同的值。

在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。

【SELECT DISTINCT 语法】

SELECT DISTINCT column1, column2, ...
FROM table_name;

演示数据库

以下是从演示数据库的“客户”表中查询的内容:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1
 
Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4
 
Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

不使用 SELECT DISTINCT 实例

以下 SQL 语句从 "Customers" 表的 "Country" 列中选择所有(包括重复项)值:

【实例】

SELECT Country FROM Customers;

使用 SELECT DISTINCT 实例

下面的 SQL 语句仅选择 "Customers" 表 "Country" 列中的不同值:

【实例】

SELECT DISTINCT Country FROM Customers;

以下 SQL 语句列出了不同(不同)客户国家/地区的数量:

【实例】

SELECT COUNT(DISTINCT Country) FROM Customers;

SQL WHERE 子句

SQL WHERE 子句

WHERE 子句用于过滤记录。

WHERE 子句用于提取那些满足指定条件的记录。

【WHERE 语法】

SELECT column1, column2, ...
FROM table_name
WHERE condition;

注: WHERE 子句不仅用于 SELECT 语句,还用于 UPDATE、 DELETE 等语句。

演示数据库

以下是从演示数据库的“客户”表中查询的内容:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1
 
Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4
 
Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

WHERE 子句实例

以下 SQL 语句选择 "客户" 表中国家是 "墨西哥"的所有客户:

【实例】

SELECT * FROM Customers
WHERE Country='Mexico';

文本字段 vs. 数值字段

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 语法】

SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;

【OR 语法】

SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;

【NOT 语法】

SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;

演示数据库

下表显示了样本数据库中完整的客户(Customers) 表:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden
6Blauer See DelikatessenHanna MoosForsterstr. 57Mannheim68306Germany
7Blondel père et filsFrédérique Citeaux24, place KléberStrasbourg67000France
8Bólido Comidas preparadasMartín SommerC/ Araquil, 67Madrid28023Spain
9Bon app'Laurence Lebihans12, rue des BouchersMarseille13008France
10Bottom-Dollar MarketseElizabeth Lincoln23 Tsawassen Blvd.TsawassenT2F 8M4Canada
11B's BeveragesVictoria AshworthFauntleroy CircusLondonEC2 5NTUK
12Cactus Comidas para llevarPatricio SimpsonCerrito 333Buenos Aires1010Argentina
13Centro comercial MoctezumaFrancisco ChangSierras de Granada 9993México D.F.05022Mexico
14Chop-suey ChineseYang WangHauptstr. 29Bern3012Switzerland
15Comércio MineiroPedro AfonsoAv. dos Lusíadas, 23São Paulo05432-043Brazil
16Consolidated HoldingsElizabeth BrownBerkeley Gardens 12 BreweryLondonWX1 6LTUK
17Drachenblut DelikatessendSven OttliebWalserweg 21Aachen52066Germany
18Du monde entierJanine Labrune67, rue des Cinquante OtagesNantes44000France
19Eastern ConnectionAnn Devon35 King GeorgeLondonWX3 6FWUK
20Ernst HandelRoland MendelKirchgasse 6Graz8010Austria
21Familia ArquibaldoAria CruzRua Orós, 92São Paulo05442-030Brazil
22FISSA Fabrica Inter. Salchichas S.A.Diego RoelC/ Moralzarzal, 86Madrid28034Spain
23Folies gourmandesMartine Rancé184, chaussée de TournaiLille59000France
24Folk och fä HBMaria LarssonÅkergatan 24BräckeS-844 67Sweden
25FrankenversandPeter FrankenBerliner Platz 43München80805Germany
26France restaurationCarine Schmitt54, rue RoyaleNantes44000France
27Franchi S.p.A.Paolo AccortiVia Monte Bianco 34Torino10100Italy
28Furia Bacalhau e Frutos do MarLino RodriguezJardim das rosas n. 32Lisboa1675Portugal
29Galería del gastrónomoEduardo SaavedraRambla de Cataluña, 23Barcelona08022Spain
30Godos Cocina TípicaJosé Pedro FreyreC/ Romero, 33Sevilla41101Spain
31Gourmet LanchonetesAndré FonsecaAv. Brasil, 442Campinas04876-786Brazil
32Great Lakes Food MarketHoward Snyder2732 Baker Blvd.Eugene97403USA
33GROSELLA-RestauranteManuel Pereira5ª Ave. Los Palos GrandesCaracas1081Venezuela
34Hanari CarnesMario PontesRua do Paço, 67Rio de Janeiro05454-876Brazil
35HILARIÓN-AbastosCarlos HernándezCarrera 22 con Ave. Carlos Soublette #8-35San Cristóbal5022Venezuela
36Hungry Coyote Import StoreYoshi LatimerCity Center Plaza 516 Main St.Elgin97827USA
37Hungry Owl All-Night GrocersPatricia McKenna8 Johnstown RoadCorkIreland
38Island TradingHelen BennettGarden House Crowther WayCowesPO31 7PJUK
39Königlich EssenPhilip CramerMaubelstr. 90Brandenburg14776Germany
40La corne d'abondanceDaniel Tonini67, avenue de l'EuropeVersailles78000France
41La maison d'AsieAnnette Roulet1 rue Alsace-LorraineToulouse31000France
42Laughing Bacchus Wine CellarsYoshi Tannamuri1900 Oak St.VancouverV3F 2K1Canada
43Lazy K Kountry StoreJohn Steel12 Orchestra TerraceWalla Walla99362USA
44Lehmanns MarktstandRenate MessnerMagazinweg 7Frankfurt a.M.60528Germany
45Let's Stop N ShopJaime Yorres87 Polk St. Suite 5San Francisco94117USA
46LILA-SupermercadoCarlos GonzálezCarrera 52 con Ave. Bolívar #65-98 Llano LargoBarquisimeto3508Venezuela
47LINO-DelicatesesFelipe IzquierdoAve. 5 de Mayo PorlamarI. de Margarita4980Venezuela
48Lonesome Pine RestaurantFran Wilson89 Chiaroscuro Rd.Portland97219USA
49Magazzini Alimentari RiunitiGiovanni RovelliVia Ludovico il Moro 22Bergamo24100Italy
50Maison DeweyCatherine DeweyRue Joseph-Bens 532BruxellesB-1180Belgium
51Mère PaillardeJean Fresnière43 rue St. LaurentMontréalH1J 1C3Canada
52Morgenstern GesundkostAlexander FeuerHeerstr. 22Leipzig04179Germany
53North/SouthSimon CrowtherSouth House 300 QueensbridgeLondonSW7 1RZUK
54Océano Atlántico Ltda.Yvonne MoncadaIng. Gustavo Moncada 8585 Piso 20-ABuenos Aires1010Argentina
55Old World DelicatessenRene Phillips2743 Bering St.Anchorage99508USA
56Ottilies KäseladenHenriette PfalzheimMehrheimerstr. 369Köln50739Germany
57Paris spécialitésMarie Bertrand265, boulevard CharonneParis75012France
58Pericles Comidas clásicasGuillermo FernándezCalle Dr. Jorge Cash 321México D.F.05033Mexico
59Piccolo und mehrGeorg PippsGeislweg 14Salzburg5020Austria
60Princesa Isabel VinhossIsabel de CastroEstrada da saúde n. 58Lisboa1756Portugal
61Que DelíciaBernardo BatistaRua da Panificadora, 12Rio de Janeiro02389-673Brazil
62Queen CozinhaLúcia CarvalhoAlameda dos Canàrios, 891São Paulo05487-020Brazil
63QUICK-StopHorst KlossTaucherstraße 10Cunewalde01307Germany
64Rancho grandeSergio GutiérrezAv. del Libertador 900Buenos Aires1010Argentina
65Rattlesnake Canyon GroceryPaula Wilson2817 Milton Dr.Albuquerque87110USA
66Reggiani CaseificiMaurizio MoroniStrada Provinciale 124Reggio Emilia42100Italy
67Ricardo AdocicadosJanete LimeiraAv. Copacabana, 267Rio de Janeiro02389-890Brazil
68Richter SupermarktMichael HolzGrenzacherweg 237Genève1203Switzerland
69Romero y tomilloAlejandra CaminoGran Vía, 1Madrid28001Spain
70Santé GourmetJonas BergulfsenErling Skakkes gate 78Stavern4110Norway
71Save-a-lot MarketsJose Pavarotti187 Suffolk Ln.Boise83720USA
72Seven Seas ImportsHari Kumar90 Wadhurst Rd.LondonOX15 4NBUK
73Simons bistroJytte PetersenVinbæltet 34København1734Denmark
74Spécialités du mondeDominique Perrier25, rue LauristonParis75016France
75Split Rail Beer & AleArt BraunschweigerP.O. Box 555Lander82520USA
76Suprêmes délicesPascale CartrainBoulevard Tirou, 255CharleroiB-6000Belgium
77The Big CheeseLiz Nixon89 Jefferson Way Suite 2Portland97201USA
78The Cracker BoxLiu Wong55 Grizzly Peak Rd.Butte59801USA
79Toms SpezialitätenKarin JosephsLuisenstr. 48Münster44087Germany
80Tortuga RestauranteMiguel Angel PaolinoAvda. Azteca 123México D.F.05033Mexico
81Tradição HipermercadosAnabela DominguesAv. Inês de Castro, 414São Paulo05634-030Brazil
82Trail's Head Gourmet ProvisionersHelvetius Nagy722 DaVinci Blvd.Kirkland98034USA
83VaffeljernetPalle IbsenSmagsløget 45Århus8200Denmark
84Victuailles en stockMary Saveley2, rue du CommerceLyon69004France
85Vins et alcools ChevalierPaul Henriot59 rue de l'AbbayeReims51100France
86Die Wandernde KuhRita MüllerAdenauerallee 900Stuttgart70563Germany
87Wartian HerkkuPirkko KoskitaloTorikatu 38Oulu90110Finland
88Wellington ImportadoraPaula ParenteRua do Mercado, 12Resende08737-363Brazil
89White Clover MarketsKarl Jablonski305 - 14th Ave. S. Suite 3BSeattle98128USA
90Wilman KalaMatti KarttunenKeskuskatu 45Helsinki21240Finland
91WolskiZbyszekul. Filtrowa 68Walla01-012Poland

AND 实例

以下 SQL 语句从"客户"中选择所有字段,其中国家/地区为"德国",城市为"柏林":

【实例】

SELECT * FROM Customers
WHERE Country='Germany' AND City='Berlin';

OR 实例

以下 SQL 语句从"客户"中选择城市为"柏林"或"慕尼黑"的所有字段:

【实例】

SELECT * FROM Customers
WHERE City='Berlin' OR City='München';

以下 SQL 语句从"客户"中选择国家为"德国"或"西班牙"的所有字段:

【实例】

SELECT * FROM Customers
WHERE Country='Germany' OR Country='Spain';

NOT 实例

以下 SQL 语句从"客户"中选择国家不是"德国"的所有字段:

【实例】

SELECT * FROM Customers
WHERE NOT Country='Germany';

结合 AND, OR 和 NOT

我们也可以把 AND, OR 和 NOT 结合起来(使用圆括号来组成复杂的表达式):

以下 SQL 语句从"客户"中选择所有字段,其中国家/地区为"德国",城市必须为"柏林"或"慕尼黑":

【实例】

SELECT * FROM Customers
WHERE Country='Germany' AND (City='Berlin' OR City='München');

以下 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 语法】

SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;

演示数据库

以下是从示例数据库的 "客户(Customers)" 表中查询的内容:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1
 
Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4
 
Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

ORDER BY 实例

以下 SQL 语句从 "Customers" 表中选择所有客户,按 "Country" 列排序:

【实例】

SELECT * FROM Customers
ORDER BY Country;

ORDER BY DESC 实例

以下 SQL 语句从 "Customers" 表中选择所有客户,按 "Country" 列降序排列:

【实例】

SELECT * FROM Customers
ORDER BY Country DESC;

ORDER BY 多列实例

下面的 SQL 语句从 "customers" 表中选择所有客户,按 "Country" 和 "CustomerName" 列排序。这意味着它按国家/地区订购,但如果某些行具有相同的国家/地区,则按 CustomerName 列排序:

【实例】

SELECT * FROM Customers
ORDER BY Country, CustomerName;

以下SQL语句从 "customers" 表中选择所有客户,按 "Country" 升序,按 "CustomerName" 列降序:

【实例】

SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;

SQL INSERT INTO 语句

SQL INSERT INTO 语句

INSERT INTO 语句用于向表格中插入新的行。

【INSERT INTO 语法】

INSERT INTO 语句可以有两种编写形式。

第一种方法指定要插入的列名和值:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

如果要为表的所有列添加值,则不需要在 SQL 查询中指定列名。但是,请确保值的顺序与表中列的顺序相同。插入语法如下所示:

INSERT INTO table_name
VALUES (value1, value2, value3, ...);

演示数据库

以下是从示例数据库的 "客户(Customers)" 表中查询的内容:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
89White Clover MarketsKarl Jablonski305 - 14th Ave. S. Suite 3BSeattle98128USA
90
 
Wilman KalaMatti KarttunenKeskuskatu 45Helsinki21240Finland
91
 
WolskiZbyszekul. Filtrowa 68Walla01-012Poland

INSERT INTO 实例

以下 SQL 语句在 "Customers" 表中插入新记录:

【实例】

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');

查询 "Customers" 表现在如下所示:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
89White Clover MarketsKarl Jablonski305 - 14th Ave. S. Suite 3BSeattle98128USA
90
 
Wilman KalaMatti KarttunenKeskuskatu 45Helsinki21240Finland
91
 
WolskiZbyszekul. Filtrowa 68Walla01-012Poland
92CardinalTom B. ErichsenSkagen 21Stavanger4006Norway

注:CustomerID 列是一个自动递增字段,在将新记录插入表时将自动生成。

在指定的列插入数据

我们也可以在指定的列插入数据。

以下SQL语句将插入新记录,但仅在 "CustomerName" 、 "City" 和 "Country" 列中插入数据(CustomerID 将自动更新):

【实例】

INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');

查询 "Customers" 表现在如下所示:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
89White Clover MarketsKarl Jablonski305 - 14th Ave. S. Suite 3BSeattle98128USA
90
 
Wilman KalaMatti KarttunenKeskuskatu 45Helsinki21240Finland
91
 
WolskiZbyszekul. Filtrowa 68Walla01-012Poland
92Cardinalnullnull StavangernullNorway

SQL NULL 值

什么是 NULL 值

具有 NULL 空值的字段表示此字段没有值。

如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。

注: 空值不同于零值或包含空格的字段。具有空值的字段是在记录创建过程中保留为空的字段!

如何测试空值

无法使用比较运算符(如 =, <, or <>)测试空值。

我们将使用 IS NULL 和 IS NOT NULL 操作符。

【IS NULL 语法】

SELECT column_names
FROM table_name
WHERE column_name IS NULL;

【IS NOT NULL 语法】

SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;

演示数据库

以下是从示例数据库的 "Customers" 表中选择的内容:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1
 
Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4
 
Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

IS NULL

IS NULL 运算符用于测试空值(NULL 值)。

以下 SQL 列出了 地址(Address) 字段中具有空值的所有客户:

【实例】

SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NULL;

注: 请始终使用 IS NULL 来查找 NULL 值。

IS NOT NULL

IS NOT NULL 运算符用于测试非空值(非空值)。

以下 SQL 列出了 地址(Address) 字段中有值的所有客户:

【实例】

SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NOT NULL;

SQL UPDATE 语句

UPDATE 语句

UPDATE 语句用于修改表中的现有记录。

【UPDATE 语法】

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

注: 请注意 SQL UPDATE 语句中的 WHERE 子句!WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!

演示数据库

以下是从示例数据库的 "客户(Customers)" 表中查询的内容:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1
 
Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4
 
Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

UPDATE 实例

下面的 SQL 语句更新一个记录(CustomerID=1)的 ContactName 和 City 字段。

【实例】

UPDATE Customers
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1;

查询 "客户(Customers)" 表现在如下所示:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1
 
Alfreds FutterkisteAlfred SchmidtObere Str. 57Frankfurt12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4
 
Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

UPDATE 多行

WHERE 子句决定将更新多少记录。

以下 SQL 语句将 Country 为 "Mexico" 的所有记录字段 contactname 更新为 "Juan":

【实例】

UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';

查询 "客户(Customers)" 表现在如下所示:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1
 
Alfreds FutterkisteAlfred SchmidtObere Str. 57Frankfurt12209Germany
2Ana Trujillo Emparedados y heladosJuanAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaJuanMataderos 2312México D.F.05023Mexico
4
 
Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

Update 警告

注:更新记录时要小心,如果省略WHERE子句,所有记录都将更新!

【实例】

UPDATE Customers
SET ContactName='Juan';

查询 "客户(Customers)" 表现在如下所示:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1
 
Alfreds FutterkisteJuanObere Str. 57Frankfurt12209Germany
2Ana Trujillo Emparedados y heladosJuanAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaJuanMataderos 2312México D.F.05023Mexico
4
 
Around the HornJuan120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpJuanBerguvsvägen 8LuleåS-958 22Sweden

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/646603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【工具使用-Everything】everything只能搜到文件夹,无法搜到文件

一&#xff0c;问题现象 everything搜索时&#xff0c;只能搜索到文件夹&#xff0c;无法搜索到文件夹下的文件。 二&#xff0c;问题原因 everything搜索设置问题&#xff0c;设置为"文件夹"导致 三&#xff0c;解决方法 将搜索选项设置为“所有”即可&#x…

5 新增课程

5.1 需求分析 5.1.1 业务流程 根据前边对内容管理模块的数据模型分析&#xff0c;课程相关的信息有&#xff1a;课程基本信息、课程营销信息、课程图片信息、课程计划、课程师资信息&#xff0c;所以新增一门课程需要完成这几部分信息的填写。 以下是业务流程&#xff1a; …

全链路压测:提升业务可靠性和可用性

全链路压测是一种全面评估系统性能和稳定性的测试方法&#xff0c;通过模拟真实用户场景和流程来验证整个应用系统在高负载情况下的表现。全链路压测的主要作用涵盖了多个方面&#xff1a; 性能评估与优化&#xff1a; 全链路压测可以全面评估系统在高负载下的性能表现&#xf…

代码评审——随机数Random问题

问题描述&#xff1a; 为了获取唯一值&#xff0c;经常会依赖产生随机数来保证唯一性。在获取随机数时&#xff0c;如果使用错误的方法&#xff0c;会比较低效。 可以参考以下代码&#xff1a; public static String geneRundomNo(){Random rnew Random();int numr.nextInt(…

day31_CSS

今日内容 CSS概述引入方式 (where)选择器(how)属性(how) 1 CSS介绍 层叠样式表&#xff08;cascading style sheet&#xff09; CSS 用来美化HTML页面,可以让页面更好看,还可以布局页面. 好处 美化页面,布局页面使用外部css文件,可以实现样式文件和html文件分离,便于维护使用外…

再学jQuery

添加链接描述 jQuery源码采用模块化的设计&#xff0c;将不同功能的代码模块化&#xff0c;并通过jQuery.fn扩展原型链&#xff0c;使得可以灵活地使用各种功能和方法。这样的设计使得代码结构清晰&#xff0c;易于维护和扩展。jQuery源码中考虑了跨浏览器兼容性&#xff0c;通…

苹果眼镜(Vision Pro)的开发者指南(1)

一、用到的底层核心框架: SwiftUI:无论开发者是要创建窗口、体积还是空间体验,SwiftUI 都是构建新的 visionOS 应用程序或将现有 iPadOS 或 iOS 应用程序引入平台的最佳方式。凭借全新的 3D 功能以及对深度、手势、效果和沉浸式场景类型的支持,SwiftUI 可以帮助你为 Vision…

5.ROC-AUC机器学习模型性能的常用的评估指标

最近回顾机器学习基础知识部分的时候&#xff0c;看到了用于评估机器学习模型性能的ROC曲线。再次记录一下&#xff0c;想起之前学习的时候的茫然&#xff0c;希望这次可以更加清晰的了解这一指标。上课的时候听老师提起过&#xff0c;当时没有认真去看&#xff0c;所以这次可以…

SpeechGPT-Gen;使用Agents编辑图像;多模态扩散模型图像生成

本文首发于公众号&#xff1a;机器感知 SpeechGPT-Gen&#xff1b;使用Agents编辑图像&#xff1b;多模态扩散模型图像生成&#xff1b; CCA: Collaborative Competitive Agents for Image Editing This paper presents a novel generative model, Collaborative Competitive…

多流转换 (分流,合流,基于时间的合流——双流联结 )

目录 一&#xff0c;分流 1.实现分流 2.使用侧输出流 二&#xff0c;合流 1&#xff0c;联合 2&#xff0c;连接 三&#xff0c;基于时间的合流——双流联结 1&#xff0c;窗口联结 1.1 窗口联结的调用 1.2 窗口联结的处理流程 2&#xff0c;间隔联结 2.1 间隔联…

<网络安全>《2 国内主要企业网络安全公司概览(二)》

4 北京天融信科技有限公司(简称天融信) 信息内容LOGO成立日期创始于1995年总部北京市海淀区上地东路1号院3号楼北侧301室背景民营企业是否上市天融信[002212]A股市值99亿主要产品网络安全大数据云服务员工规模6000多人简介天融信科技集团&#xff08;证券代码&#xff1a;0022…

# Java NIO(一)FileChannel

Java NIO 1.BIO与NIO的区别 BIO为阻塞IO&#xff0c;NIO为非阻塞IO。 BIONIOJAVA1.4之前Java 1.4之后面向流&#xff1a;以byte为单位处理数据面向块&#xff1a;以块为单位处理数据同步阻塞同步非阻塞无选择器&#xff08;Selector&#xff09; 1.1NIO的核心组成部分 Cha…

书生·浦语大模型实战营-学习笔记6

目录 OpenCompass大模型测评1. 关于评测1.1 为什么要评测&#xff1f;1.2 需要评测什么&#xff1f;1.3 如何评测&#xff1f;1.3.1 客观评测1.3.2 主观评测1.3.3 提示词工程评测 2. 介绍OpenCompass工具3. 实战演示 OpenCompass大模型测评 1. 关于评测 1.1 为什么要评测&#…

人工智能系列 :与机器共生的未来

大家好&#xff0c;身处一个日新月异的时代&#xff0c;科技的浪潮汹涌而至&#xff0c;将人们推向未知的前方&#xff0c;一个充满人工智能与机器的世界。 这个未知的境地&#xff0c;或许令人心生恐慌&#xff0c;因为它的庞大未知性仿佛一团迷雾&#xff0c;模糊了大家的视…

Unity Mask合批情况验证

1.首先是两个Mask完全重合的情况下 每张图片使用的image都来自同一个图集 发现彼此之间是没有合批的&#xff0c;但是每个Mask内部是实现了合批的 经过计算此种情况的visiableList&#xff1a;mask1&#xff0c;IM1&#xff0c;IM2&#xff0c;mask2&#xff0c;IM3&#xf…

Docker安装Clickhouse详细教程

简介 ClickHouse是一种列式数据库管理系统&#xff0c;专门用于高性能数据分析和数据仓库应用。它是一个开源的数据库系统&#xff0c;最初由俄罗斯搜索引擎公司Yandex开发&#xff0c;用于满足大规模数据分析和报告的需求。 特点 开源的列式存储数据库管理系统&#xff0c;…

ruoyi-vue项目中当使用request.js请求后他时,返回非200状态码时request.js会抛出控制台异常导致后续逻辑不执行的解决办法

背景&#xff1a;因表单提交后台逻辑较多&#xff0c;执行速度超过3秒所以提交时添加了遮罩加载层&#xff0c;当后台返回非200状态码时request.js会抛出控制台异常导致后续逻辑不执行了&#xff0c;使用try-cat.catch捕获异常也无效&#xff0c;因为request.js会优先拦截处理 …

不学前沿技术与朽木浮草何异 ?Java18新特性

不学前沿技术与朽木浮草何异 &#xff1f;Java18新特性 文章目录 不学前沿技术与朽木浮草何异 &#xff1f;Java18新特性JEP 400:默认字符集为 UTF-8JEP 408:简易的 Web 服务器JEP 413:优化 Java API 文档中的代码片段JEP 416:使用方法句柄重新实现反射核心JEP 417: 向量 API&a…

06.搭建一个自己的私有仓库-Gitea

06.搭建一个自己的私有仓库-Gitea | DLLCNX的博客 如果你是一位程序员或者IT相关领域的从业者&#xff0c;那么肯定知道git&#xff0c;而且也或多或少接触了不少开源仓库以及公司的私有仓库&#xff0c;但是我们有没有想过自己也搭建一个私有仓库呢。 这么多开源仓库&#xf…

面试经典题---3.无重复字符的最长子串

3.无重复字符的最长子串 我的解法&#xff1a; 滑动窗口&#xff1a; 维护一个[left, right)的滑动窗口&#xff0c;其中[left, right - 1]都是不重复子串&#xff1b;每轮while循环都计算一个滑动窗口的无重复子串长度len&#xff0c;每轮也让right后移一步&#xff1b; 内部…