13重要的SQL语句程序员需要知道
数据库是现代网站必不可少的一部分。大型或动态的网站以某种方式使用数据库,并且与结构化查询语言(SQL)结合使用,操纵数据的能力确实是无限的。如果您已经知道SQL但仍然是程序员,请确保您对我们在本文中介绍的13个重要的SQL语句有牢固的了解。
- 10个简单的CSS代码,您可以在10分钟内学习
- 从安装向导(设置)安装SQL Server 2016
- 使用Alter数据库命令在SQL Server中迁移数据库
从数据表返回了许多数据名称。数据通常称为行(行),记录(记录)或元组。列出的术语将在本文中互换使用。
前言
今天的所有示例将基于四个假设。客户表有顾客名称和年龄:
桌子高度包含任何人的名称和高度:
这职员表具有员工的名称和年龄 - 完全顾客:
最后一个表被称为人们有名字和年龄,例如表顾客和职员:
1。选择
选择语句是最简单的,您需要理解它,因为它是其他许多命令的基础。考虑练习大写中的编写SQL命令,因为它使该语句易于阅读和理解。
顾名思义,选择用于从数据库中选择数据。这是最简单的用法:
SELECT * FROM table;
以上语句有两个部分:
- 选择 *:指定您要选择的列, *此处是您要选择表中的所有列。
- 从桌子:本节告诉您要在其中提取数据的数据库工具,用数据库表的名称代替“表”。
此选择语句称为“选择星”,使用 *符号是在表中查找和计算数据的好方法,但是并不总是使用此语句。当使用Select Star时,如何完全显示返回数据取决于数据库的引擎,您无法控制返回的数据顺序,因此,如果有人在表中添加了新列,则您会在编程语言中看到变量,而不会显示正确的数据。幸运的是,还有另一个解决方案。
您可以指定要检索的列,如下所示:
SELECT age, name FROM people;
此查询将提取姓名和年龄列人们桌子。如果您有太多数据,这似乎有些无聊,但是这样做将有助于减少未来的许多潜在问题,并且使SQL稍后更容易与新开发人员了解。
如果要选择其他数据,但没有存储在任何表中,则可以执行以下操作:
SELECT age, '1234' FROM people;
撇号内的任何字符串将被返回而不是适当的列名。
2
SELECT语句是检索数据的绝佳选择,但是如果您想对结果进行更多过滤,例如,只想提取蓝眼睛,一月出生和机械师的人该怎么办?这是使用Where语句的时候了。在允许将其他条件应用于选择的地方,您只需要将其附加到语句的结尾:
SELECT age, name FROM people WHERE age > 10;
此查询仅限于10岁以上的人。您可以使用和操作员结合多个条件:
SELECT age, name FROM people WHERE age > 10 AND age < 20;
和命令在英语中的含义与其含义完全类似:它将不同的条件应用于语句。在上面的示例中,返回的数据将是任何具有10至20岁之间的记录。由于没有匹配结果,因此不会返回数据。
另一个命令可用于组合或条件。这是一个示例:
SELECT age, name FROM people WHERE age > 10 OR name = 'Joe';
此查询需要返回的记录,年龄超过10岁或名为Joe。请注意,这里只有一个“ =”,但是许多编程语言都使用两个相等的符号(==)检查等效性,这对于大多数数据库引擎来说不是必需的,因此您仍然应该仔细检查数据库的工作环境。
3。订单
订单命令用于对结果进行排序,使用订单非常简单,只需将顺序添加到语句末尾,如下所示:
SELECT name, age FROM people ORDER BY age DESC;
如果您需要选择特定的列和订单,则可以执行以下操作(ASC是增量,DESC正在下降):
SELECT name, age FROM people ORDER BY name ASC, age DESC;
与其他命令结合使用时订购可能最有用。并非所有查询都会以逻辑或有序的方式返回数据 - 此命令允许您更改该数据。
4。加入
联接命令用于组合一个或多个表中的相关数据。您可以将第二个表附加到第一个表格,并指定数据的连接方式。这是一个基本示例:
SELECT age, name, height FROM people LEFT JOIN heights USING (name);
这里有一些笔记。您必须从“左联接”语法开始,了解要使用左连接类型加入表。接下来,确定要加入的表(高度)。使用(名称)语法表示可以在两个表中找到“名称”列,并且此列将用作将表组合在一起的键。
不用担心每个表中的列是否具有不同的名称。您可以在“上”而不是“使用”:
SELECT age, name, height FROM people LEFT JOIN heights ON (namea = nameb);
ON命令将指定哪个列是要连接的键。您需要一些类型的连接,您需要一些时间来详细学习,这是一个快速的摘要:
- (内)加入:返回两个表中包含的行。
- 左(外部)加入:从左图返回所有行,以及右面板中的适当记录。如果没有记录匹配,则左表中的记录仍会返回。
- 右(外部)联接:与上述连接类型相反,右表的所有行都将用左图的适当行返回。
- 完整(外部)联接:在两个表中返回所有匹配记录。
语法内部或外部是可选的,它使一切更容易理解,但不一定总是需要使用它们。
5。别名
现在您知道了基本命令,请再次尝试别名命令。
该语句用于暂时重命名表,此新名称仅存在于您正在运行的交易中。这是使用方法:
SELECT A.age FROM people A;
您可以使用所需的任何匹配名称,在此示例中,我使用字母的字母。在每个列名称之前,将保留别名。声明后立即将此别名分配给表。相同,相似:
SELECT people.age FROM people;
只需输入简单,易于记录的字母,而不必输入长表名。但是,这是一个小问题,如果您从多个表中进行选择,则很容易混淆表中的列。如果表具有相同的列名称,则数据库查询可能会损坏,因为无法正确获得对表名或别名的确切引用。这是一个带有两个表的示例:
SELECT staff.age, staff.name, customers.age, customers.name FROM staff, customers;
这与别名是相同的查询:
SELECT A.age, A.name, B.age, B.name FROM staff A, customers B;
这职员表分配了一个新名称a,顾客表分配了一个新名称B。这些表使代码更易于理解和减少输入的单词数量。
如果要用别名重命名列,则使用AS命令:
SELECT age AS person_age FROM people;
进行此查询时,该列将称为“ Person_age”而不是“年龄”。
6。工会
联盟是一个很好的命令。它允许您将行连接在一起。与仅附加匹配列的JOIN命令不同,如果有相同数量的列和列名称,则Union可以加入无关的行。这是您使用它的方式:
SELECT age, name FROM customers UNION SELECT age, name FROM staff;
联合语句只能在两个查询之间返回单行结果,您可以使用Union所有语法返回所有数据,包括相同的数据。
SELECT age, name FROM customers UNION ALL SELECT age, name FROM staff;
尽管以上两个语句的结果是相同的,但是您注意到行的顺序已经改变,对吗?工会以最有效的方式工作,因此返回的数据的顺序可能有所不同。
另一个案例可以将联盟用作小计,您将总和(总计)查询(总计)中的查询与特定情况的单个总数查询。 。大声听到!
7。插入
上面的6个语句都可以帮助您从数据库中提取数据,您要如何将数据插入数据库中?这是插入命令显示的时候:
INSERT INTO people(name, age) VALUES('Joe', 102);
您必须指定人们和您要使用的列(名称和年龄)。然后使用值语法来提供插入的值。必须插入的值的顺序必须与先前指定的列相同的顺序设置。
您无法指定在哪里插入,并且需要确保遵循表之间的约束。
8。更新
插入数据后,您需要更改特定的行。这是更新命令的语法:
UPDATE people SET name = 'Joe' , age = 101 ;
您必须指定要更改的表,然后使用SET语法来定义其新列和值。此示例中的说明将更新所有单个记录。
更具体地说,您可以在执行Select语句时的位置使用:
UPDATE people SET name = 'Joe', age = 101 WHERE name = 'James';
您甚至可以使用和或有条件的操作员:
UPDATE people SET name = 'Joe', age = 101 WHERE (name = 'James' AND age = 100) OR name = 'Ryan';
注意如何使用括号来强制执行条件。
9
Upsert听起来很奇怪,但这是一个非常有用的命令。假设数据表有一个限制,您仅存储具有唯一名称的记录,您不想在表中显示两个相同的名称。如果您尝试插入许多“ joe”值,则数据库引擎将报告错误并拒绝这样做(几乎这样)。 UPSERT命令允许您在记录已经存在的情况下更新记录。如果没有此命令,您将必须编写大量逻辑才能检查它已经存在,如果它已经存在,则插入,如果已经存在,请提取其正确的主键,然后更新。我想疯了。
不幸的是,该命令在不同的数据库上以不同的方式执行。 PostgreSQL最近添加了此命令,而MySQL已经存在了很长时间。这是MySQL上的UPSERT命令语法以供您参考:
INSERT INTO people(name, age) VALUES('Joe', 101) ON DUPLICATE KEY UPDATE age = 101;
如果您观察到,您会注意到这本质上是一个与插入命令结合使用的更新命令,可以将其解释为“如果插入失败,则可以进行更新”。
10。删除
删除命令用于完全删除记录,如果被滥用,可能会非常危险。此命令的语法非常简单:
DELETE FROM people;
以上命令将删除所有内容人们桌子。如果您只想删除某些记录,请在哪里使用更多:
DELETE FROM people WHERE name = 'Joe';
如果您正在开发系统,那么明智的方法是使用“软删除”命令。具体来说,您实际上永远不会运行删除命令,而是创建一个已删除的列(传输数据),请再次检查列以避免不幸的删除。如果记录检测到错误或问题以再次检查记录,这也有助于快速检索。当然,这不是一个合适的备份选项。请对系统进行备份,因为您必须小心。
11。创建表
是的,顾名思义,此命令用于创建表,这是其语法:
CREATE TABLE people ( name TEXT, age, INTEGER, PRIMARY KEY(name) );
请注意列的列名,括号中的约束方式以及如何编写数据类型为列编写。还应指定主要键,这是标准数据库设计的第一个要求。
12。Alter表
Alter表语句用于修改表的结构。这有点有限,因为如果现有数据可能会导致冲突,则您的数据库将不允许更改表,例如,将字符串更改为整数。在这些情况下,您需要先编辑数据,然后修改表。这是一个示例:
ALTER TABLE people ADD height integer;
此示例将带有整数数据类型的“高度”列为“高度”人们桌子。您可以更改的内容没有限制。
13。滴桌
最终命令是Drop表。此命令类似于删除,但是它没有删除单个记录,而是删除表中的每个记录。这是使用它的方法:
DROP TABLE people;
该命令非常危险,因此在大多数情况下,如果出现意外错误,则应手动进行。
完成了13个命令,希望您在使用数据库时已经掌握了一些有用的技巧。请与我们分享您发现的其他SQL命令和技巧!