【SQL】深入理解SQL:从基础概念到常用命令

目录

  • 1. SQL基础概念
    • 1.1 数据库与表
    • 1.2 行与列
    • 1.3 数据库与表结构示意图
  • 2. 常用SQL命令
  • 3. DML 命令
    • 3.1 SELECT语句
    • 3.2 INSERT语句
    • 3.3 UPDATE语句
    • 3.4 DELETE语句
  • 4. DDL 命令
    • 3.4.1 CREATE 命令
    • 3.4.2 ALTER 命令
    • 3.4.3 DROP 命令
  • 5. DCL 命令
    • 3.6.1 GRANT 命令
    • 3.6.2 REVOKE 命令
  • 学习建议
  • 总结

在当今数据驱动的时代,掌握SQL(结构化查询语言)对于数据库管理和数据分析至关重要。本文将带您深入了解SQL的基础概念,包括数据库与表、行与列,以及它们之间的关系。同时,我们将详细介绍常用的SQL命令,尤其是数据操作语言(DML)、数据定义语言(DDL)和数据控制语言(DCL),帮助您高效地对数据库进行操作。通过示例,您将更好地理解如何在实际应用中使用这些命令。

1. SQL基础概念

SQL(结构化查询语言)是一种用于管理关系型数据库的标准编程语言。它不仅可以用于查询数据,还可以操控数据、定义数据结构和控制数据访问。

1.1 数据库与表

  • 数据库:是一个组织良好的数据集合,通常涉及多个相互关联的表。每个表存储不同类型的数据,表之间可以通过外键建立联系。

  • :是数据库中存储数据的基本结构,类似于电子表格,每一列代表一个字段,每一行代表一条记录。

示例

设想一个在:线商店的数据库,其中可以有以下两个表:

  • Customers(客户表):包含客户的基本信息,如姓名、联系方式等。
  • Orders(订单表):记录客户的订单详情,包括产品、数量、价格等。

1.2 行与列

  • 行(Record/Row):在表中,每一行表示一条完整的记录。例如,在Customers表中,一行可能包含某个客户的姓名、地址和联系方式。

  • 列(Field/Column):列定义了数据的类型和属性。例如,在Customers表中,可能有NameAddressPhone等列,这些列共同构成每条记录的结构。

1.3 数据库与表结构示意图

Database
Table1
Table2
Row1
Row2
Row1
CSDN @ 2136

2. 常用SQL命令

在SQL中,常用的命令可以分为几大类,每种命令都有其特定的用途和语法。

命令类别命令描述
DMLSELECT查询数据
INSERT插入数据
UPDATE更新数据
DELETE删除数据
DDLCREATE创建数据库或表
ALTER修改表的结构
DROP删除数据库或表
DCLGRANT授予权限
REVOKE撤销权限

各种命令的详细介绍

  • DML(数据操作语言):用于处理数据的命令,包括查询、插入、更新和删除。这些命令直接操作数据库中的数据。

  • DDL(数据定义语言):用于定义和修改数据库的结构。这些命令涉及表的创建、修改和删除等操作。

  • DCL(数据控制语言):用于控制访问权限,确保数据安全性。通过这些命令,可以授予或撤销用户的访问权限。

3. DML 命令

数据操作语言(DML) 用于对数据库中的数据进行操作。

命令描述
SELECT查询数据
INSERT插入新数据
UPDATE更新现有数据
DELETE删除数据

3.1 SELECT语句

SELECT语句是SQL中最常用的命令,用于从数据库中查询数据。

基本语法

SELECT column1, column2 
FROM table_name 
WHERE condition;
  • SELECT:指定要查询的列。
  • FROM:指定要查询的表。
  • WHERE:可选,设置查询条件,以过滤结果。

示例:查询员工表中所有员工的姓名和工资

SELECT name, salary 
FROM employees 
WHERE salary > 50000;

在这个示例中,查询条件是“工资大于50000”,结果只返回符合该条件的员工姓名和工资。

进阶用法

  • 查询所有列:使用星号(*)可以查询表中的所有列

    SELECT * FROM employees;
    
  • 排序结果:使用ORDER BY对结果进行排序

    SELECT name, salary 
    FROM employees 
    WHERE salary > 50000 
    ORDER BY salary DESC;
    
  • 限制结果数量:使用LIMIT关键字限制返回的行数

    SELECT name, salary 
    FROM employees 
    WHERE salary > 50000 
    LIMIT 10;
    

3.2 INSERT语句

