一个 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_1
和column_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
,MIN
或SUM
等集合函数的查询结果进行排序。
下面的语法会计算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 命令,请在下面的评论中询问或提出建议。