1. 数据库、表、列的创建与管理
在SQL中,数据库是一个数据的集合,包含了多个表、视图、索引、存储过程等对象。每个表由若干列(字段)组成,表中的数据行代表记录。管理数据库和表的结构是SQL的基础操作。
1.1 创建数据库
SQL中使用 CREATE DATABASE
语句来创建一个新的数据库。数据库创建后,可以在该数据库中执行其他SQL操作。
CREATE DATABASE IF NOT EXISTS database_name;
IF NOT EXISTS
:如果数据库已经存在,则不执行任何操作。database_name
:数据库的名称,需遵循数据库命名规范。
1.2 删除数据库
可以使用 DROP DATABASE
删除数据库,删除数据库将清除所有数据和表。
DROP DATABASE IF EXISTS database_name;
IF EXISTS
:如果数据库存在,则删除,否则不执行任何操作。
1.3 创建表
创建表是SQL的基本操作之一。CREATE TABLE
语句用于定义表的结构,包括表的列、数据类型及其他约束条件。
table_name
:表名。column1
,column2
:列名。datatype
:列的数据类型(如INT
,VARCHAR(255)
,DATE
等)。constraint
:列的约束(如PRIMARY KEY
,NOT NULL
,UNIQUE
等)。
示例:创建一个简单的用户表。
CREATE TABLE users (user_id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,password VARCHAR(255) NOT NULL,email VARCHAR(100),created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
user_id
:整数类型,自动递增,并作为主键。username
:字符串类型,不能为空且唯一。password
:字符串类型,不能为空。email
:字符串类型,可为空。created_at
:时间戳,默认值为当前时间。
1.4 删除表
使用 DROP TABLE
删除表,删除表将删除表中的所有数据及结构。
DROP TABLE IF EXISTS table_name;
1.5 修改表结构
有时我们需要修改已经创建的表,可以使用 ALTER TABLE
语句。
- 添加列:
ALTER TABLE table_name ADD column_name datatype [constraint];
- 删除列:
ALTER TABLE table_name DROP COLUMN column_name;
- 修改列:
ALTER TABLE table_name MODIFY COLUMN column_name new_datatype [constraint];
示例:向 users
表中添加一个 age
列:
ALTER TABLE users ADD age INT;
2. 基本的SQL语句:SELECT, INSERT, UPDATE, DELETE
SQL的核心操作是数据查询(SELECT
)、数据插入(INSERT
)、数据更新(UPDATE
)和数据删除(DELETE
)。
2.1 SELECT:查询数据
SELECT
语句用于从一个或多个表中查询数据,支持多种查询操作,如选择列、过滤数据、排序等。
- 基础查询:
SELECT column1, column2, ... FROM table_name;
- 查询所有列:
SELECT * FROM table_name;
- 查询条件:
SELECT column1, column2 FROM table_name WHERE condition;
- 示例:查询
users
表中所有用户名和电子邮件地址:
SELECT username, email FROM users;
2.2 INSERT:插入数据
INSERT
语句用于向表中插入数据。可以一次插入一行或多行数据。
- 插入单行数据:
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
- 插入多行数据:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1a, value2a, ...),(value1b, value2b, ...),...;
示例:向 users
表插入一个新的用户:
INSERT INTO users (username, password, email)
VALUES ('john_doe', 'password123', 'john.doe@example.com');
2.3 UPDATE:更新数据
UPDATE
语句用于修改表中已存在的记录。通过 WHERE
子句指定要更新的记录。
- 更新单行或多行数据:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
示例:更新 users
表中 john_doe
用户的电子邮件地址:
UPDATE users SET email = 'john.doe@newdomain.com' WHERE username = 'john_doe';
注意:如果省略
WHERE
子句,所有记录都会被更新。因此,在执行UPDATE
操作时要特别小心,避免错误地更新所有记录。
2.4 DELETE:删除数据
DELETE
语句用于删除表中的一条或多条记录。和 UPDATE
一样,WHERE
子句用于指定删除条件。
- 删除单行或多行数据:
DELETE FROM table_name WHERE condition;
示例:删除 users
表中 john_doe
用户的数据:
DELETE FROM users WHERE username = 'john_doe';
注意:如果省略
WHERE
子句,所有记录都会被删除。使用时需要格外小心,避免删除整个表的数据。
3. WHERE 子句、排序和分组(ORDER BY, GROUP BY)
SQL的 WHERE
子句用于过滤查询结果,ORDER BY
用于排序结果,GROUP BY
用于对结果进行分组操作。
3.1 WHERE 子句:条件过滤
WHERE
子句用于指定查询的条件,仅返回符合条件的记录。它支持多种条件操作符和逻辑运算符。
-
常见条件运算符:
=
:等于<>
或!=
:不等于>
:大于<
:小于>=
:大于等于<=
:小于等于BETWEEN ... AND ...
:在某范围内IN
:在某一集合内LIKE
:模式匹配(常用于字符串)IS NULL
:为空
-
示例:查询年龄大于25岁的所有用户:
SELECT username, age FROM users WHERE age > 25;
- 组合多个条件:使用
AND
,OR
组合多个条件。
SELECT * FROM users WHERE age > 25 AND email LIKE '%@example.com';
3.2 ORDER BY:排序
ORDER BY
用于对查询结果进行排序,默认按升序排列(ASC
),如果需要降序排列,则使用 DESC
。
- 按升序排序:
SELECT * FROM users ORDER BY age;
- 按降序排序:
SELECT * FROM users ORDER BY age DESC;
- 多列排序:可以指定多个列进行排序。
SELECT * FROM users ORDER BY age DESC, username ASC;
3.3 GROUP BY:分组
GROUP BY
用于将查询结果按某一列的值进行分组,并且常与聚合函数(如 COUNT
,SUM
,AVG
,MAX
,MIN
等)一起使用。
- 基础分组查询:
SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;
- 示例:统计
users
表中每个年龄段的用户数量:
SELECT age, COUNT(*) FROM users GROUP BY age;
- 使用
HAVING
进行条件过滤:HAVING
用于过滤分组后的结果,它通常与GROUP BY
一起使用,而WHERE
子句用于过滤原始数据。
SELECT age, COUNT(*) FROM users GROUP BY age HAVING COUNT(*) > 1;
总结
SQL基础语法是关系型数据库的核心,涉及数据库的创建、表结构的定义、数据的增删改查等操作。掌握这些基本语法是每位开发者与数据库高效交互的基础。在实际开发中,熟练使用 SELECT
查询语句、INSERT
插入数据、UPDATE
更新数据、DELETE
删除数据以及合理利用 WHERE
子句、排序(ORDER BY
)和分组(GROUP BY
)能够大大提高开发效率和查询