您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

SQL查询与优化

SQL (Structured Query Language) 是用于管理关系型数据库的标准语言。

基本SQL语句

数据查询

sql
SELECT column1, column2 FROM table_name WHERE condition;

数据插入

sql
INSERT INTO table_name (column1, column2) VALUES (value1, value2);

数据更新

sql
UPDATE table_name SET column1 = value1 WHERE condition;

数据删除

sql
DELETE FROM table_name WHERE condition;

表结构管理

sql
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    PRIMARY KEY (column1)
);

ALTER TABLE table_name ADD column3 datatype;

DROP TABLE table_name;

索引管理

sql
CREATE INDEX index_name ON table_name (column1);

DROP INDEX index_name;

JOIN操作

INNER JOIN

只返回两个表中匹配的行。

sql
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.table1_id;

LEFT JOIN

返回左表的所有行,以及右表中匹配的行。

sql
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.table1_id;

RIGHT JOIN

返回右表的所有行,以及左表中匹配的行。

sql
SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.table1_id;

FULL JOIN

返回两个表中的所有行,无论是否匹配。

sql
SELECT * FROM table1 FULL JOIN table2 ON table1.id = table2.table1_id;

CROSS JOIN

返回两个表的笛卡尔积。

sql
SELECT * FROM table1 CROSS JOIN table2;

SQL查询优化技巧

  1. 使用索引:为经常查询的列创建索引

  1. 避免SELECT *:只选择需要的列

  1. 使用WHERE子句:减少返回的行数

  1. 优化JOIN操作:确保连接列有索引

  1. 避免在WHERE子句中使用函数:这会使索引失效

  1. 使用LIMIT:限制返回的行数

  1. 避免子查询:在某些情况下,JOIN可能更高效

  1. 定期分析和优化表:使用ANALYZE TABLE或OPTIMIZE TABLE

  1. 使用EXPLAIN:分析查询执行计划

  1. 考虑使用视图或存储过程:提高代码复用性和性能

    常见SQL函数

    聚合函数

    • COUNT():计数

    • SUM():求和

    • AVG():平均值

    • MAX():最大值

    • MIN():最小值

      字符串函数

    • CONCAT():连接字符串

    • SUBSTRING():提取子字符串

    • UPPER():转换为大写

    • LOWER():转换为小写

    • LENGTH():字符串长度

      日期函数

    • NOW():当前日期和时间

    • DATE():提取日期部分

    • TIME():提取时间部分

    • YEAR():提取年份

    • MONTH():提取月份

    • DAY():提取日期

      事务管理

      sql
      START TRANSACTION;
      
      -- 执行SQL语句
      
      COMMIT; -- 提交事务
      -- 或
      ROLLBACK; -- 回滚事务
      

      事务的ACID特性:

    • 原子性(Atomicity):事务是一个不可分割的工作单位

    • 一致性(Consistency):事务执行前后,数据保持一致

    • 隔离性(Isolation):多个事务并发执行时,彼此隔离

    • 持久性(Durability):事务提交后,数据修改是永久性的