首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >史上最强最常用SQL语句大全【超详细注释】

史上最强最常用SQL语句大全【超详细注释】

作者头像
默 语
发布于 2024-11-22 08:28:59
发布于 2024-11-22 08:28:59
6.9K0
举报
文章被收录于专栏:JAVAJAVA

🏆 史上最强最常用SQL语句大全【超详细注释】

摘要

作为数据库操作的核心工具,SQL(结构化查询语言)在数据管理和查询中扮演着至关重要的角色。本文将全面介绍最常用的SQL语句,覆盖数据定义语言(DDL)、数据操作语言(DML)、数据查询语言(DQL)和数据控制语言(DCL)。通过丰富的代码示例和详细注释,帮助您深入理解和灵活运用SQL。

引言

SQL 是数据库管理系统(DBMS)的标准语言,用于执行数据库中的各种操作。无论您是初学者还是经验丰富的数据库管理员,掌握常用的SQL语句对于高效管理和查询数据至关重要。本文将系统性地介绍最常用的SQL语句,并为每个语句提供详细注释和实际案例,帮助您在实际项目中得心应手地使用它们。

正文内容(详细介绍)

DDL (Data Definition Language) 数据定义语言
一、操作库

创建数据库

代码语言:javascript
复制
-- 创建一个名为my_database的数据库
CREATE DATABASE my_database;

-- 创建一个名为test_db的数据库,带有字符集和排序规则
CREATE DATABASE test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

删除数据库

代码语言:javascript
复制
-- 删除名为my_database的数据库
DROP DATABASE my_database;

-- 删除名为test_db的数据库
DROP DATABASE test_db;

选择数据库

代码语言:javascript
复制
-- 使用名为my_database的数据库
USE my_database;

-- 使用名为test_db的数据库
USE test_db;
二、操作表

创建表

代码语言:javascript
复制
-- 创建一个名为users的表,包含id, name, email三列
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL
);

-- 创建一个名为orders的表,包含order_id, user_id, amount三列
CREATE TABLE orders (
    order_id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    amount DECIMAL(10, 2),
    FOREIGN KEY (user_id) REFERENCES users(id)
);

删除表

代码语言:javascript
复制
-- 删除名为users的表
DROP TABLE users;

-- 删除名为orders的表
DROP TABLE orders;

修改表

代码语言:javascript
复制
-- 在users表中添加age列
ALTER TABLE users ADD COLUMN age INT;

-- 修改users表中的email列的长度
ALTER TABLE users MODIFY COLUMN email VARCHAR(150);

-- 删除users表中的age列
ALTER TABLE users DROP COLUMN age;
DML (Data Manipulation Language) 数据操作语言
一、增加 insert into

插入数据

代码语言:javascript
复制
-- 向users表中插入一条记录
INSERT INTO users (name, email, age) VALUES ('John Doe', 'john.doe@example.com', 30);

-- 向users表中插入多条记录
INSERT INTO users (name, email, age) VALUES
('Jane Smith', 'jane.smith@example.com', 25),
('Robert Brown', 'robert.brown@example.com', 40);

-- 向orders表中插入一条记录
INSERT INTO orders (user_id, amount) VALUES (1, 99.99);
二、删除 delete

删除数据

代码语言:javascript
复制
-- 从users表中删除name为John Doe的记录
DELETE FROM users WHERE name = 'John Doe';

-- 从users表中删除age大于30的记录
DELETE FROM users WHERE age > 30;

-- 删除orders表中amount小于50的记录
DELETE FROM orders WHERE amount < 50;
三、修改 update

更新数据

代码语言:javascript
复制
-- 将users表中name为John Doe的用户的age更新为31
UPDATE users SET age = 31 WHERE name = 'John Doe';

-- 将users表中所有用户的age增加1
UPDATE users SET age = age + 1;

-- 将orders表中user_id为1的订单金额增加10%
UPDATE orders SET amount = amount * 1.1 WHERE user_id = 1;
DQL (Data Query Language) 数据查询语言
一、基础关键字

查询所有记录

代码语言:javascript
复制
-- 查询users表中的所有记录
SELECT * FROM users;

-- 查询orders表中的所有记录
SELECT * FROM orders;

查询特定列

代码语言:javascript
复制
-- 查询users表中的name和email列
SELECT name, email FROM users;

