如何管理 SQL 数据库

一个 SQL Cheat 页面

介绍

SQL 数据库配备了您需要添加、修改、删除和查询数据的所有命令,该 cheat sheet-style 指南提供了一些最常用的 SQL 命令的快速参考。

** 如何使用此指南:**

  • 本指南是用自含命令行片段的 cheat sheet 格式
  • 跳到任何与您试图完成 任务相关的部分 * 当您在本指南的命令中看到突出文本时,请记住,此文本应指向 your own 数据库中的列、表和数据。
  • 在本指南中,所提供的示例数据值都被包装成(```) 。

请注意,虽然SQL被认可为标准,但大多数SQL数据库程序都有自己的专有扩展。本指南使用MySQL作为示例的关系数据库管理系统(RDBMS),但所给出的命令将与其他关系数据库程序,包括PostgreSQL,MariaDB和SQLite一起工作。

打开数据库指南(使用 Socket/Trust 身份验证)

默认情况下,Ubuntu 18.04 上的 root MySQL 用户可以使用以下命令进行无密码的身份验证:

1sudo mysql

要打开 PostgreSQL 提示,请使用以下命令. 此示例会将您登录为 postgres 用户,这是包含的超级用户角色,但您可以用任何已创建的角色来代替:

1sudo -u postgres psql

打开数据库指南(使用密码身份验证)

如果您的 root MySQL 用户设置为使用密码进行身份验证,则可以使用以下命令:

1mysql -u root -p

如果您已经为您的数据库设置了非根用户帐户,您也可以使用此方法作为该用户登录:

1mysql -u user -p

如果您想作为命令的一部分提供您的密码,请立即按照-p选项与您的密码,它们之间没有空间:

1mysql -u root -ppassword

创建一个数据库

以下命令将创建具有默认设置的数据库。

1CREATE DATABASE database_name;

如果您希望您的数据库使用与默认值不同的字符集和符串,则可以指定使用此语法的字符集:

1CREATE DATABASE database_name CHARACTER SET character_set COLLATE collation;

数据库列表

若要查看 MySQL 或 MariaDB 安装中存在的数据库,请运行以下命令:

1SHOW DATABASES;

在 PostgreSQL 中,您可以使用以下命令查看哪些数据库已创建:

1\list

删除数据库

若要删除数据库,包括其中的任何表和数据,请运行按照此结构的命令:

1DROP DATABASE IF EXISTS database;

创建用户

若要为您的数据库创建用户配置文件,而不指定任何权限,请执行以下命令:

1CREATE USER username IDENTIFIED BY 'password';

PostgreSQL 使用类似但略有不同的语法:

1CREATE USER user WITH PASSWORD 'password';

如果你想创建一个新用户并在一个命令中授予他们特权,你可以通过发出一个GRANT声明来做到这一点:下面的命令会创建一个新的用户,并授予他们在 RDBMS 中每个数据库和表的完整特权:

1GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

在大多数RDBMS中,这个关键字是可选的,并且可以相当于写成:

1GRANT ALL ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

但是,请注意,在启用 严格 SQL 模式时,必须使用PRIVILEGES关键字来授予此类特权。

删除用户

使用以下语法删除数据库用户配置文件:

1DROP USER IF EXISTS username;

请注意,此命令默认情况下不会删除已删除的用户创建的任何表,并且尝试访问这些表可能会导致错误。

选择一个数据库

在您创建表之前,您必须首先告诉 RDBMS 您想要创建表的数据库。

1USE database;

在 PostgreSQL 中,您必须使用以下命令来选择您想要的数据库:

1\connect database

创建桌子

以下命令结构创建一个名为的新表,并包含两个列,每个列都有自己的特定数据类型:

1CREATE TABLE table ( column_1 column_1_data_type, column_2 column_2_data_taype );

删除一张桌子

若要完全删除表,包括所有数据,请执行以下操作:

1DROP TABLE IF EXISTS table

将数据插入表格

使用以下语法来填充一个数据行的表:

1INSERT INTO table ( column_A, column_B, column_C ) VALUES ( 'data_A', 'data_B', 'data_C' );

您也可以使用单个命令填充具有多个数据行的表,如下:

1INSERT INTO table ( column_A, column_B, column_C ) VALUES ( 'data_1A', 'data_1B', 'data_1C' ),  ( 'data_2A', 'data_2B', 'data_2C' ), ( 'data_3A', 'data_3B', 'data_3C' );

从表中删除数据

若要从表中删除数据行,请使用以下命令结构. 请注意,应该是您要删除的行中指定的中的值:

1DELETE FROM table WHERE column='value';

<$>[注] 注: 如果您不将WHERE条款包含在DELETE语句中,如下示例所示,则将删除表中的所有数据,但不会删除列或表本身:

1DELETE FROM table;

美元

在表中更改数据

请注意,命令末尾的WHERE条款告诉SQL要更新哪个行。

<$>[注] 注: 如果您未能在更新声明中包含WHERE条款,则该命令将取代表的每个行所包含的数据。

1UPDATE table SET column_1 = value_1, column_2 = value_2 WHERE column_A=value;

插入一列

以下命令语法会将新列添加到表中:

1ALTER TABLE table ADD COLUMN column data_type;

删除一列

遵循此结构的命令将从表中删除一个列:

1ALTER TABLE table DROP COLUMN column;

执行基本请求

若要查看表中的单个列中的所有数据,请使用以下语法:

1SELECT column FROM table;

若要查询来自同一表的多个列,请用字符串分隔列名称:

1SELECT column_1, column_2 FROM table;

您也可以通过用星座(*)取代列的名称来查询表中的每个列。

1SELECT * FROM table;

使用Where条款

您可以通过附加SELECT语句与WHERE条款来缩小查询的结果,例如:

1SELECT column FROM table WHERE conditions_that_apply;

例如,您可以使用以下语法查询单行中的所有数据. 请注意,应该是指定的和您要查询的行中的值:

1SELECT * FROM table WHERE column = value;

与比较操作员合作

WHERE条款中的比较运算符定义了指定的列应该如何与值进行比较,以下是一些常见的SQL比较运算符:

运算器:


与野生卡片合作

SQL 允许使用 wildcard 字符,如果您试图在表中找到特定条目,但不确定该条目具体是什么,这些条目是有用的。

星座(*)是代表所有的位置,这将查询表中的每个列:

1SELECT * FROM table;

百分比符号(%)表示零或更多未知字符。

1SELECT * FROM table WHERE column LIKE val%;

底分(_)用来表示一个单一的未知字符:

1SELECT * FROM table WHERE column LIKE v_lue;

在一列中计入条目

使用「COUNT」函数来查找特定列中的条目数. 以下语法将返回包含在「列」中的值总数:

1SELECT COUNT(column) FROM table;

您可以通过附加一个WHERE条款来缩小一个COUNT函数的结果,如下:

1SELECT COUNT(column) FROM table WHERE column=value;

在列中找到平均值

AVG函数用于在特定列中保持的值中找到平均值(在这种情况下,平均值)。

1SELECT AVG(column) FROM table;

在列中找到值的总和

SUM函数用于查找列中所有数值的总和:

1SELECT SUM(column) FROM table;

AVG函数一样,如果在一列持有字符串值上运行SUM函数,则可能返回错误或仅返回0,取决于您的 RDBMS。

在列中找到最大值

若要查找列中最大的数值或字母字母中的最后一个值,请使用MAX函数:

1SELECT MAX(column) FROM table;

在列中找到最小的值

若要查找列中最小的数值或字母字母中的第一个值,请使用MIN函数:

1SELECT MIN(column) FROM table;

按条款排序结果

下面的查询语法返回了从column_1column_2的值,并按column_1中的值以上升顺序或字母顺序对字符串值进行排序:

1SELECT column_1, column_2 FROM table ORDER BY column_1;

要执行相同的操作,但以下行或逆行字母顺序排序结果,请附上DESC的查询:

1SELECT column_1, column_2 FROM table ORDER BY column_1 DESC;

按条款组分类结果

GROUP BY 条款与ORDER BY 条款类似,但用于对包含COUNT,MAX,MINSUM等集合函数的查询结果进行排序。

下面的语法会计算Colon_2中的匹配值的数目,并以升值或字母顺序组合它们:

1SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2;

要执行相同的操作,但以下行或逆行字母顺序组合结果,请附上DESC的查询:

1SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2 DESC;

寻找多个表与 JOIN 条款

「JOIN」条款用于创建组合两个或多个表的行:

1SELECT table_1.column_1, table_2.column_2 FROM table_1 JOIN table_2 ON table_1.common_column=table_2.common_column;

此示例为INTER JOIN条款.一个INTER JOIN条款将返回两个表中具有匹配值的所有记录,但不会显示没有匹配值的任何记录。

可以使用 outer「JOIN」条款返回两个表中的所有记录,包括其他表中没有相应匹配的值,外部的「JOIN」条款被写成「LEFT JOIN」或「RIGHT JOIN」。

在外部JOIN条款中,左表是FROM条款中提及的,右表是JOIN条款之后提及的任何其他表。下列条款将显示来自table_1的每一个记录,并且仅显示来自table_2的匹配值。在结果集中,任何在table_2中没有匹配的值都将显示为NULL:

1SELECT table_1.column_1, table_2.column_2 FROM table_1 LEFT JOIN table_2 ON table_1.common_column=table_2.common_column;

RIGHT JOIN条款与LEFT JOIN条款相同,但它会打印右表中的所有结果,并仅打印左侧的匹配值:

1SELECT table_1.column_1, table_2.column_2 FROM table_1 RIGHT JOIN table_2 ON table_1.common_column=table_2.common_column;

将多个 SELECT 声明与 UNION 条款相结合

一个UNION运算符可用于将两个(或多个)SELECT陈述的结果合并为一个结果集:

1SELECT column_1 FROM table UNION SELECT column_2 FROM table;

此外,UNION条款可以将两个(或多个)SELECT陈述,以查询不同的表,合并到相同的结果集中:

1SELECT column FROM table_1 UNION SELECT column FROM table_2;

结论

本指南涵盖了 SQL 中的一些用于管理数据库、用户和表的更常见命令,并查询这些表中的内容. 然而,有许多条款和运算符的组合,它们都产生了独特的结果集。

此外,如果您希望在本指南中看到常见的 SQL 命令,请在下面的评论中询问或提出建议。

Published At
Categories with 技术
comments powered by Disqus