sql数据库语法

https://www.w3school.com.cn/sql/index.asp

1. 数据定义语言 (DDL)

创建数据库和表

复制代码
-- 创建数据库
CREATE DATABASE company;

-- 使用数据库
USE company;

-- 创建表
CREATE TABLE employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT,
    department VARCHAR(50),
    salary DECIMAL(10,2),
    hire_date DATE
);

-- 创建索引
CREATE INDEX idx_name ON employees(name);
CREATE INDEX idx_department ON employees(department);

修改表结构

复制代码
-- 添加列
ALTER TABLE employees ADD COLUMN email VARCHAR(100);

-- 修改列
ALTER TABLE employees MODIFY COLUMN name VARCHAR(100);

-- 删除列
ALTER TABLE employees DROP COLUMN email;

-- 重命名表
ALTER TABLE employees RENAME TO staff;

删除对象

复制代码
-- 删除表
DROP TABLE employees;

-- 删除数据库
DROP DATABASE company;

-- 清空表数据
TRUNCATE TABLE employees;

2. 数据操作语言 (DML)

插入数据

复制代码
-- 插入单条数据
INSERT INTO employees (name, age, department, salary, hire_date)
VALUES ('张三', 20, '技术部', 10000.00, '2025-10-20');

-- 插入多条数据
INSERT INTO employees (name, age, department, salary, hire_date)
VALUES 
    ('李四', 20, '销售部', 10000.00, '2025-10-20'),
    ('王五', 20, '技术部', 10000.00, '2025-10-20'),
    ('赵六', 20, '人事部', 10000.00, '2025-10-20');

更新数据

复制代码
-- 更新特定记录
UPDATE employees 
SET salary = 16000.00, department = '高级技术部'
WHERE name = '张三';

-- 批量更新
UPDATE employees 
SET salary = salary * 1.1 
WHERE department = '技术部';

删除数据

复制代码
-- 删除特定记录
DELETE FROM employees WHERE name = '赵六';

-- 删除多条记录
DELETE FROM employees WHERE age > 60;

-- 清空表(谨慎使用)
DELETE FROM employees;

3. 数据查询语言 (DQL)

复制代码
-- 查询所有列
SELECT * FROM employees;

-- 查询特定列
SELECT name, department, salary FROM employees;

-- 条件查询
SELECT name, salary 
FROM employees 
WHERE salary > 12000 AND department = '技术部';

-- 排序
SELECT name, salary 
FROM employees 
ORDER BY salary DESC, name ASC;

-- 限制结果集
SELECT name, salary 
FROM employees 
ORDER BY salary DESC 
LIMIT 10;

-- 分组统计
SELECT 
    department,
    COUNT(*) as 人数,
    AVG(salary) as 平均工资,
    MAX(salary) as 最高工资,
    MIN(salary) as 最低工资
FROM employees 
GROUP BY department
HAVING AVG(salary) > 12000;

-- 连接查询
SELECT 
    e.name,
    e.salary,
    d.department_name,
    d.location
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;

-- 子查询
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

-- 联合查询
SELECT name, salary FROM employees WHERE department = '技术部'
UNION
SELECT name, salary FROM contractors WHERE department = '技术部';

日期函数

复制代码
SELECT 
    name,
    hire_date,
    YEAR(hire_date) as 入职年份,
    MONTH(hire_date) as 入职月份,
    DATEDIFF(CURRENT_DATE, hire_date) as 入职天数,
    DATE_ADD(hire_date, INTERVAL 1 YEAR) as 转正日期
FROM employees;

在SQL中取日期字段的前10个字符进行比较,主要有以下几种方法:

复制代码
-- 使用 SUBSTRING
SUBSTRING(CONVERT(VARCHAR(20), a.时间1, 120), 1, 10) = SUBSTRING(CONVERT(VARCHAR(20), b.时间2, 120), 1, 10)

-- 使用 LEFT (更简洁)
LEFT(CONVERT(VARCHAR(10), a.时间1, 120), 10) = LEFT(CONVERT(VARCHAR(10),b.时间2, 120), 10)

更推荐的日期比较方法

复制代码
-- 方法1: 转换为DATE类型
CAST(a.时间1 AS DATE) = CAST(b.时间2 AS DATE)

-- 方法2: 使用CONVERT转为DATE
CONVERT(DATE, a.时间1) = CONVERT(DATE, b.时间2)

-- 方法3: 使用DATEDIFF
DATEDIFF(DAY,a.时间1,b.时间2) = 0
相关推荐
春风霓裳19 小时前
sql-窗口函数
大数据·数据库·sql
言之。19 小时前
【数据库】TiDB 技术选型与架构分析报告
数据库·架构·tidb
人工智能训练20 小时前
如何在 Ubuntu 22.04 中安装 Docker 引擎和 Linux 版 Docker Desktop 桌面软件
linux·运维·服务器·数据库·ubuntu·docker·ai编程
胖头鱼的鱼缸(尹海文)20 小时前
数据库管理-第386期 使用OCP部署OceanBase 4.4.1社区版集群(20251107)
数据库·oceanbase
Craaaayon20 小时前
如何选择两种缓存更新策略(写缓存+异步写库;写数据库+异步更新缓存)
java·数据库·redis·后端·缓存·mybatis
一 乐20 小时前
点餐|智能点餐系统|基于java+ Springboot的动端的点餐系统小程序(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·小程序·论文
WarriorTan21 小时前
理解PostgreSQL中的数据块
数据库·postgresql
学好statistics和DS21 小时前
三个好思路:SQL并行化处理、混淆矩阵和特征交叉
数据库·sql·矩阵
唐僧洗头爱飘柔952721 小时前
【GORM(3)】Go的跨时代ORM框架!—— 数据库连接、配置参数;本文从0开始教会如何配置GORM的数据库
开发语言·数据库·后端·golang·gorm·orm框架·dsn
谅望者21 小时前
在 macOS 上使用 Homebrew 安装 MySQL 8.0 完整指南
数据库·sql·mysql