SQL基础语法
哪吒 2024/1/1
# SQL基础语法
点击勘误issues (opens new window),哪吒感谢大家的阅读
# 什么是SQL
SQL(Structured Query Language)结构化查询语言,是一种用于管理关系数据库的标准语言。SQL可以用来查询、插入、更新和删除数据库中的数据。
# SQL语句分类
# 1. DDL(Data Definition Language)数据定义语言
用于定义数据库结构,包括创建、修改和删除数据库对象。
-- 创建数据库
CREATE DATABASE company;
-- 创建表
CREATE TABLE employees (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
salary DECIMAL(10,2),
hire_date DATE
);
-- 修改表结构
ALTER TABLE employees ADD COLUMN department VARCHAR(50);
-- 删除表
DROP TABLE employees;
# 2. DML(Data Manipulation Language)数据操作语言
用于操作表中的数据,包括插入、更新和删除。
-- 插入数据
INSERT INTO employees (name, email, salary, hire_date)
VALUES ('张三', 'zhangsan@example.com', 8000.00, '2024-01-01');
-- 更新数据
UPDATE employees
SET salary = 9000.00
WHERE name = '张三';
-- 删除数据
DELETE FROM employees
WHERE id = 1;
# 3. DQL(Data Query Language)数据查询语言
用于查询数据库中的数据。
-- 基本查询
SELECT * FROM employees;
-- 条件查询
SELECT name, salary
FROM employees
WHERE salary > 5000;
-- 排序查询
SELECT * FROM employees
ORDER BY salary DESC;
# 4. DCL(Data Control Language)数据控制语言
用于控制数据库的访问权限。
-- 创建用户
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
-- 授权
GRANT SELECT, INSERT ON company.* TO 'newuser'@'localhost';
-- 撤销权限
REVOKE INSERT ON company.* FROM 'newuser'@'localhost';
# SQL语法规则
# 1. 基本规则
- SQL语句不区分大小写,但建议关键字使用大写
- 每条SQL语句以分号(;)结束
- 字符串和日期值需要用单引号('')包围
- 数值不需要引号
# 2. 注释
-- 单行注释
SELECT * FROM employees; -- 这是行末注释
/*
多行注释
可以跨越多行
*/
SELECT name, salary FROM employees;
# 3. 标识符命名规则
- 数据库名、表名、列名等标识符可以包含字母、数字和下划线
- 标识符不能以数字开头
- 避免使用SQL关键字作为标识符
- 建议使用有意义的名称
-- 好的命名
CREATE TABLE user_profiles (
user_id INT,
first_name VARCHAR(50),
last_name VARCHAR(50),
created_at TIMESTAMP
);
-- 避免的命名
CREATE TABLE table1 (
col1 INT,
select VARCHAR(50) -- select是关键字
);
# 常用数据类型
# 1. 数值类型
INT -- 整数
BIGINT -- 大整数
DECIMAL(M,D) -- 精确小数
FLOAT -- 单精度浮点数
DOUBLE -- 双精度浮点数
# 2. 字符串类型
CHAR(n) -- 固定长度字符串
VARCHAR(n) -- 可变长度字符串
TEXT -- 长文本
# 3. 日期时间类型
DATE -- 日期 (YYYY-MM-DD)
TIME -- 时间 (HH:MM:SS)
DATETIME -- 日期时间 (YYYY-MM-DD HH:MM:SS)
TIMESTAMP -- 时间戳
# 约束条件
# 1. 主键约束(PRIMARY KEY)
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50)
);
# 2. 外键约束(FOREIGN KEY)
CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
# 3. 唯一约束(UNIQUE)
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);
# 4. 非空约束(NOT NULL)
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL
);
# 5. 检查约束(CHECK)
CREATE TABLE products (
id INT PRIMARY KEY,
price DECIMAL(10,2) CHECK (price > 0)
);
# 6. 默认值(DEFAULT)
CREATE TABLE users (
id INT PRIMARY KEY,
status VARCHAR(20) DEFAULT 'active',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
# 实践练习
# 练习1:创建学生管理系统表
-- 创建学生表
CREATE TABLE students (
student_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
age INT CHECK (age > 0 AND age < 150),
email VARCHAR(100) UNIQUE,
enrollment_date DATE DEFAULT (CURRENT_DATE)
);
-- 创建课程表
CREATE TABLE courses (
course_id INT PRIMARY KEY AUTO_INCREMENT,
course_name VARCHAR(100) NOT NULL,
credits INT DEFAULT 3
);
-- 创建选课表
CREATE TABLE enrollments (
enrollment_id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT,
course_id INT,
grade DECIMAL(3,1),
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
# 练习2:插入示例数据
-- 插入学生数据
INSERT INTO students (name, age, email) VALUES
('张三', 20, 'zhangsan@example.com'),
('李四', 21, 'lisi@example.com'),
('王五', 19, 'wangwu@example.com');
-- 插入课程数据
INSERT INTO courses (course_name, credits) VALUES
('数据库原理', 4),
('Java编程', 3),
('数据结构', 4);
-- 插入选课数据
INSERT INTO enrollments (student_id, course_id, grade) VALUES
(1, 1, 85.5),
(1, 2, 92.0),
(2, 1, 78.5);
# 总结
SQL基础语法是数据库操作的基础,掌握了这些基本概念和语法规则,就可以开始进行简单的数据库操作了。在实际应用中,还需要结合具体的数据库系统(如MySQL、PostgreSQL等)的特性来使用。