INSERT语句用于向表中插入新数据。

基本语法

INSERT INTO table_name (column1, column2) 
VALUES (value1, value2);
  • INSERT INTO:指定要插入数据的表。
  • VALUES:提供要插入的具体值。

示例:向员工表中插入新员工的信息

INSERT INTO employees (name, salary) 
VALUES ('John Doe', 60000);

在这里,向employees表插入了一名新员工John Doe及其工资。

进阶用法

  • 批量插入:可以一次性插入多条记录

    INSERT INTO employees (name, salary) 
    VALUES 
    ('Jane Smith', 70000),
    ('Michael Brown', 80000);
    
  • 插入从查询结果:可以通过子查询插入数据

    INSERT INTO high_salary_employees (name, salary)
    SELECT name, salary 
    FROM employees 
    WHERE salary > 70000;
    

3.3 UPDATE语句

UPDATE语句用于修改已存在的记录。

基本语法

UPDATE table_name 
SET column1 = value1 
WHERE condition;
  • UPDATE:指定要更新的表。
  • SET:定义要修改的列及其新值。
  • WHERE:确定哪些记录需要更新。

示例:更新某员工的工资

UPDATE employees 
SET salary = 65000 
WHERE name = 'John Doe';

这条语句将John Doe的工资更新为65000。

进阶用法

  • 更新多列:同时更新多个列的值

    UPDATE employees 
    SET salary = 70000, department = 'Marketing' 
    WHERE name = 'Jane Smith';
    
  • 条件更新:基于特定条件更新多条记录

    UPDATE employees 
    SET salary = salary * 1.1 
    WHERE department = 'Sales';
    

3.4 DELETE语句

DELETE语句用于从表中删除记录。

基本语法

DELETE FROM table_name 
WHERE condition;
  • DELETE FROM:指定要删除记录的表。
  • WHERE:确定哪些记录需要删除。

示例:删除一名员工的记录

DELETE FROM employees 
WHERE name = 'John Doe';

这条语句将删除名为John Doe的员工记录。

注意事项

  1. 没有WHERE子句:如果省略WHERE子句,所有行都会被删除,操作不可逆。例如:

    DELETE FROM employees; 
    

    此命令会删除employees表中的所有数据。

  2. 使用事务:建议在进行DELETE操作时使用事务,这样在出现问题时可以回滚。例如:

    BEGIN;
    DELETE FROM employees WHERE name = 'John Doe';
    COMMIT;
    
  3. 外键约束:如果要删除的记录在其他表中被外键引用,可能会导致删除失败。在这种情况下,需要先处理相关的外键记录。

  4. 性能影响:在大数据量的表上执行DELETE可能会导致性能问题,可以考虑批量删除或使用TRUNCATE命令(注意TRUNCATE会删除所有记录并且速度更快)。

示例:基于条件删除多条记录

DELETE FROM employees 
WHERE department = 'Sales' AND hire_date < '2020-01-01';

这条语句将删除所有在销售部门且入职日期早于2020年1月1日的员工记录。

示例:删除记录后检查受影响的行数

DELETE FROM employees 
WHERE department = 'HR';
SELECT ROW_COUNT();

这段代码首先删除所有人力资源部门的员工,然后查询受影响的行数。

4. DDL 命令

数据定义语言(DDL) 用于定义和管理数据库结构。

命令描述
CREATE创建数据库或表
ALTER修改表的结构
DROP删除数据库或表

3.4.1 CREATE 命令

CREATE命令用于创建数据库或表。

基本语法

  • 创建数据库:

    CREATE DATABASE database_name;
    
  • 创建表:

    CREATE TABLE table_name (
        column1 datatype,
        column2 datatype,
        ...
    );
    

示例:创建一个名为employees的表

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    salary DECIMAL(15, 2),
    hire_date DATE
);

3.4.2 ALTER 命令

ALTER命令用于修改已存在表的结构。

基本语法

ALTER TABLE table_name 
ADD column_name datatype;  -- 添加新列

ALTER TABLE table_name 
DROP COLUMN column_name;   -- 删除列

ALTER TABLE table_name 
MODIFY COLUMN column_name datatype;  -- 修改列的类型

示例:向employees表添加一个新列department

ALTER TABLE employees 
ADD department VARCHAR(50);

3.4.3 DROP 命令

DROP命令用于删除数据库或表。

基本语法

  • 删除数据库:

    DROP DATABASE database_name;
    
  • 删除表:

    DROP TABLE table_name;
    

