- SQL 教程
- SQL - 首页
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 数据库
- SQL - 语法
- SQL - 数据类型
- SQL - 运算符
- SQL - 表达式
- SQL 数据库
- SQL - 创建数据库
- SQL - 删除数据库
- SQL - 选择数据库
- SQL - 重命名数据库
- SQL - 显示数据库
- SQL - 备份数据库
- SQL 表
- SQL - 创建表
- SQL - 显示表
- SQL - 重命名表
- SQL - 清空表
- SQL - 克隆表
- SQL - 临时表
- SQL - 修改表
- SQL - 删除表
- SQL - 删除表
- SQL - 约束
- SQL 查询
- SQL - 插入查询
- SQL - 选择查询
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - 更新查询
- SQL - 删除查询
- SQL - 排序结果
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布尔 (BIT) 运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY, ALL 运算符
- SQL - EXISTS 运算符
- SQL - CASE
- SQL - NOT 运算符
- SQL - 不等于
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用连接
- SQL - 内连接
- SQL - 左连接
- SQL - 右连接
- SQL - 交叉连接
- SQL - 全连接
- SQL - 自连接
- SQL - 删除连接
- SQL - 更新连接
- SQL - 左连接 vs 右连接
- SQL - Union vs Join
- SQL 密钥
- SQL - 唯一键
- SQL - 主键
- SQL - 外键
- SQL - 组合键
- SQL - 备选键
- SQL 索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL - 唯一索引
- SQL - 聚集索引
- SQL - 非聚集索引
- 高级 SQL
- SQL - 通配符
- SQL - 注释
- SQL - 注入
- SQL - 托管
- SQL - MIN & MAX
- SQL - NULL 函数
- SQL - 检查约束
- SQL - 默认约束
- SQL - 存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL - 自动递增
- SQL - 日期 & 时间
- SQL - 游标
- SQL - 公共表表达式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数值函数
- SQL - 文本 & 图片函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL - JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问答
- SQL - 快速指南
- SQL - 有用函数
- SQL - 有用资源
- SQL - 讨论
SQL - 语法
什么是 SQL 语法?
SQL 语法是一套独特的规则和指南,编写 SQL 语句时必须遵循这些规则和指南。本教程通过列出所有基本的 SQL 语法,使您快速入门 SQL。
所有 SQL 语句都以 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP、CREATE、USE、SHOW 等关键字中的任何一个开头,所有语句都以分号 (;) 结尾。
大小写敏感性
这里需要注意的最重要的一点是,SQL 不区分大小写,这意味着SELECT 和Select 在 SQL 语句中具有相同的含义。然而,MySQL 会区分表名。因此,如果您使用的是 MySQL,则需要按照数据库中存在的名称提供表名。
SQL 表
让我们考虑一个名为 CUSTOMERS 的表(如下所示),并将其用作参考,以便在同一个表上演示所有 SQL 语句。
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
SQL 语句
本教程列出了各种 SQL 语句。它们中的大多数与 MySQL、Oracle、Postgres 和 SQL Server 数据库兼容。
所有 SQL 语句都需要在每个语句的末尾使用分号 (;)。分号是分隔不同 SQL 语句的标准方法,允许在一行中包含多个 SQL 语句。
本教程中给出的所有 SQL 语句都已在 Linux 和 Windows 上的 MySQL 服务器上进行了测试。
SQL CREATE DATABASE 语句
要在数据库中存储数据,您首先需要创建它。这对于区分属于某个组织的数据是必要的。
您可以使用以下语法创建数据库:
CREATE DATABASE database_name;
让我们尝试使用CREATE DATABASE 语句在 SQL 中创建一个示例数据库sampleDB:
CREATE DATABASE sampleDB
SQL USE 语句
创建数据库后,需要使用它才能开始相应地存储数据。以下是将当前位置更改为所需数据库的语法:
USE database_name;
我们可以通过在 SQL 中使用USE 语句将前面创建的 sampleDB 设置为默认数据库:
USE sampleDB;
SQL DROP DATABASE 语句
如果数据库不再需要,您也可以删除它。要删除/删除数据库,请使用以下语法:
DROP DATABASE database_name;
您也可以使用 SQL 中的DROP DATABASE 语句删除 sampleDB 数据库:
DROP DATABASE sampleDB;
SQL CREATE TABLE 语句
在 SQL 驱动的数据库中,数据以结构化的方式存储,即表格的形式。要创建表,使用以下语法:
CREATE TABLE table_name( column1 datatype, column2 datatype, column3 datatype, ..... columnN datatype, PRIMARY KEY( one or more columns ) );
下面的代码块是一个示例,它创建了上面给出的 CUSTOMERS 表,其中 ID 作为主键,NOT NULL 是约束,表示在创建此表中的记录时这些字段不能为 NULL:
CREATE TABLE CUSTOMERS( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
SQL DESC 语句
数据库中的每个表都有其自身的结构。要显示数据库表的结构,我们使用 DESC 语句。以下是语法:
DESC table_name;
但是,DESC 语句仅适用于少数 RDBMS 系统;因此,让我们通过在 MySQL 服务器上使用 DESC 语句来看一个示例:
DESC CUSTOMERS;
SQL INSERT INTO 语句
SQL INSERT INTO 语句用于将数据插入数据库表中。以下是语法:
INSERT INTO table_name( column1, column2....columnN) VALUES ( value1, value2....valueN);
以下示例语句将在空的 CUSTOMERS 表中创建七条记录。
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (2, 'Khilan', 25, 'Delhi', 1500), (3, 'kaushik', 23, 'Kota', 2000), (4, 'Chaitali', 25, 'Mumbai', 6500), (5, 'Hardik', 27, 'Bhopal', 8500), (6, 'Komal', 22, 'Hyderabad', 4500), (7, 'Muffy', 24, 'Indore', 10000);
SQL SELECT 语句
为了从数据库表中检索存储数据的 result-sets,我们使用 SELECT 语句。以下是语法:
SELECT column1, column2....columnN FROM table_name;
要从 CUSTOMERS 表中检索数据,我们使用如下所示的 SELECT 语句。
SELECT * FROM CUSTOMERS;
SQL UPDATE 语句
当数据库表中存储的数据已过时且需要更新而无需删除表时,我们使用 UPDATE 语句。以下是语法:
UPDATE table_name SET column1 = value1, column2 = value2....columnN=valueN [ WHERE CONDITION ];
为了查看示例,以下查询将更新 ID 号为 6 的客户的地址。
UPDATE CUSTOMERS SET ADDRESS = 'Pune' WHERE ID = 6;
SQL DELETE 语句
无需从数据库中删除整个表,您还可以通过应用条件来删除数据的特定部分。这是使用 DELETE FROM 语句完成的。以下是语法:
DELETE FROM table_name WHERE {CONDITION};
以下代码包含一个查询,该查询将删除 ID 为 6 的客户。
DELETE FROM CUSTOMERS WHERE ID = 6;
SQL DROP TABLE 语句
当不再需要时,要从数据库中完全删除表,请使用以下语法:
DROP TABLE table_name;
此查询将从数据库中删除 CUSTOMERS 表。
DROP TABLE CUSTOMERS;
SQL TRUNCATE TABLE 语句
TRUNCATE TABLE 语句在 SQL 中用于删除表的数据,但不删除表本身。使用此 SQL 语句时,表将像空表一样保留在数据库中。以下是语法:
TRUNCATE TABLE table_name;
以下查询将删除 CUSTOMERS 表的所有记录:
TRUNCATE TABLE CUSTOMERS;
SQL ALTER TABLE 语句
ALTER TABLE 语句用于更改表的结构。例如,您可以使用此语句添加、删除和修改列的数据。以下是语法:
ALTER TABLE table_name {ADD|DROP|MODIFY} column_name {data_type};
以下是如何使用 ALTER TABLE 命令向 CUSTOMERS 表添加新列的示例:
ALTER TABLE CUSTOMERS ADD SEX char(1);
SQL ALTER TABLE 语句(重命名)
ALTER TABLE 语句也用于更改表名。使用以下语法:
ALTER TABLE table_name RENAME TO new_table_name;
以下是如何使用 ALTER TABLE 命令重命名 CUSTOMERS 表的示例:
ALTER TABLE CUSTOMERS RENAME TO NEW_CUSTOMERS;
SQL DISTINCT 子句
数据库中的 DISTINCT 子句用于识别列中的非重复数据。使用 SELECT DISTINCT 语句,您可以从列中检索不同的值。以下是语法:
SELECT DISTINCT column1, column2....columnN FROM table_name;
例如,让我们将DISTINCT 关键字与 SELECT 查询一起使用。重复的薪水 2000.00 只会检索一次,而其他记录将被忽略。
SELECT DISTINCT SALARY FROM CUSTOMERS ORDER BY SALARY;
SQL WHERE 子句
WHERE 子句用于通过应用条件来过滤表中的行。以下是用于从表中检索已过滤行的语法:
SELECT column1, column2....columnN FROM table_name WHERE CONDITION;
以下查询是一个示例,使用 SELECT 语句从 CUSTOMERS 表中获取薪水大于 2000 的所有记录:
SELECT ID, NAME, SALARY FROM CUSTOMERS WHERE SALARY > 2000;
SQL AND/OR 运算符
AND/OR 运算符用于在 WHERE 子句中应用多个条件。以下是语法:
SELECT column1, column2....columnN FROM table_name WHERE CONDITION-1 {AND|OR} CONDITION-2;
以下查询是一个示例,使用 SELECT 语句从 CUSTOMERS 表中获取薪水大于 2000 且年龄小于 25 的所有记录:
SELECT ID, NAME, SALARY FROM CUSTOMERS WHERE SALARY > 2000 AND age < 25;
SQL IN 子句
IN 运算符用于使用 WHERE 子句检查数据是否存在于列中。以下是语法:
SELECT column1, column2....columnN FROM table_name WHERE column_name IN (val-1, val-2,...val-N);
例如,我们想使用IN运算符显示名称等于'Khilan'、'Hardik'和'Muffy'(字符串值)的记录,如下所示:
SELECT * FROM CUSTOMERS WHERE NAME IN ('Khilan', 'Hardik', 'Muffy');
SQL BETWEEN 子句
BETWEEN运算符用于使用WHERE子句从表中检索落在特定范围内的值。语法如下:
SELECT column1, column2....columnN FROM table_name WHERE column_name BETWEEN val-1 AND val-2;
让我们尝试使用BETWEEN运算符检索AGE介于20到25之间的CUSTOMERS记录。
SELECT * FROM CUSTOMERS WHERE AGE BETWEEN 20 AND 25;
SQL LIKE 子句
LIKE运算符用于使用WHERE子句从表中检索与特定模式匹配的值。语法如下:
SELECT column1, column2....columnN FROM table_name WHERE column_name LIKE { PATTERN };
例如,让我们尝试显示CUSTOMERS表中SALARY以200开头的所有记录。
SELECT * FROM CUSTOMERS WHERE SALARY LIKE '200%';
SQL ORDER BY 子句
ORDER BY子句用于按给定/指定的顺序排列列值。语法如下:
SELECT column1, column2....columnN FROM table_name WHERE CONDITION ORDER BY column_name {ASC|DESC};
在下面的示例中,我们尝试按客户名称的字母顺序升序排列结果:
SELECT * FROM CUSTOMERS ORDER BY NAME ASC;
SQL GROUP BY 子句
GROUP BY子句用于将列的值组合在一起。语法如下:
SELECT SUM(column_name) FROM table_name WHERE CONDITION GROUP BY column_name;
我们尝试按客户的年龄对客户进行分组,并使用以下查询计算每个年龄组的平均工资:
SELECT ADDRESS, AGE, SUM(SALARY) AS TOTAL_SALARY FROM CUSTOMERS GROUP BY ADDRESS, AGE;
SQL COUNT 函数
COUNT函数给出指定列中非空值的个数。语法如下:
SELECT COUNT(column_name) FROM table_name WHERE CONDITION;
让我们看一个例子:
SELECT AGE, COUNT(Name) FROM CUSTOMERS GROUP BY AGE;
SQL HAVING 子句
HAVING子句也用于通过应用条件来过滤一组行。语法如下:
SELECT SUM(column_name) FROM table_name WHERE CONDITION GROUP BY column_name HAVING (arithematic function condition);
在下面的示例中,我们尝试检索CUSTOMERS表中工资总和大于5000的所有记录:
SELECT ADDRESS, AGE, SUM(SALARY) AS TOTAL_SALARY FROM CUSTOMERS GROUP BY ADDRESS, AGE HAVING TOTAL_SALARY >=5000 ORDER BY TOTAL_SALARY DESC;
SQL CREATE INDEX 语句
要创建数据库表的索引,SQL提供CREATE INDEX语句。语法如下:
CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...columnN);
让我们使用以下查询为现有CUSTOMERS表中名为'NAME'的列创建一个索引:
CREATE INDEX sample_index on CUSTOMERS(NAME);
SQL DROP INDEX 语句
DROP INDEX语句用于从表中删除索引。语法如下:
DROP INDEX index_name ON table_name;
让我们使用以下查询删除之前为现有CUSTOMERS表中名为'NAME'的列创建的索引:
DROP INDEX sample_index on CUSTOMERS;