SQL Sever学习记录:增删改查之查

SQL Server查询精进:深入理解SELECT语句

SQL 基础知识

SQL(Structured Query Language)是用于关系型数据库的操作语言,可以应用于MySQL、Oracle、SQL Server等多种数据库系统 。SQL分为几个类别:

DDL(Data Definition Language):数据定义语言,用于定义和管理数据库结构,如创建、修改或删除数据库和表。 DML(Data Manipulation Language):数据操作语言,用于对数据库中的数据进行插入、更新和删除操作。 DCL(Data Control Language):数据控制语言,用于定义数据库的安全策略,如创建用户、授权和撤销权限。 DQL(Data Query Language):数据查询语言,用于查询数据库中的数据,包括基础查询、条件查询、模糊查询等

基本查询

要查询数据库表的数据,可以使用以下SQL语句:

代码语言:javascript代码运行次数:0运行复制
SELECT * FROM <表名>

例如,查询名为students的表的所有行,可以使用:

代码语言:javascript代码运行次数:0运行复制
SELECT * FROM students

SELECT是查询关键字,*表示所有列,FROM后面跟表名。查询结果是一个二维表,包含列名和每一行的数据 。

指定字段查询

如果不需要查询所有字段,可以在SELECT关键字后指定字段名称,例如查询fruits表中的f_name字段:

代码语言:javascript代码运行次数:0运行复制
SELECT f_name FROM fruits;

这样只返回指定字段的数据,可以提高查询效率和响应速度。

条件查询

可以使用WHERE子句进行条件查询,例如查询fruits表中价格大于5的记录:

代码语言:javascript代码运行次数:0运行复制
SELECT * FROM fruits WHERE f_price > 5;

排序和限制结果

可以使用ORDER BY进行排序,LIMIT限制结果数量,例如查询fruits表中按价格降序排列的前5条记录:

代码语言:javascript代码运行次数:0运行复制
SELECT * FROM fruits ORDER BY f_price DESC LIMIT 5;

聚合函数和分组查询

可以使用聚合函数如COUNT()、SUM()、AVG()等,结合GROUP BY进行分组查询,例如查询每个供应商的平均水果价格:

代码语言:javascript代码运行次数:0运行复制
SELECT s_id, AVG(f_price) FROM fruits GROUP BY s_id;

多表连接查询

可以使用JOIN进行多表连接查询,例如查询订单表和客户表的关联信息:

代码语言:javascript代码运行次数:0运行复制
SELECT * FROM orders JOIN customers ON orders.cust_id = customers.cust_id;

模糊查询

使用LIKE关键字可以进行模糊查询,例如查询students表中名字以"John"开头的学生:

代码语言:javascript代码运行次数:0运行复制
SELECT * FROM students WHERE name LIKE 'John%';

%代表任意数量的字符。

正则表达式

一些数据库系统支持正则表达式查询,例如MySQL中的REGEXP:

代码语言:javascript代码运行次数:0运行复制
SELECT * FROM students WHERE name REGEXP '^John';

子查询

子查询是嵌套在另一个查询中的查询,可以用于复杂的条件筛选,例如查询分数高于平均分的学生:

代码语言:javascript代码运行次数:0运行复制
SELECT * FROM students WHERE score > (SELECT AVG(score) FROM students);

联合查询

使用UNION或UNION ALL可以合并两个或多个SELECT语句的结果集:

代码语言:javascript代码运行次数:0运行复制
SELECT * FROM students WHERE score > 90
UNION
SELECT * FROM students WHERE name = 'John';

事务处理

在需要保证数据一致性的场景下,可以使用事务来管理一系列操作:

代码语言:javascript代码运行次数:0运行复制
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;

或者在出错时回滚:

代码语言:javascript代码运行次数:0运行复制
ROLLBACK;

索引优化

为了提高查询效率,可以为表中经常用于查询的列创建索引:

代码语言:javascript代码运行次数:0运行复制
CREATE INDEX idx_name ON students(name);

视图

视图是基于SQL查询的虚拟表,可以简化复杂的查询操作:

代码语言:javascript代码运行次数:0运行复制
CREATE VIEW high_score_students AS
SELECT * FROM students WHERE score > 90;

存储过程和函数

存储过程和函数是数据库中存储的一段代码,可以用于封装复杂的业务逻辑:

代码语言:javascript代码运行次数:0运行复制
DELIMITER //
CREATE PROCEDURE GetHighScoreStudents()
BEGIN
  SELECT * FROM students WHERE score > 90;
END //
DELIMITER ;

安全性和权限

确保数据库的安全性,合理分配用户权限,避免SQL注入等安全问题。

性能监控和优化

使用数据库提供的监控工具来分析查询性能,优化慢查询。

数据库设计

合理的数据库设计可以提高查询效率和数据完整性,包括范式设计、反范式设计等。

这些补充内容涵盖了数据库查询的更多方面,有助于更深入地理解和使用数据库。如果您有特定的数据库系统或特定的查询需求,可以进一步探讨。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024年11月03日,如有侵权请联系 cloudcommunity@tencent 删除sql函数权限数据数据库