目录
SQL 基本语法
SQL 的基本语法由关键字、标识符、操作符和语句构成。SQL 语句通常由以下几个部分组成:
- 关键字(Keywords):如
SELECT
、FROM
、WHERE
等,用于指定要执行的操作。 - 标识符(Identifiers):如表名、列名等,用于指代数据库对象。
- 常量(Constants):用于指定数据值,如字符串、数字等。
- 操作符(Operators):用于执行数据比较、运算、逻辑操作等。
SQL 语法结构
SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column_name;
SELECT
:指定要检索的列。FROM
:指定查询的数据表。WHERE
:指定查询条件。ORDER BY
:指定排序顺序。
SQL 数据类型
SQL 数据库中的列有不同的数据类型,根据存储的数据类型选择合适的类型。常见的 SQL 数据类型如下:
- 整数类型:
INT
:整数。SMALLINT
:小整数。BIGINT
:大整数。
- 浮点数类型:
FLOAT
:浮动小数点数字。DOUBLE
:双精度浮动小数点数字。
- 字符类型:
CHAR(n)
:固定长度的字符数据。VARCHAR(n)
:可变长度的字符数据。
- 日期和时间类型:
DATE
:日期,格式YYYY-MM-DD
。TIME
:时间,格式HH:MM:SS
。DATETIME
:日期和时间,格式YYYY-MM-DD HH:MM:SS
。
- 二进制类型:
BLOB
:二进制大对象,用于存储二进制数据。
SQL 查询语句
SQL 查询语句用于从数据库中检索数据。最常用的查询语句是 SELECT
。
查询所有列
SELECT * FROM table_name;
*
表示选择表中的所有列。
查询特定列
SELECT column1, column2 FROM table_name;
column1
,column2
是你希望返回的列名。
查询带条件的数据
SELECT * FROM table_name WHERE condition;
WHERE
用于指定查询条件。
排序查询结果
SELECT * FROM table_name ORDER BY column_name ASC|DESC;
ORDER BY
用于排序结果,ASC
为升序,DESC
为降序。
限制查询结果数量
SELECT * FROM table_name LIMIT 10;
LIMIT
限制返回的记录数量。
SQL 约束
SQL 约束用于限制表中数据的类型和完整性。常见的约束包括:
- PRIMARY KEY:指定表的主键。
- FOREIGN KEY:指定外键,确保引用的表中的数据存在。
- NOT NULL:确保列不能包含 NULL 值。
- UNIQUE:确保列中的所有数据唯一。
- CHECK:确保列中的数据满足特定条件。
示例:创建表时添加约束
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT,
grade VARCHAR(10),
UNIQUE (name)
);
SQL 操作符
SQL 提供了多种操作符来进行数据的比较、逻辑运算、数学计算等。常见操作符包括:
比较操作符
=
:等于!=
或<>
:不等于<
:小于>
:大于<=
:小于或等于>=
:大于或等于BETWEEN
:在一个范围内LIKE
:匹配模式IN
:在某些值中
逻辑操作符
AND
:两个条件都为真时返回真。OR
:两个条件中至少有一个为真时返回真。NOT
:条件不为真时返回真。
算术操作符
+
:加-
:减*
:乘/
:除%
:取余
SQL 连接
SQL 支持多种连接类型来合并多个表中的数据:
- INNER JOIN:返回两个表中匹配的记录。
- LEFT JOIN(或 LEFT OUTER JOIN):返回左表中的所有记录及右表中的匹配记录。
- RIGHT JOIN(或 RIGHT OUTER JOIN):返回右表中的所有记录及左表中的匹配记录。
- FULL JOIN(或 FULL OUTER JOIN):返回两个表中所有记录。
示例:INNER JOIN
SELECT students.name, courses.name
FROM students
INNER JOIN enrollments ON students.id = enrollments.student_id
INNER JOIN courses ON enrollments.course_id = courses.id;
SQL 子查询
SQL 支持在查询中使用子查询,即查询的查询。子查询可以返回单一值或多个值。
示例:子查询
SELECT name, age
FROM students
WHERE age > (SELECT AVG(age) FROM students);
- 这个查询返回比学生平均年龄大的学生。
发表回复