菜鸟科技网

SQL命令有哪些?

SQL(结构化查询语言)是用于管理关系数据库管理系统的标准语言,其命令可以根据功能分为数据查询语言(DQL)、数据操纵语言(DML)、数据定义语言(DDL)、数据控制语言(DCL)以及事务控制语言(TCL),以下将详细介绍各类SQL命令的功能、语法及使用场景。

SQL命令有哪些?-图1
(图片来源网络,侵删)

数据查询语言(DQL)主要用于从数据库中检索数据,其核心命令是SELECT,SELECT命令的基本语法为“SELECT column1, column2 FROM table_name WHERE condition;”,其中column1和column2为要查询的列名,table_name为表名,condition为筛选条件。“SELECT name, age FROM users WHERE age > 18;”会从users表中查询年龄大于18的所有用户的姓名和年龄,SELECT语句还支持ORDER BY子句对结果排序(如“SELECT FROM products ORDER BY price DESC;”表示按价格降序排列)、GROUP BY子句进行分组(如“SELECT department, COUNT() FROM employees GROUP BY department;”表示按部门统计员工人数)、以及聚合函数(如COUNT、SUM、AVG、MAX、MIN)进行数据统计。

数据操纵语言(DML)用于操作数据库中的数据,主要包括INSERT、UPDATE、DELETE和MERGE命令,INSERT用于向表中插入新数据,语法为“INSERT INTO table_name (column1, column2) VALUES (value1, value2);”,INSERT INTO orders (order_id, customer_id, amount) VALUES (1001, 5, 200.50);”,UPDATE用于修改表中已有数据,语法为“UPDATE table_name SET column1 = value1 WHERE condition;”,UPDATE products SET stock = stock - 1 WHERE product_id = 101;”,注意WHERE条件必不可少,否则会更新全表数据,DELETE用于删除表中的数据,语法为“DELETE FROM table_name WHERE condition;”,DELETE FROM users WHERE last_login < '2023-01-01';”,同样需要WHERE条件避免误删全表,MERGE命令(部分数据库如Oracle支持)用于根据条件执行插入、更新或删除操作,语法较复杂,常用于数据同步场景。

数据定义语言(DDL)用于定义和管理数据库的结构,主要包括CREATE、ALTER、DROP、TRUNCATE和RENAME命令,CREATE用于创建数据库对象,如“CREATE TABLE customers (id INT PRIMARY KEY, name VARCHAR(100), email VARCHAR(100));”创建customers表,“CREATE DATABASE company;”创建company数据库,ALTER用于修改表结构,如“ALTER TABLE customers ADD COLUMN phone VARCHAR(20);”添加列,“ALTER TABLE customers MODIFY name VARCHAR(150);”修改列的数据类型,DROP用于删除数据库对象,如“DROP TABLE customers;”删除表,“DROP DATABASE company;”删除数据库,注意此操作不可逆,TRUNCATE用于快速删除表中的所有数据但保留表结构,语法为“TRUNCATE TABLE orders;”,其速度比DELETE快,且不触发触发器,RENAME用于重命名表,如“RENAME TABLE old_name TO new_name;”。

数据控制语言(DCL)用于控制数据库的访问权限,主要包括GRANT和REVOKE命令,GRANT用于授予权限,语法为“GRANT permission ON table_name TO user_name;”,GRANT SELECT, INSERT ON employees TO hr_user;”表示授予hr_user用户对employees表的查询和插入权限,REVOKE用于撤销权限,语法为“REVOKE permission ON table_name FROM user_name;”,REVOKE DELETE FROM employees FROM hr_user;”表示撤销hr_user用户对employees表的删除权限,DCL命令通常由数据库管理员(DBA)使用,以确保数据安全。

SQL命令有哪些?-图2
(图片来源网络,侵删)

事务控制语言(TCL)用于管理数据库事务,主要包括COMMIT、ROLLBACK和SAVEPOINT命令,事务是一组逻辑操作单元,要么全部执行,要么全部不执行,COMMIT用于提交事务,将事务中的操作永久保存到数据库,如“COMMIT;”,ROLLBACK用于回滚事务,撤销事务中尚未提交的操作,如“ROLLBACK;”,通常与事务块(BEGIN TRANSACTION)配合使用,SAVEPOINT用于设置事务中的保存点,允许部分回滚,SAVEPOINT before_update;”设置保存点,后续可通过“ROLLBACK TO before_update;”回滚到该保存点,而不是整个事务的开始。

