跳到主要内容

SQL 基础语法和数据类型

本章将介绍 SQL 的基本语法规则和常用数据类型。

SQL 语法规则

基本语句结构

SQL 语句由动词、目标和条件三部分组成:

动词(SELECT) 目标(first_name) 目标(last_name) 
FROM 目标(employees)
WHERE 条件(salary > 5000);

语句终止

  • SQL 语句以分号 ; 终止
  • 分号用于分隔多个语句
SELECT * FROM users;
SELECT * FROM products;

大小写

  • SQL 关键字不区分大小写:SELECT、select、SELECT 都相同
  • 表名和列名:取决于数据库配置(通常不区分大小写)
  • 字符串值区分大小写'Hello''hello' 不同
-- 以下三种写法等价
SELECT * FROM users;
select * from users;
SeLeCt * FrOm UsErS;

为提高可读性,建议:

  • 关键字使用大写:SELECTWHEREFROM
  • 表名和列名使用小写:usersuser_name

注释

-- 单行注释
SELECT * FROM users; -- 查询所有用户

/*
多行注释
这是SQL中的注释
*/
SELECT name FROM users;

SQL 关键字分类

数据查询

  • SELECT:查询数据
  • DISTINCT:去重
  • WHERE:条件过滤
  • ORDER BY:排序
  • LIMIT:限制结果数量

数据定义

  • CREATE:创建数据库/表
  • ALTER:修改表结构
  • DROP:删除数据库/表
  • TRUNCATE:清空表

数据操作

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

其他

  • JOIN:连接表
  • GROUP BY:分组
  • HAVING:分组过滤
  • AS:别名

数据类型

1. 数值类型

整数类型

数据类型描述存储空间
TINYINT微整数,-128 到 1271 字节
SMALLINT小整数,-32768 到 327672 字节
INT整数,-21亿到21亿4 字节
BIGINT大整数8 字节
-- 创建整数列
CREATE TABLE employees (
id INT,
age SMALLINT,
salary BIGINT
);

浮点数类型

数据类型描述存储空间
FLOAT单精度浮点4 字节
DOUBLE双精度浮点8 字节
DECIMAL(p,s)精确数值可变
-- p: 总位数, s: 小数位数
-- DECIMAL(10,2) 表示总共10位,小数2位
CREATE TABLE products (
price DECIMAL(10, 2),
discount FLOAT,
rating DOUBLE
);

2. 字符串类型

数据类型描述最大长度
CHAR(n)固定长度255 字符
VARCHAR(n)可变长度65535 字符
TEXT长文本65535 字符
LONGTEXT超长文本4GB
CREATE TABLE users (
name CHAR(20), -- 固定20字符,不足用空格填充
username VARCHAR(50), -- 可变长度,最多50字符
bio TEXT -- 长文本
);

注意:CHAR 和 VARCHAR 的选择

  • CHAR:固定长度,如性别(M/F)、手机号
  • VARCHAR:可变长度,如用户名、地址

3. 日期和时间类型

数据类型描述格式
DATE日期'2024-01-01'
TIME时间'12:30:00'
DATETIME日期时间'2024-01-01 12:30:00'
TIMESTAMP时间戳1970-01-01 起的秒数
YEAR年份'2024'
CREATE TABLE orders (
order_date DATE,
order_time TIME,
created_at DATETIME,
updated_at TIMESTAMP
);

4. 布尔类型

数据类型描述
BOOLEAN / BOOL布尔值,TRUE 或 FALSE
BIT位类型
CREATE TABLE users (
is_active BOOLEAN,
is_admin BOOL
);

5. 其他类型

数据类型描述
BLOB二进制数据(图片、文件)
JSONJSON 数据(MySQL 5.7+)
UUID通用唯一标识符
-- 存储头像图片
CREATE TABLE user_profiles (
avatar BLOB
);

-- 存储 JSON 数据
CREATE TABLE settings (
preferences JSON
);

SQL 基本操作

1. SELECT 查询

-- 查询所有列
SELECT * FROM users;

-- 查询指定列
SELECT name, email FROM users;

-- 带别名
SELECT name AS 姓名, email AS 邮箱 FROM users;

2. INSERT 插入

-- 插入单条数据
INSERT INTO users (name, email, age) VALUES ('张三', '[email protected]', 25);

-- 插入多条数据
INSERT INTO users (name, email, age) VALUES
('李四', '[email protected]', 30),
('王五', '[email protected]', 28);

3. UPDATE 更新

-- 更新数据(注意加 WHERE 条件)
UPDATE users SET age = 26 WHERE name = '张三';

-- 更新多列
UPDATE users SET age = 27, email = '[email protected]' WHERE id = 1;

4. DELETE 删除

-- 删除数据(注意加 WHERE 条件)
DELETE FROM users WHERE id = 1;

-- 危险!删除所有数据
DELETE FROM users;

5. CREATE 创建表

CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(50) UNIQUE,
age INT DEFAULT 18,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

WHERE 条件

比较运算符

-- 等于
SELECT * FROM users WHERE age = 25;

-- 不等于
SELECT * FROM users WHERE age != 25;

-- 大于、小于
SELECT * FROM users WHERE age > 18;
SELECT * FROM users WHERE age < 60;

-- 大于等于、小于等于
SELECT * FROM users WHERE age >= 18;
SELECT * FROM users WHERE age <= 60;

逻辑运算符

-- AND:同时满足
SELECT * FROM users WHERE age >= 18 AND age <= 30;

-- OR:满足任一条件
SELECT * FROM users WHERE country = 'USA' OR country = 'China';

-- NOT:取反
SELECT * FROM users WHERE NOT country = 'USA';

其他条件

-- IN:在列表中
SELECT * FROM users WHERE country IN ('USA', 'China', 'Japan');

-- BETWEEN:在范围内
SELECT * FROM users WHERE age BETWEEN 18 AND 30;

-- LIKE:模糊匹配
-- % 表示任意字符
SELECT * FROM users WHERE name LIKE '张%';
-- _ 表示单个字符
SELECT * FROM users WHERE name LIKE '张_';

-- IS NULL / IS NOT NULL
SELECT * FROM users WHERE email IS NOT NULL;

ORDER BY 排序

-- 升序(默认)
SELECT * FROM users ORDER BY age;

-- 降序
SELECT * FROM users ORDER BY age DESC;

-- 多列排序
SELECT * FROM users ORDER BY country ASC, age DESC;

LIMIT 限制结果

-- 只取前5条
SELECT * FROM users LIMIT 5;

-- 跳过前10条,取5条(分页)
SELECT * FROM users LIMIT 10, 5;

-- 从第0条开始,取5条
SELECT * FROM users LIMIT 5 OFFSET 10;

综合示例

-- 查询美国用户,按年龄降序排列,只取前10条
SELECT name, email, age, country
FROM users
WHERE country = 'USA'
ORDER BY age DESC
LIMIT 10;

小结

本章我们学习了:

  1. SQL 语法规则(大小写、注释、语句终止)
  2. 常用数据类型(数值、字符串、日期、布尔)
  3. 基本 SQL 操作(SELECT、INSERT、UPDATE、DELETE、CREATE)
  4. WHERE 条件过滤
  5. ORDER BY 排序和 LIMIT 限制

练习

  1. 创建一个学生表,包含学号、姓名、年龄、班级、成绩
  2. 插入5条学生数据
  3. 查询成绩在80分以上的学生
  4. 按成绩降序排列,取前3名
  5. 查询某个班级的学生数量