示例:删除名为employees的表

DROP TABLE employees;

5. DCL 命令

数据控制语言(DCL) 用于管理数据库用户权限。

命令描述
GRANT授予权限
REVOKE撤销权限

3.6.1 GRANT 命令

GRANT命令用于授予用户特定的权限。

基本语法

GRANT privilege_type ON object TO user;

示例:授予用户usernameemployees表的查询权限

GRANT SELECT ON employees TO username;

3.6.2 REVOKE 命令

REVOKE命令用于撤销用户的特定权限。

基本语法

REVOKE privilege_type ON object FROM user;

示例:撤销用户usernameemployees表的查询权限

REVOKE SELECT ON employees FROM username;

学习建议

  • 实践:通过实际操作数据库来巩固所学知识,可以使用如MySQL、PostgreSQL等数据库管理系统进行练习。
  • 阅读文档:了解不同数据库系统的SQL方言和特性,确保掌握各种可能遇到的情况。
  • 构建项目:尝试构建小型项目,将理论应用于实践中,比如开发一个简单的在线商店或图书管理系统。

总结

本文提供了一个全面的SQL学习指南,从基础概念到具体命令,为读者打下坚实的数据库知识基础。您不仅学会了如何创建、修改和删除数据库对象,还掌握了如何有效地进行数据查询和操作。无论您是初学者还是希望提升技能的开发者,这篇文章都将成为您日常工作中的重要参考。希望通过不断实践和探索,您能熟练运用SQL,提升数据管理的能力。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/887908.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

迁移学习案例-python代码

大白话 迁移学习就是用不太相同但又有一些联系的A和B数据&#xff0c;训练同一个网络。比如&#xff0c;先用A数据训练一下网络&#xff0c;然后再用B数据训练一下网络&#xff0c;那么就说最后的模型是从A迁移到B的。 迁移学习的具体形式是多种多样的&#xff0c;比如先用A训练…

LeetCode讲解篇之300. 最长递增子序列

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 这题我们可以通过动态规划求解&#xff0c;使用一个数组f&#xff0c;数组f的i号元素表示[0, i]范围内最长递增子序列的长度 状态转移方程&#xff1a;f[i] max(f[j] 1)&#xff0c;其中 0 < j < i 题…

docker快速安装ELK

一、创建elk目录 创建/elk/elasticsearch/data/目录 mkdir -p /usr/local/share/elk/elasticsearch/data/ 创建/elk/logstash/pipeline/目录 mkdir -p /usr/local/share/elk/logstash/pipeline/ 创建/elk/kibana/conf/目录 mkdir -p /usr/local/share/elk/kibana/conf/ 二、创建…

大模型应用新领域:探寻终端侧 AI 竞争核心|智于终端

2024年过去2/3&#xff0c;大模型领域的一个共识开始愈加清晰&#xff1a; AI技术的真正价值在于其普惠性。没有应用&#xff0c;基础模型将无法发挥其价值。 于是乎&#xff0c;回顾这大半年&#xff0c;从互联网大厂到手机厂商&#xff0c;各路人马都在探索AI时代Killer AP…

【超级详细解释】力扣每日一题 134.加油站 48. 旋转图像

134.加油站 力扣 这是一个很好的问题。这个思路其实基于一种贪心策略。我们从整个路径的油量变化来理解它&#xff0c;结合一个直观的“最低点法则”&#xff0c;来确保找到正确的起点。 问题的核心&#xff1a;油量差值的累积 对于每个加油站&#xff0c;我们有两个数组&…

1、如何查看电脑已经连接上的wifi的密码?

在电脑桌面右下角的如下位置&#xff1a;双击打开查看当前连接上的wifi的名字&#xff1a;ZTE-kfdGYX-5G 按一下键盘上的win R 键, 输入【cmd】 然后&#xff0c;按一下【回车】。 输入netsh wlan show profile ”wifi名称” keyclear : 输入完成后&#xff0c;按一下回车&…

51单片机的水质检测系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器ph传感器浑浊度传感器蓝牙继电器LED、按键和蜂鸣器等模块构成。适用于水质监测系统&#xff0c;含检测和调整水温、浑浊度、ph等相似项目。 可实现功能: 1、LCD1602实时显示水温、水体ph和浑浊度 2、温…

Studying-多线程学习Part3 - condition_variable与其使用场景、C++11实现跨平台线程池