-- 查询orders表中的user_id和amount列
SELECT user_id, amount FROM orders;
二、排序查询 order by

按年龄排序

代码语言:javascript
复制
-- 按age列升序排序查询users表中的所有记录
SELECT * FROM users ORDER BY age ASC;

-- 按age列降序排序查询users表中的所有记录
SELECT * FROM users ORDER BY age DESC;

-- 按amount列升序排序查询orders表中的所有记录
SELECT * FROM orders ORDER BY amount ASC;
三、聚合函数

计算总数

代码语言:javascript
复制
-- 计算users表中的总记录数
SELECT COUNT(*) FROM users;

-- 计算orders表中的总记录数
SELECT COUNT(*) FROM orders;

计算平均值

代码语言:javascript
复制
-- 计算users表中age列的平均值
SELECT AVG(age) FROM users;

-- 计算orders表中amount列的平均值
SELECT AVG(amount) FROM orders;

计算总和

代码语言:javascript
复制
-- 计算orders表中amount列的总和
SELECT SUM(amount) FROM orders;

计算最大值和最小值

代码语言:javascript
复制
-- 计算users表中age列的最大值
SELECT MAX(age) FROM users;

-- 计算orders表中amount列的最小值
SELECT MIN(amount) FROM orders;
四、分组查询 group by

按年龄分组

代码语言:javascript
复制
-- 按age分组并统计每组的人数
SELECT age, COUNT(*) FROM users GROUP BY age;

-- 按user_id分组并统计每组的总订单金额
SELECT user_id, SUM(amount) FROM orders GROUP BY user_id;
五、分页查询

分页查询

代码语言:javascript
复制
-- 查询users表中从第2页开始的10条记录(假设每页10条记录)
SELECT * FROM users LIMIT 10 OFFSET 10;

-- 查询orders表中从第3页开始的5条记录(假设每页5条记录)
SELECT * FROM orders LIMIT 5 OFFSET 10;
六、内连接查询
1. 隐式内连接
代码语言:javascript
复制
-- 使用where条件消除无用数据,连接users和orders表
SELECT users.name, orders.amount 
FROM users, orders 
WHERE users.id = orders.user_id;

-- 查询所有用户及其订单信息
SELECT users.name, orders.amount 
FROM users, orders 
WHERE users.id = orders.user_id;
2. 显式内连接
代码语言:javascript
复制
-- 使用INNER JOIN显式连接users和orders表
SELECT users.name, orders.amount 
FROM users 
INNER JOIN orders ON users.id = orders.user_id;

-- 查询所有用户及其订单信息
SELECT users.name, orders.amount 
FROM users 
INNER JOIN orders ON users.id = orders.user_id;
七、外连接查询
1. 左外连接
代码语言:javascript
复制
-- 查询左表(users)所有数据以及其交集部分
SELECT users.name, orders.amount 
FROM users 
LEFT JOIN orders ON users.id = orders.user_id;

-- 查询所有用户及其订单信息,包括没有订单的用户
SELECT users.name, orders.amount 
FROM users 
LEFT JOIN orders ON users.id = orders.user_id;
2. 右外连接
代码语言:javascript
复制
-- 查询右表(orders)所有数据以及其交集部分
SELECT users.name, orders.amount 
FROM users 
RIGHT JOIN orders ON users.id = orders.user_id;

-- 查询所有订单及其对应的用户信息,包括没有用户信息的订单
SELECT users.name, orders.amount 
FROM users 
RIGHT JOIN orders ON users.id = orders.user_id;
八、子查询
1. 子查询的结果是单行单列的
代码语言:javascript
复制
-- 查询年龄最大的用户
SELECT * 
FROM users 
WHERE age = (SELECT MAX(age) FROM users);

-- 查询订单金额最大的订单的用户信息
SELECT * 
FROM users 
WHERE id = (SELECT user_id FROM orders WHERE amount = (SELECT MAX(amount) FROM orders));
2. 子查询的结果是多行单列的
代码语言:javascript
复制
-- 查询所有年龄大于30岁的用户
SELECT * 
FROM users 
WHERE age > (SELECT age FROM users WHERE age = 30);

