soword科技言
永久公益免费API接口
提供永久免费的API接口,查看更多API接口,如果您有其他免费API资源,请联系我们,造福人类。
提供商务开发:小程序,系统,APP
定制开发,免费评估,免费咨询,价格便宜,售后保障,前往开发服务中心联系开发客服中心
最好的SQL数据库教程

SQL代表结构化查询语言。它是用于处理和管理关系数据库(通常称为“ SQL数据库”)中数据的最常用工具。

SQL通常被称为“续集”。它最受欢迎的变体是MySQL,PostgreSQL和SQLite-SQL的一种版本,通常用于原型制作。它介绍了使用SQL查询通过一个命令访问许多记录的概念。

SQL Select语句

Select和From子句

查询的SELECT部分通常是确定要在结果中显示数据的哪些列。您还可以应用其他选项来显示不是表列的数据。

本示例显示了从“学生”表中选择的三列和一个计算出的列。该数据库存储该学生的studentID,FirstName和LastName。我们可以组合名字和姓氏列来创建FullName计算列。

select studentID, FirstName, LastName, FirstName + ' ' + LastName as FullNamefrom student;
+-----------+-------------------+------------+------------------------+| studentID | FirstName | LastName | FullName |+-----------+-------------------+------------+------------------------+| 1 | Monique | Davis| Monique Davis|| 2 | Teri| Gutierrez| Teri Gutierrez || 3 | Spencer | Pautier| Spencer Pautier|| 4 | Louis | Ramsey | Louis Ramsey || 5 | Alvin | Greene | Alvin Greene || 6 | Sophie| Freeman| Sophie Freeman || 7 | Edgar Frank "Ted" | Codd | Edgar Frank "Ted" Codd || 8 | Donald D. | Chamberlin | Donald D. Chamberlin || 9 | Raymond F.| Boyce| Raymond F. Boyce |+-----------+-------------------+------------+------------------------+9 rows in set (0.00 sec)

CHECK约束用于限制可以放在列中的值范围。

如果在单个列上定义CHECK约束,则该列仅允许某些值。

如果在表上定义CHECK约束,则可以基于行中其他列中的值来限制某些列中的值。

在CREATE TABLE上执行SQL检查

创建“人员”表时,以下SQL在“年龄”列上创建CHECK约束。CHECK约束确保您不能有18岁以下的任何人:

MySQL:

CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CHECK (Age>=18));

SQL Server / Oracle / MS Access:

CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int CHECK (Age>=18));

若要命名CHECK约束,并在多个列上定义CHECK约束,请使用以下SQL语法:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes'));

对ALTER TABLE进行SQL检查

要在表已创建时在“年龄”列上创建CHECK约束,请使用以下SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE PersonsADD CHECK (Age>=18);

若要命名CHECK约束,并在多个列上定义CHECK约束,请使用以下SQL语法:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE PersonsADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Sandnes');

放弃检查约束

要删除CHECK约束,请使用以下SQL:

SQL Server / Oracle / MS Access:

ALTER TABLE PersonsDROP CONSTRAINT CHK_PersonAge;

MySQL:

ALTER TABLE PersonsDROP CHECK CHK_PersonAge;

SQL Where子句

