大家好,欢迎来到IT知识分享网。
史上最强最常用SQL语句大全【超详细注释】
博主 默语带您 Go to New World.
✍ 个人主页——默语 的博客👦🏻
《java 面试题大全》
《java 专栏》
🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
《MYSQL从入门到精通》数据库是开发者必会基础之一~
🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨
🏆 史上最强最常用SQL语句大全【超详细注释】
摘要
作为数据库操作的核心工具,SQL(结构化查询语言)在数据管理和查询中扮演着至关重要的角色。本文将全面介绍最常用的SQL语句,覆盖数据定义语言(DDL)、数据操作语言(DML)、数据查询语言(DQL)和数据控制语言(DCL)。通过丰富的代码示例和详细注释,帮助您深入理解和灵活运用SQL。
引言
SQL 是数据库管理系统(DBMS)的标准语言,用于执行数据库中的各种操作。无论您是初学者还是经验丰富的数据库管理员,掌握常用的SQL语句对于高效管理和查询数据至关重要。本文将系统性地介绍最常用的SQL语句,并为每个语句提供详细注释和实际案例,帮助您在实际项目中得心应手地使用它们。
正文内容(详细介绍)
DDL (Data Definition Language) 数据定义语言
一、操作库
创建数据库
-- 创建一个名为my_database的数据库 CREATE DATABASE my_database; -- 创建一个名为test_db的数据库,带有字符集和排序规则 CREATE DATABASE test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
删除数据库
-- 删除名为my_database的数据库 DROP DATABASE my_database; -- 删除名为test_db的数据库 DROP DATABASE test_db;
选择数据库
-- 使用名为my_database的数据库 USE my_database; -- 使用名为test_db的数据库 USE test_db;
二、操作表
创建表
-- 创建一个名为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) );
删除表
-- 删除名为users的表 DROP TABLE users; -- 删除名为orders的表 DROP TABLE orders;
修改表
-- 在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
插入数据
-- 向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
删除数据
-- 从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
更新数据
-- 将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) 数据查询语言
一、基础关键字
查询所有记录
-- 查询users表中的所有记录 SELECT * FROM users; -- 查询orders表中的所有记录 SELECT * FROM orders;
查询特定列
-- 查询users表中的name和email列 SELECT name, email FROM users; -- 查询orders表中的user_id和amount列 SELECT user_id, amount FROM orders;
二、排序查询 order by
按年龄排序
-- 按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;
三、聚合函数
计算总数
-- 计算users表中的总记录数 SELECT COUNT(*) FROM users; -- 计算orders表中的总记录数 SELECT COUNT(*) FROM orders;
计算平均值
-- 计算users表中age列的平均值 SELECT AVG(age) FROM users; -- 计算orders表中amount列的平均值 SELECT AVG(amount) FROM orders;
计算总和
-- 计算orders表中amount列的总和 SELECT SUM(amount) FROM orders;
计算最大值和最小值
-- 计算users表中age列的最大值 SELECT MAX(age) FROM users; -- 计算orders表中amount列的最小值 SELECT MIN(amount) FROM orders;
四、分组查询 group by
按年龄分组
-- 按age分组并统计每组的人数 SELECT age, COUNT(*) FROM users GROUP BY age; -- 按user_id分组并统计每组的总订单金额 SELECT user_id, SUM(amount) FROM orders GROUP BY user_id;
五、分页查询
分页查询
-- 查询users表中从第2页开始的10条记录(假设每页10条记录) SELECT * FROM users LIMIT 10 OFFSET 10; -- 查询orders表中从第3页开始的5条记录(假设每页5条记录) SELECT * FROM orders LIMIT 5 OFFSET 10;
六、内连接查询
1. 隐式内连接
-- 使用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. 显式内连接
-- 使用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. 左外连接
-- 查询左表(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. 右外连接
-- 查询右表(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. 子查询的结果是单行单列的
-- 查询年龄最大的用户 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. 子查询的结果是多行单列的
-- 查询所有年龄大于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. 子查询的结果是多行多列的
-- 查询所有订单金额大于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) 数据控制语言
管理用户
添加用户
-- 创建一个名为'username'的新用户,密码为'password' CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; -- 创建一个名为'admin'的新用户,密码为'securepass' CREATE USER 'admin'@'localhost' IDENTIFIED BY 'securepass';
删除用户
-- 删除名为'username'的用户 DROP USER 'username'@'localhost'; -- 删除名为'admin'的用户 DROP USER 'admin'@'localhost';
权限管理
查询权限
-- 查询当前用户的权限 SHOW GRANTS FOR CURRENT_USER; -- 查询名为'username'用户的权限 SHOW GRANTS FOR 'username'@'localhost';
授予权限
-- 授予'username'用户对test_db数据库的所有权限 GRANT ALL PRIVILEGES ON test_db.* TO 'username'@'localhost'; -- 授予'admin'用户对所有数据库的SELECT和INSERT权限 GRANT SELECT, INSERT ON *.* TO 'admin'@'localhost';
撤销权限
-- 撤销'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语句大全,欢迎大家持续关注。
参考资料
- MySQL 官方文档
- PostgreSQL 官方文档
- SQL Server 官方文档
- SQLite 官方文档
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥
如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;(联系微信:Solitudemind )
点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/116130.html