以下是常用SQL命令的分类总结表格:

功能分类 核心命令 主要用途 示例
数据查询语言(DQL) SELECT 从数据库检索数据 SELECT * FROM users WHERE age > 18;
数据操纵语言(DML) INSERT 向表中插入数据 INSERT INTO products (name, price) VALUES ('手机', 2999);
UPDATE 更新表中的数据 UPDATE products SET price = 2899 WHERE id = 101;
DELETE 删除表中的数据 DELETE FROM orders WHERE order_date < '2023-01-01';
数据定义语言(DDL) CREATE 创建数据库对象 CREATE TABLE students (id INT, name VARCHAR(50));
ALTER 修改数据库对象结构 ALTER TABLE students ADD COLUMN age INT;
DROP 删除数据库对象 DROP TABLE students;
数据控制语言(DCL) GRANT 授予权限 GRANT SELECT ON employees TO manager;
REVOKE 撤销权限 REVOKE DELETE ON employees FROM manager;
事务控制语言(TCL) COMMIT 提交事务 COMMIT;
ROLLBACK 回滚事务 ROLLBACK;

在实际应用中,SQL命令常常组合使用以完成复杂操作,在电商系统中,可能需要使用INSERT记录订单信息,同时使用UPDATE减少商品库存,并通过事务控制确保两者同时成功或失败,不同数据库系统(如MySQL、PostgreSQL、SQL Server、Oracle)在SQL命令的实现上可能存在细微差异,例如AUTO_INCREMENT(MySQL)与IDENTITY(SQL Server)用于自增主键,MERGE命令在Oracle中称为MERGE,而在MySQL 8.0+中支持VALUES语法实现类似功能。

相关问答FAQs:

SQL命令有哪些?-图3
(图片来源网络,侵删)

Q1: SQL中的JOIN命令有什么作用?有哪些常见的JOIN类型?
A1: JOIN命令用于基于相关列的关系将两个或多个表中的行组合起来,常见的JOIN类型包括:

  • INNER JOIN(内连接):返回两个表中匹配条件的数据,SELECT orders.order_id, customers.name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id;”只返回有关联订单的客户信息。
  • LEFT JOIN(左连接):返回左表的所有行以及右表中匹配的行,若右表无匹配则显示NULL,SELECT customers.name, orders.order_id FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id;”会返回所有客户,即使他们没有订单。
  • RIGHT JOIN(右连接):与LEFT JOIN相反,返回右表的所有行以及左表中匹配的行。
  • FULL OUTER JOIN(全外连接):返回两个表中的所有行,无论是否匹配,MySQL不支持,但可通过UNION LEFT和RIGHT JOIN模拟。

Q2: 如何优化SQL查询性能?
A2: 优化SQL查询性能可从以下方面入手:

  1. 索引优化:在经常查询的列(如WHERE条件中的列、JOIN关联列)上创建索引,但避免过度索引,因为索引会降低写入速度,CREATE INDEX idx_name ON users(name);”为name列创建索引。
  2. **避免SELECT **只查询必要的列,减少数据传输量,如用“SELECT name, email FROM users;”替代“SELECT FROM users;”。
  3. 合理使用JOIN:避免不必要的表连接,确保JOIN条件使用索引列。
  4. 分页查询:对于大数据量,使用LIMIT和OFFSET分页,如“SELECT * FROM products LIMIT 10 OFFSET 20;”返回第21-30条记录。
  5. 分析执行计划:通过EXPLAIN命令查看查询执行计划,识别性能瓶颈,EXPLAIN SELECT * FROM orders WHERE customer_id = 100;”可显示是否使用了索引。
  6. 避免在WHERE子句中对列进行函数操作:如“WHERE YEAR(create_date) = 2023”会导致索引失效,可改为“WHERE create_date >= '2023-01-01' AND create_date < '2024-01-01'”。
分享:
扫描分享到社交APP
上一篇
下一篇