来源&#xff1a;多线程学习 目录 condition_variable与其使用场景 生产者与消费者模型 C11实现跨平台线程池 condition_variable与其使用场景 生产者与消费者模型 生产者-消费者模式是一种经典的多线程设计模式&#xff0c;用于解决多个线程之间的数据共享和协作问题。…

基于PHP的校园二手书交易管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的校园二手书交易管理系统 一 介绍 此二手书交易管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注…

k8s中pod的管理

一、资源管理 1.概述 说到k8s中的pod&#xff0c;即荚的意思&#xff0c;就不得不先提到k8s中的资源管理&#xff0c;k8s中可以用以下命令查看我们的资源&#xff1a; kubectl api-resources 比如我们现在需要使用k8s开启一个东西&#xff0c;那么k8s通过apiserver去对比etc…

《从零开始大模型开发与微调》真的把大模型说透了!零基础入门一定要看!

2022年底&#xff0c;ChatGPT震撼上线&#xff0c;大语言模型技术迅速“席卷”了整个社会&#xff0c;人工智能技术因此迎来了一次重要进展。与大语言模型相关的研发岗薪资更是水涨船高&#xff0c;基本都是5w月薪起。很多程序员也想跟上ChatGPT脚步&#xff0c;今天给大家带来…

51单片机系列-串口(UART)通信技术

&#x1f308;个人主页&#xff1a; 羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 并行通信和串行通信 并行方式 并行方式&#xff1a;数据的各位用多条数据线同时发送或者同时接收 并行通信特点&#xff1a;传送速度快&#xff0c;但因需要多根传输线&#xf…

免杀对抗—GOC#反VT沙盒资源分离混淆加密

前言 今天的主要内容是反VT沙盒&#xff0c;我们都知道生成的后门会被杀软上穿到沙盒中去运行&#xff0c;去逆向。如此一来我们的后门就很容易被查杀掉&#xff0c;但如果我们对后门进行一些操作&#xff0c;让它在被逆向的时候&#xff0c;反编译出一堆乱码&#xff0c;或者…

【大语言模型-论文精读】用于医疗领域摘要任务的大型语言模型评估综述

【大语言模型-论文精读】用于医疗领域摘要任务的大型语言模型评估综述 论文信息&#xff1a; 用于医疗领域摘要任务的大型语言模型评估&#xff1a;一篇叙述性综述&#xff0c; 文章是由 Emma Croxford , Yanjun Gao 博士 , Nicholas Pellegrino , Karen K. Wong 等人近期合作…

STM32PWM应用

目录 一、输出比较(OC) 二、PWM&#xff1a; 1、简介 2、基本结构 3、参数计算 三、PWM驱动LED呼吸灯 1、代码 四、PWM驱动Sg90舵机 1、工作原理 2、完整代码 五、PWM驱动直流电机 1、TB6612芯片模块 2、完整代码&#xff1a; 一、输出比较(OC) OC&#xff08;Outp…

智能医疗:Spring Boot医院管理系统开发

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

【Python】PDFMiner.six:高效处理PDF文档的Python工具

PDF是一种广泛使用的文件格式&#xff0c;特别适用于呈现固定布局的文档。然而&#xff0c;提取PDF文件中的文本和信息并不总是那么简单。幸好有许多Python库可以帮助我们&#xff0c;其中&#xff0c;PDFMiner.six 是一个功能强大、专门用于PDF文档解析的库。 ⭕️宇宙起点 &a…

cnn突破四(生成卷积核与固定核对比)

cnn突破三中生成四个卷积核&#xff0c;训练6万次&#xff0c;91分&#xff0c;再训练6万次&#xff0c;95分&#xff0c;不是很满意&#xff0c;但又找不到问题点&#xff0c;所以就想了个办法&#xff0c;使用三个固定核&#xff0c;加上三层bpnet神经网络&#xff0c;看看效…

王道-数据结构

1 设数组data[m]作为循环队列的存储空间,front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为____ 答案:D 解析:队列的头指针指向队首元素的实际位置,因此出队操作后,头指针需向上移动一个元素的位置。循环队列的容量为m,所以头指针front加1以后,需…

【d60】【Java】【力扣】509. 斐波那契数

思路 要做的问题&#xff1a;求F&#xff08;n&#xff09;, F&#xff08;n&#xff09;就等于F(n-1)F(n-2)&#xff0c;要把这个F(n-1)F(n-2)当作常量&#xff0c;已经得到的值&#xff0c; 结束条件&#xff1a;如果是第1 第2 个数字的时候&#xff0c;没有n-1和n-2,所以…