跳到主要内容

SQL基础语法

什么是SQL

SQL(Structured Query Language)是结构化查询语言的缩写,它是一种用于管理关系型数据库的标准语言。SQL用于执行各种数据库操作,包括查询数据、插入数据、更新数据、删除数据、创建和修改数据库对象等。

SQL的分类

DDL(Data Definition Language) - 数据定义语言

用于定义和管理数据库对象,如数据库、表、视图、索引等。

常用命令:

  • CREATE:创建数据库对象
  • ALTER:修改数据库对象
  • DROP:删除数据库对象
  • TRUNCATE:截断表中的所有数据

DML(Data Manipulation Language) - 数据操作语言

用于操作数据库中的数据,如插入、更新、删除数据等。

常用命令:

  • SELECT:查询数据
  • INSERT:插入数据
  • UPDATE:更新数据
  • DELETE:删除数据

DCL(Data Control Language) - 数据控制语言

用于控制数据库的访问权限和安全级别。

常用命令:

  • GRANT:授予权限
  • REVOKE:撤销权限
  • DENY:拒绝权限

TCL(Transaction Control Language) - 事务控制语言

用于管理数据库事务。

常用命令:

  • BEGIN/START TRANSACTION:开始事务
  • COMMIT:提交事务
  • ROLLBACK:回滚事务
  • SAVEPOINT:设置保存点

SELECT语句

SELECT语句用于从数据库表中查询数据。

基本语法

SELECT column1, column2, ...
FROM table_name;

查询所有列

SELECT * FROM table_name;

带WHERE子句的查询

SELECT column1, column2, ...
FROM table_name
WHERE condition;

带ORDER BY子句的排序查询

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 ASC|DESC, column2 ASC|DESC, ...;

带LIMIT子句的限制查询

SELECT column1, column2, ...
FROM table_name
LIMIT number;

带OFFSET子句的分页查询

SELECT column1, column2, ...
FROM table_name
LIMIT number OFFSET offset_number;

INSERT语句

INSERT语句用于向数据库表中插入新数据。

基本语法

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

插入多条数据

INSERT INTO table_name (column1, column2, ...)
VALUES
(value1, value2, ...),
(value1, value2, ...),
...;

UPDATE语句

UPDATE语句用于更新数据库表中的现有数据。

基本语法

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

注意: 如果省略WHERE子句,将更新表中的所有行。

DELETE语句

DELETE语句用于删除数据库表中的数据。

基本语法

DELETE FROM table_name
WHERE condition;

注意: 如果省略WHERE子句,将删除表中的所有行。

CREATE语句

CREATE语句用于创建数据库对象,如数据库、表、视图、索引等。

创建数据库

CREATE DATABASE database_name;

创建表

CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
...
PRIMARY KEY (one_or_more_columns)
);

常用数据类型:

  • INT/INTEGER:整数
  • FLOAT/DOUBLE:浮点数
  • DECIMAL/NUMERIC:精确小数
  • VARCHAR/CHAR:字符串
  • DATE/DATETIME/TIMESTAMP:日期和时间
  • BOOLEAN:布尔值
  • BLOB/CLOB:二进制或大文本数据

常用约束:

  • PRIMARY KEY:主键约束
  • FOREIGN KEY:外键约束
  • NOT NULL:非空约束
  • UNIQUE:唯一约束
  • CHECK:检查约束
  • DEFAULT:默认值约束

创建视图

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

创建索引

CREATE INDEX index_name
ON table_name (column1, column2, ...);

ALTER语句

ALTER语句用于修改数据库对象的结构。

修改表

-- 添加列
ALTER TABLE table_name
ADD column_name datatype constraints;

-- 修改列
ALTER TABLE table_name
ALTER COLUMN column_name datatype constraints;

-- 删除列
ALTER TABLE table_name
DROP COLUMN column_name;

-- 添加约束
ALTER TABLE table_name
ADD CONSTRAINT constraint_name constraint_type (column_name);

-- 删除约束
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;

DROP语句

DROP语句用于删除数据库对象。

删除数据库

DROP DATABASE database_name;

删除表

DROP TABLE table_name;

删除视图

DROP VIEW view_name;

删除索引

DROP INDEX index_name;

TRUNCATE语句

TRUNCATE语句用于删除表中的所有数据,但保留表的结构。

TRUNCATE TABLE table_name;

注意: TRUNCATE与DELETE的区别是,TRUNCATE是DDL命令,速度更快,不会记录日志,且不能回滚;而DELETE是DML命令,速度较慢,会记录日志,可以回滚。

WHERE子句中的运算符

在WHERE子句中,可以使用以下运算符来指定条件:

比较运算符

  • =:等于
  • <>!=:不等于
  • <:小于
  • >:大于
  • <=:小于等于
  • >=:大于等于
  • BETWEEN:在某个范围内
  • LIKE:模糊匹配
  • IN:在指定的集合中
  • IS NULL:为空
  • IS NOT NULL:不为空

逻辑运算符

  • AND:逻辑与
  • OR:逻辑或
  • NOT:逻辑非

GROUP BY和HAVING子句

GROUP BY子句用于分组数据,HAVING子句用于筛选分组后的结果。

SELECT column1, aggregate_function(column2)
FROM table_name
WHERE condition
GROUP BY column1
HAVING condition;

常用聚合函数:

  • COUNT():计数
  • SUM():求和
  • AVG():平均值
  • MAX():最大值
  • MIN():最小值

JOIN语句

JOIN语句用于根据两个或多个表之间的关系查询数据。

INNER JOIN

内连接,返回两个表中匹配的行。

SELECT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.column = table2.column;

LEFT JOIN

左连接,返回左表中的所有行和右表中匹配的行。

SELECT column1, column2, ...
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;

RIGHT JOIN

右连接,返回右表中的所有行和左表中匹配的行。

SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2
ON table1.column = table2.column;

FULL JOIN

全连接,返回两个表中的所有行,不管是否匹配。

SELECT column1, column2, ...
FROM table1
FULL JOIN table2
ON table1.column = table2.column;

子查询

子查询是嵌套在另一个SQL语句中的查询。

作为WHERE子句的一部分

SELECT column1, column2, ...
FROM table1
WHERE column1 IN (SELECT column2 FROM table2 WHERE condition);

作为FROM子句的一部分

SELECT column1, column2, ...
FROM (SELECT column1, column2 FROM table1 WHERE condition) AS subquery_name;

作为SELECT子句的一部分

SELECT column1, (SELECT column2 FROM table2 WHERE table1.id = table2.id) AS column2_alias
FROM table1;

学习建议

SQL是学习数据库的基础,建议按照以下步骤学习:

  1. 掌握基本的SELECT语句和WHERE子句
  2. 学习INSERT、UPDATE、DELETE语句
  3. 了解CREATE、ALTER、DROP等DDL语句
  4. 学习JOIN语句,掌握多表查询
  5. 掌握GROUP BY、HAVING子句和聚合函数
  6. 学习子查询和高级查询技巧
  7. 实践练习,多编写SQL查询语句
  8. 了解不同数据库系统的SQL方言差异