-- 查询所有有订单的用户信息
SELECT * 
FROM users 
WHERE id IN (SELECT user_id FROM orders);
3. 子查询的结果是多行多列的
代码语言:javascript
复制
-- 查询所有订单金额大于100的用户
SELECT * 
FROM users 
WHERE id IN (SELECT user_id FROM orders WHERE amount > 100);

-- 查询所有订单金额大于平均订单金额的用户信息
SELECT * 
FROM users 
WHERE id IN (SELECT user_id FROM orders WHERE amount > (SELECT AVG(amount

) FROM orders));
DCL (Data Control Language) 数据控制语言
管理用户

添加用户

代码语言:javascript
复制
-- 创建一个名为'username'的新用户,密码为'password'
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

-- 创建一个名为'admin'的新用户,密码为'securepass'
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'securepass';

删除用户

代码语言:javascript
复制
-- 删除名为'username'的用户
DROP USER 'username'@'localhost';

-- 删除名为'admin'的用户
DROP USER 'admin'@'localhost';
权限管理

查询权限

代码语言:javascript
复制
-- 查询当前用户的权限
SHOW GRANTS FOR CURRENT_USER;

-- 查询名为'username'用户的权限
SHOW GRANTS FOR 'username'@'localhost';

授予权限

代码语言:javascript
复制
-- 授予'username'用户对test_db数据库的所有权限
GRANT ALL PRIVILEGES ON test_db.* TO 'username'@'localhost';

-- 授予'admin'用户对所有数据库的SELECT和INSERT权限
GRANT SELECT, INSERT ON *.* TO 'admin'@'localhost';

撤销权限

代码语言:javascript
复制
-- 撤销'username'用户对test_db数据库的所有权限
REVOKE ALL PRIVILEGES ON test_db.* FROM 'username'@'localhost';

-- 撤销'admin'用户对所有数据库的SELECT和INSERT权限
REVOKE SELECT, INSERT ON *.* FROM 'admin'@'localhost';

🤔 QA环节

Q: 为什么有些查询使用INNER JOIN而不是WHERE条件?

A: INNER JOIN更明确地表达了连接操作,有时在复杂查询中可以提高可读性和维护性。此外,某些数据库系统对INNER JOIN的优化效果更好。

Q: 什么是左外连接和右外连接的主要区别?

A: 左外连接(LEFT JOIN)返回左表的所有记录和右表的交集部分,右外连接(RIGHT JOIN)返回右表的所有记录和左表的交集部分。

Q: 如何选择合适的子查询方式?

A: 选择子查询方式应根据实际需求来定。如果只需要单行单列结果,可以使用简单子查询。如果需要多个结果,选择IN或EXISTS子查询。

小结

通过本篇文章,您应对常见的SQL语句有了更全面的了解和掌握。无论是创建和操作数据库表,还是进行复杂的查询和数据操作,都能得心应手地完成。希望这些详细的代码示例和注释能够帮助您在实际项目中更高效地使用SQL。

表格总结

SQL 语句类型

示例

说明

DDL

CREATE TABLE, DROP TABLE

数据定义

DML

INSERT INTO, DELETE

数据操作

DQL

SELECT, JOIN

数据查询

DCL

CREATE USER, GRANT

数据控制

总结

SQL 是数据库管理和操作的核心工具,熟练掌握各种SQL语句对于高效的数据处理至关重要。本文详细介绍了常用的SQL语句,通过丰富的案例和详细注释帮助您深入理解每个语句的使用方法。

未来展望

随着数据库技术的不断发展,SQL 语句和数据库操作的方式也在不断演变。保持对最新技术的学习和掌握,才能在未来的数据管理中占据主动。我们将继续更新和完善这份SQL语句大全,欢迎大家持续关注。

参考资料

  1. MySQL 官方文档
  2. PostgreSQL 官方文档
  3. SQL Server 官方文档
  4. SQLite 官方文档
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 🏆 史上最强最常用SQL语句大全【超详细注释】
    • 摘要
    • 引言
    • 正文内容(详细介绍)
      • DDL (Data Definition Language) 数据定义语言
      • DML (Data Manipulation Language) 数据操作语言
      • DQL (Data Query Language) 数据查询语言
      • DCL (Data Control Language) 数据控制语言
    • 🤔 QA环节
    • 小结
    • 表格总结
    • 总结
    • 未来展望
    • 参考资料
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档