WHERE条款(和/或,INBETWEEN,和LIKE

WHERE子句用于限制返回的行数。

在这种情况下,将使用所有这五个都是有点荒谬的WHERE条款。

这是当前完整的学生列表,可与WHERE子句结果集进行比较

select studentID, FullName, sat_score, rcd_updated from student;
+-----------+------------------------+-----------+---------------------+| studentID | FullName | sat_score | rcd_updated |+-----------+------------------------+-----------+---------------------+| 1 | Monique Davis| 400 | 2017-08-16 15:34:50 || 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 || 3 | Spencer Pautier|1000 | 2017-08-16 15:34:50 || 4 | Louis Ramsey |1200 | 2017-08-16 15:34:50 || 5 | Alvin Greene |1200 | 2017-08-16 15:34:50 || 6 | Sophie Freeman |1200 | 2017-08-16 15:34:50 || 7 | Edgar Frank "Ted" Codd |2400 | 2017-08-16 15:35:33 || 8 | Donald D. Chamberlin |2400 | 2017-08-16 15:35:33 || 9 | Raymond F. Boyce |2400 | 2017-08-16 15:35:33 |+-----------+------------------------+-----------+---------------------+9 rows in set (0.00 sec)

将显示以下行:

  • WHERE 学生证介于1到5(含)之间

  • OR 学生编号= 8

这是一个更新的查询,其中不会显示此列表中的SAT分数(1000、1400)的任何记录:

selectstudentID, FullName, sat_score, recordUpdatedfromstudentwhere (studentID between 1 and 5 or studentID = 8)
and
sat_score NOT in (1000, 1400);
+-----------+----------------------+-----------+---------------------+| studentID | FullName | sat_score | rcd_updated |+-----------+----------------------+-----------+---------------------+| 1 | Monique Davis| 400 | 2017-08-16 15:34:50 || 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 || 4 | Louis Ramsey |1200 | 2017-08-16 15:34:50 || 5 | Alvin Greene |1200 | 2017-08-16 15:34:50 || 8 | Donald D. Chamberlin |2400 | 2017-08-16 15:35:33 |+-----------+----------------------+-----------+---------------------+5 rows in set (0.00 sec)

*与所有这些SQL事物一样,它们比本入门指南中的内容要多得多。

我希望这至少能给您足够的入门。

请参阅数据库管理员的手册,并尝试自己尝试不同的选项,这很有趣。

SQL更新语句

要更新表中的记录,请使用以下UPDATE语句。

小心。您可以更新表中的所有记录或仅更新其中的一些记录。使用WHERE条件指定要更新的记录。可以一次更新一个或多个列。语法为:

UPDATE table_nameSET column1 = value1, 
column2 = value2, ...WHERE condition;

这是一个使用ID 4更新记录名称的示例:

UPDATE PersonSET Name = “Elton John”WHERE Id = 4;

您还可以通过使用其他表中的值来更新表中的列。Use JOIN子句从多个表获取数据。语法为:

UPDATE table_name1SET table_name1.column1 = table_name2.columnA
table_name1.column2 = table_name2.columnBFROM table_name1JOIN table_name2 ON table_name1.ForeignKey = table_name2.Key

这是所有记录的更新管理器的示例:

UPDATE PersonSET Person.Manager = Department.ManagerFROM PersonJOIN Department ON Person.DepartmentID = Department.ID

更新查询可以做什么

通过更新查询,DBA或使用SQL的程序员可以使用一个命令来更新许多记录。

重要安全提示!更改之前,请始终保留要更改内容的备份副本!

本节将:

  • 向学生表添加新字段

  • 测试用学校分配的电子邮件地址更新该字段的逻辑

  • 更新新字段。

这是我们开始此过程的学生表:

SELECT * FROM student;
+-----------+------------------------+-----------+------------------+---------------------+---------------------+| studentID | FullName | sat_score | programOfStudy | rcd_Created | rcd_Updated |+-----------+------------------------+-----------+------------------+---------------------+---------------------+| 1 | Monique Davis| 400 | Literature | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 || 2 | Teri Gutierrez | 800 | Programming| 2017-08-16 15:34:50 | 2017-08-16 15:34:50 || 3 | Spencer Pautier|1000 | Programming| 2017-08-16 15:34:50 | 2017-08-16 15:34:50 || 4 | Louis Ramsey |1200 | Programming| 2017-08-16 15:34:50 | 2017-08-16 15:34:50 || 5 | Alvin Greene |1200 | Programming| 2017-08-16 15:34:50 | 2017-08-16 15:34:50 || 6 | Sophie Freeman |1200 | Programming| 2017-08-16 15:34:50 | 2017-08-16 15:34:50 || 7 | Edgar Frank "Ted" Codd |2400 | Computer Science | 2017-08-16 15:35:33 | 2017-08-16 15:35:33 || 8 | Donald D. Chamberlin |2400 | Computer Science | 2017-08-16 15:35:33 | 2017-08-16 15:35:33 || 9 | Raymond F. Boyce |2400 | Computer Science | 2017-08-16 15:35:33 | 2017-08-16 15:35:33 |+-----------+------------------------+-----------+------------------+---------------------+---------------------+9 rows in set (0.00 sec)

更改表格并添加新字段

ALTER TABLE `fcc_sql_guides_database`.`student` 
	ADD COLUMN `schoolEmailAdr` VARCHAR(125) NULL AFTER `programOfStudy`;

执行更改后的学生表。

mysql> SELECT FullName, sat_score, programOfStudy, schoolEmailAdr FROM student;+------------------------+-----------+------------------+----------------+| FullName | sat_score | programOfStudy | schoolEmailAdr |+------------------------+-----------+------------------+----------------+| Monique Davis| 400 | Literature | NULL || Teri Gutierrez | 800 | Programming| NULL || Spencer Pautier|1000 | Programming| NULL || Louis Ramsey |1200 | Programming| NULL || Alvin Greene |1200 | Programming| NULL || Sophie Freeman |1200 | Programming| NULL || Edgar Frank "Ted" Codd |2400 | Computer Science | NULL || Donald D. Chamberlin |2400 | Computer Science | NULL || Raymond F. Boyce |2400 | Computer Science | NULL |+------------------------+-----------+------------------+----------------+9 rows in set (0.00 sec)

测试逻辑(非常重要的一步!)

SELECT FullName, instr(FullName," ") AS firstSpacePosition, concat(substring(FullName,1,instr(FullName," ")-1),"@someSchool.edu") AS schoolEmailFROM student;
+------------------------+--------------------+------------------------+| FullName | firstSpacePosition | schoolEmail|+------------------------+--------------------+------------------------+| Monique Davis|8 | Monique@someSchool.edu || Teri Gutierrez |5 | Teri@someSchool.edu|| Spencer Pautier|8 | Spencer@someSchool.edu || Louis Ramsey |6 | Louis@someSchool.edu || Alvin Greene |6 | Alvin@someSchool.edu || Sophie Freeman |7 | Sophie@someSchool.edu|| Edgar Frank "Ted" Codd |6 | Edgar@someSchool.edu || Donald D. Chamberlin |7 | Donald@someSchool.edu|| Raymond F. Boyce |8 | Raymond@someSchool.edu |+------------------------+--------------------+------------------------+9 rows in set (0.00 sec)

关于concat()的说明:在MySQL中,此命令用于组合字符串,而在其他SQL版本中则不是这样(请参阅手册)。在这种用法中,它的工作方式如下:FullName字段的子字符串,直到但不包括第一个空格,都与“ @ someSchool.edu”组合在一起。在现实世界中,这将变得更加复杂,并且您需要确保电子邮件地址是唯一的。

进行更新

我们将假装这就是我们想要的,并使用以下信息更新表:

UPDATE student SET schoolEmailAdr = concat(substring(FullName,1,instr(FullName," ")-1),"@someSchool.edu")WHERE schoolEmailAdr is NULL;

成功!

mysql> SELECT FullName, sat_score, programOfStudy, schoolEmailAdr FROM student;+------------------------+-----------+------------------+------------------------+| FullName | sat_score | programOfStudy | schoolEmailAdr |+------------------------+-----------+------------------+------------------------+| Monique Davis| 400 | Literature | Monique@someSchool.edu || Teri Gutierrez | 800 | Programming| Teri@someSchool.edu|| Spencer Pautier|1000 | Programming| Spencer@someSchool.edu || Louis Ramsey |1200 | Programming| Louis@someSchool.edu || Alvin Greene |1200 | Programming| Alvin@someSchool.edu || Sophie Freeman |1200 | Programming| Sophie@someSchool.edu|| Edgar Frank "Ted" Codd |2400 | Computer Science | Edgar@someSchool.edu || Donald D. Chamberlin |2400 | Computer Science | Donald@someSchool.edu|| Raymond F. Boyce |2400 | Computer Science | Raymond@someSchool.edu |+------------------------+-----------+------------------+------------------------+9 rows in set (0.00 sec)



2023-03-22 10:04:19

新人小程序+APP定制199元起


发放福利,助力中小企业发展,真正在互联网中受益

点击询问定制

广告服务展示