【数据库设计和SQL基础语法】--SQL语言概述--SQL的基本结构和语法规则(一)

一、SQL的基本结构

2.1 SQL语句的组成要素

SQL语句的组成要素

  1. 关键字(Keywords):
    • 定义:SQL语句的基本操作命令,表示要执行的动作。
    • 例子:SELECT、INSERT、UPDATE、DELETE等。
  2. 标识符(Identifiers):
    • 定义:用于标识数据库中的对象名称,如表名、列名。
    • 规则:字母开头,可包含字母、数字、下划线等字符。
    • 例子:表名、列名等。
  3. 字面量(Literals):
    • 定义:表示具体数值、字符或日期。
    • 例子:数字(e.g., 123)、字符串(e.g., ‘John’)、日期(e.g., ‘2023-01-01’)。
  4. 运算符(Operators):
    • 定义:用于执行操作的符号或关键字。
    • 例子:+、-、*、/ 等。
  5. 分隔符(Delimiters):
    • 定义:用于分隔SQL语句中的不同部分。
    • 例子:分号(;)用于结束SQL语句。
  6. 注释(Comments):
    • 定义:提供对SQL语句的说明或注解,不被数据库执行。
    • 例子:-- 单行注释、/* 多行注释 */。
  7. 空格和换行符:
    • 定义:用于格式化SQL语句,增强可读性。
    • 例子:空格、换行符。
2.2 SQL语句的结束符

在大多数情况下,SQL语句的结束符是分号(;)。分号用于告诉数据库解析器一个SQL语句的结束,可以开始解析下一个语句。在单条SQL语句的情况下,分号是可选的,因为大多数数据库会在遇到换行时自动将其视为语句结束。例如:

SELECT * FROM Customers;
UPDATE Orders SET Status = 'Shipped' WHERE OrderID = 123;

在上面的例子中,每个语句末尾都有一个分号,但在某些情况下,例如在存储过程或触发器等多语句块的情况下,分号是必需的,以明确每个语句的结束。

Tip:并非所有的数据库管理系统都要求使用分号作为结束符,某些数据库可能使用不同的结束符。在使用特定数据库时,最好查阅相关文档以确定正确的语句结束符。

2.3 注释的使用

在SQL中,注释是一种用于添加说明或注解的文本,它不会被数据库执行引擎处理。注释对于提高代码可读性、维护性和与他人的沟通非常重要。SQL支持两种主要类型的注释:单行注释和多行注释。

  1. 单行注释:
    在单行注释中,可以在语句的任何位置添加注释。在SQL中,单行注释使用两个连续的减号(–)标识。
-- 这是单行注释,注释内容在减号后面
SELECT * FROM Customers;
  1. 多行注释:
    多行注释用于跨越多个行的注释块。在SQL中,多行注释使用/*开头和*/结尾。
/*这是多行注释
*/
SELECT * FROM Orders;
  1. 注释的作用:
  • 提高可读性:注释使代码更易于理解,特别是对于其他人阅读代码或长时间未接触代码的开发者。

  • 调试和排错:在代码中添加注释有助于在调试和排错过程中理解特定部分的作用。

  • 文档化:注释可以用于生成代码文档,帮助开发者了解数据库结构和查询逻辑。

Tip:注释应该被谨慎使用,不要过度注释显而易见的内容,而应该注释那些可能会引起疑惑的、不那么明显的部分。

二、数据定义语言(DDL)

3.1 创建数据库

在SQL中,数据定义语言(DDL)用于定义数据库结构和模式。创建数据库的DDL语句通常使用CREATE DATABASE语句。以下是一个创建数据库的基本语法:

CREATE DATABASE database_name;

其中,database_name是要创建的数据库的名称。这条语句会在数据库管理系统中创建一个新的数据库,并赋予它指定的名称。
如果要指定数据库的一些属性,例如字符集和排序规则,可以使用更详细的语法:

CREATE DATABASE database_nameCHARACTER SET character_set_nameCOLLATE collation_name;

其中,character_set_name是要使用的字符集,而collation_name是要使用的排序规则。这允许你在创建数据库时指定它的一些特性。
以下是一个具体的例子:

CREATE DATABASE mydatabaseCHARACTER SET utf8COLLATE utf8_general_ci;

这个例子创建了一个名为mydatabase的数据库,使用了UTF-8字符集和通用的排序规则。

3.2 创建表

在SQL中,数据定义语言(DDL)用于定义数据库的结构。创建表是DDL的一项关键操作,它定义了表的结构,包括表的列、数据类型、约束等。以下是创建表的基本语法:

CREATE TABLE table_name (column1 datatype1,column2 datatype2,column3 datatype3,...PRIMARY KEY (one_or_more_columns)
);

其中,table_name是要创建的表的名称,column1, column2, column3等是表的列名,而datatype1, datatype2, datatype3是相应列的数据类型。PRIMARY KEY关键字用于定义主键,确保每行在表中的唯一性。
以下是一个具体的例子,创建一个名为employees的表:

CREATE TABLE employees (employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),hire_date DATE
);

这个例子创建了一个名为employees的表,包含了employee_idfirst_namelast_namehire_date等列。employee_id被定义为主键,确保每个员工的ID是唯一的。

Tip:在实际应用中,创建表时可能还涉及其他约束(如外键、唯一约束等)以及其他可选项,具体取决于数据库管理系统的支持和设计需求。

3.3 修改表结构

在SQL中,要修改表结构,可以使用ALTER TABLE语句。ALTER TABLE语句允许你添加、修改或删除表的列,以及应用其他表级别的变更。以下是一些常见的表结构修改操作:

  1. 添加列
ALTER TABLE table_name
ADD column_name datatype;

这条语句在已有的表中添加一个新列,其中table_name是表的名称,column_name是要添加的列名,datatype是新列的数据类型。

  1. 修改列的数据类型
ALTER TABLE table_name
MODIFY column_name new_datatype;

这条语句用于修改已有列的数据类型,其中table_name是表的名称,column_name是要修改的列名,new_datatype是新的数据类型。

  1. 修改列名
ALTER TABLE table_name
RENAME COLUMN old_column_name TO new_column_name;

这条语句用于修改列的名称,其中table_name是表的名称,old_column_name是要修改的列名,new_column_name是新的列名。

  1. 删除列
ALTER TABLE table_name
DROP COLUMN column_name;

这条语句用于删除表中的列,其中table_name是表的名称,column_name是要删除的列名。

  1. 添加主键
ALTER TABLE table_name
ADD PRIMARY KEY (column_name);

这条语句用于在现有表中添加主键,其中table_name是表的名称,column_name是用作主键的列名。

  1. 删除主键
ALTER TABLE table_name
DROP PRIMARY KEY;

这条语句用于从表中删除主键,其中table_name是表的名称。

3.4 删除表

在SQL中,要删除表,可以使用DROP TABLE语句。DROP TABLE语句会永久性地删除整个表,包括表中的所有数据和结构。以下是删除表的基本语法:

DROP TABLE table_name;

其中,table_name是要删除的表的名称。

Tip:

  • 删除表是一个危险的操作,因为它会永久删除表中的所有数据,且无法撤销。在执行此操作之前,请确保你真的希望删除该表。
  • 在生产环境中谨慎使用DROP TABLE语句,可以先备份数据或者在测试环境中进行测试。
  • 如果表中有关联的外键约束,可能需要先删除相关的外键约束才能成功删除表。

示例:

DROP TABLE employees;

上述示例将删除名为employees的表。在实际应用中,请替换为你要删除的表的实际名称。

3.5 约束的使用

在SQL中,约束(Constraints)用于规定表中的数据规则,以保证数据的完整性和一致性。以下是一些常见的约束类型:

  1. 主键约束(Primary Key Constraint):

    • 用途:标识表中的唯一记录。
    • 语法:
      CREATE TABLE table_name (column1 datatype PRIMARY KEY,column2 datatype,...
      );
      
  2. 唯一约束(Unique Constraint):

    • 用途:确保表中的某列或列组中的所有数据都是唯一的。
    • 语法:
      CREATE TABLE table_name (column1 datatype UNIQUE,column2 datatype,...
      );
      
  3. 外键约束(Foreign Key Constraint):

    • 用途:定义表之间的关系,确保一个表的外键与另一个表的主键匹配。
    • 语法:
      CREATE TABLE table_name1 (column1 datatype PRIMARY KEY,...
      );CREATE TABLE table_name2 (column1 datatype,column2 datatype,FOREIGN KEY (column1) REFERENCES table_name1(column1)
      );
      
  4. 检查约束(Check Constraint):

    • 用途:规定插入到表中的数据必须满足一定的条件。
    • 语法:
      CREATE TABLE table_name (column1 datatype,column2 datatype,CHECK (condition),...
      );
      
  5. 默认约束(Default Constraint):

    • 用途:为列指定默认值,当插入新记录时,如果未提供该列的值,则使用默认值。
    • 语法:
      CREATE TABLE table_name (column1 datatype DEFAULT default_value,column2 datatype,...
      );
      
  6. 非空约束(NOT NULL Constraint):

    • 用途:确保列中的数据不为空。
    • 语法:
      CREATE TABLE table_name (column1 datatype NOT NULL,column2 datatype,...
      );
      

这些约束可以在创建表时定义,也可以在已存在的表上添加或修改。通过使用约束,可以提高数据库中数据的质量和一致性。

三、数据操作语言(DML)

4.1 插入数据

在SQL中,使用INSERT INTO语句向表中插入数据。以下是基本的INSERT INTO语法:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

其中,table_name是要插入数据的表名,column1, column2, column3, ...是要插入数据的列名,value1, value2, value3, ...是对应列的实际值。
如果要插入表中的所有列,可以省略列名,但是需要确保VALUES子句中的值的顺序与表中的列的顺序相匹配。
以下是一个示例:
假设有一个表students

CREATE TABLE students (student_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),age INT
);

要向该表中插入一条学生记录:

INSERT INTO students (student_id, first_name, last_name, age)
VALUES (1, 'John', 'Doe', 20);

这将在students表中插入一条记录,指定了学生的学生ID、名字、姓氏和年龄。如果要插入表中的所有列,可以简化为:

INSERT INTO students
VALUES (1, 'John', 'Doe', 20);

Tip:实际的插入值的数据类型和顺序应该与表定义中的列相匹配。

4.2 查询数据
  1. 基本查询
    在SQL中,基本的查询语句是使用SELECT语句,查询将检索表中的所有记录。以下是基本的SELECT语句示例:
SELECT column1, column2, ...
FROM table_name;

其中,column1, column2, ...是要检索的列名,而table_name是要检索数据的表名。
如果要检索表中的所有列,可以使用通配符*

SELECT *
FROM table_name;

这将返回表中所有列的所有行。
以下是一个示例:
假设有一个表employees

CREATE TABLE employees (employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department VARCHAR(50),salary INT
);

要检索employees表中的所有记录:

SELECT *
FROM employees;

这将返回表中所有列的所有行的数据。

Tip:这样的查询可能在处理大型表时效率较低,因为它会检索表中的所有数据。在实际应用中,通常会使用WHERE子句来筛选所需的数据。

  1. 条件查询
    条件查询在SQL中使用WHERE子句来限定检索的数据。通过WHERE子句,你可以指定一个或多个条件,只有满足这些条件的行才会被检索。以下是一个基本的条件查询示例:
SELECT column1, column2, ...
FROM table_name
WHERE condition;

在这个语句中,column1, column2, ...是要检索的列,table_name是要检索的表,而condition是一个或多个用于过滤行的条件。
例如,假设有一个表employees

CREATE TABLE employees (employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department VARCHAR(50),salary INT
);

如果你想检索工资大于等于50000的员工记录,可以使用以下查询:

SELECT *
FROM employees
WHERE salary >= 50000;

这将返回employees表中所有工资大于等于50000的员工记录。
你还可以使用多个条件,例如,检索部门为’IT’且工资大于等于50000的员工记录:

SELECT *
FROM employees
WHERE department = 'IT' AND salary >= 50000;

这将返回employees表中部门为’IT’且工资大于等于50000的员工记录。

  1. 排序查询
    排序查询在SQL中使用ORDER BY子句,它用于对检索出的数据进行排序。以下是一个基本的排序查询示例:
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;

在这个语句中,column1, column2, ...是要检索的列,table_name是要检索的表,而column1 [ASC|DESC], column2 [ASC|DESC], ...是用于指定排序顺序的列。ASC表示升序(默认),DESC表示降序。
例如,假设有一个表employees

CREATE TABLE employees (employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department VARCHAR(50),salary INT
);

如果你想按工资降序排序检索员工记录,可以使用以下查询:

SELECT *
FROM employees
ORDER BY salary DESC;

这将返回employees表中按工资降序排序的所有员工记录。
如果要按部门升序排序,然后按工资降序排序,可以使用以下查询:

SELECT *
FROM employees
ORDER BY department ASC, salary DESC;

这将返回employees表中按部门升序、在同一部门内按工资降序排序的所有员工记录。

4.3 更新数据

更新数据在SQL中使用UPDATE语句。以下是一个基本的更新数据的语法示例:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

在这个语句中,table_name是要更新的表,column1 = value1, column2 = value2, ...是要设置的新值,而WHERE condition是筛选要更新的行的条件。
例如,假设有一个表employees

CREATE TABLE employees (employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department VARCHAR(50),salary INT
);

如果要将员工ID为1的工资提高1000,可以使用以下查询:

UPDATE employees
SET salary = salary + 1000
WHERE employee_id = 1;

这将更新employees表中员工ID为1的记录,将其工资增加1000。
请注意,WHERE子句是可选的。如果省略WHERE子句,将更新表中的所有行。因此,在使用UPDATE语句时,请谨慎使用WHERE子句以避免不必要的数据更改。

4.4 删除数据

在SQL中,要删除数据,可以使用DELETE语句。以下是一个基本的DELETE语句的语法示例:

DELETE FROM table_name
WHERE condition;

在这个语句中,table_name是要删除数据的表,而WHERE condition是筛选要删除的行的条件。
例如,假设有一个表employees

CREATE TABLE employees (employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department VARCHAR(50),salary INT
);

如果要删除员工ID为1的记录,可以使用以下查询:

DELETE FROM employees
WHERE employee_id = 1;

这将从employees表中删除员工ID为1的记录。
如果省略WHERE子句,DELETE语句将删除表中的所有行。因此,在使用DELETE语句时,请谨慎使用WHERE子句,以免误删除数据。

四、总结

SQL语句的基本结构包括关键字、标识符、字面量、运算符、分隔符、注释以及空格和换行符。SQL语句通常以分号作为结束符。数据定义语言(DDL)用于定义数据库结构。创建数据库使用CREATE DATABASE语句,创建表使用CREATE TABLE语句。ALTER TABLE语句用于修改表结构,而DROP TABLE语句用于删除表。约束如主键、唯一约束、外键、检查约束、默认约束和非空约束用于确保数据完整性和一致性。数据操作语言(DML)包括插入、查询、更新和删除数据。INSERT INTO语句用于插入数据,SELECT语句用于查询数据,UPDATE语句用于更新数据,DELETE语句用于删除数据。条件查询通过WHERE子句实现,排序查询通过ORDER BY子句实现。SQL的灵活性和广泛应用使其成为数据库管理和查询的核心工具。对SQL的深入理解对于数据库开发和管理人员至关重要。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

位运算总结

文章目录 🍈1. 基础位运算🍌2. 给一个数n,确定它的二进制表示中的第x位是0还是1🍏3. 将一个数n的二进制表示的第x位修改成1🍓4. 将一个数的n的二进制表示的第x位修改成0🥔5. 位图的思想🫒6. 提前…

医疗智能化:人工智能的助力与隐患

文章目录 引言:积极影响风险和挑战 结尾: 引言: 医疗领域正处于人工智能技术革新的前沿。人工智能的涌现为医疗保健带来了前所未有的变革,同时也潜藏着一系列积极影响和潜在挑战。探索人工智能在医疗领域中的影响将有助于我们更深…

医保移动支付程序开发

作为公司最苦命的开发,年初接到任务开发医保移动支付程序(微信小程序和支付宝小程序),为医疗机构提供线上医保结算。好家伙,我一看解压后资料大于一个G,内心无比的惊慌。 一、技术流程图 图太大了显示不全需…

0-1背包的初始化问题

题目链接 这道题的状态转移方程比较易于确定。dp[i][j]表示能放前i个物品的情况下,容量为j时能放物品的数量(这道题歌曲数量对应物品数量,容量对应时间)。 技巧(收获) 二维dp数组可以视情况优化为一维dp数组…

【创建一个组件并通过npm让其他人安装和调用】

创建一个组件并通过npm让其他人安装和调用 步骤一:创建一个组件步骤二:准备发布步骤三:注册npm账号并登录步骤四:发布组件步骤五:安装和使用组件 步骤一:创建一个组件 在本地创建一个新的文件夹来存放你的组…

Linux——vim编辑文件时——.swp文件解决方案

test.cpp样例 当我们vim test.cpp进入编辑文件。 却忘记了保存退出 再次进入就会出现一下画面 当你摁下Enter键位 出现以下几个选项 O——是只读不写 E——是正常打开文件但不会载入磁盘内容 R——覆盖——是加载存储磁盘的文件(当我们忘记保存时,系统会自动帮我…

事件代理?

1.什么是事件代理? 事件代理也叫事件委托,只指定一个事件处理程序,就可以管理某一类型得事件。 可以简单理解为,事件代理就是将本应该绑定子元素事件绑定给父元素代理。它的优点就是:减少事件得执行,减少浏…

CentOS 7 部署 MariaDB 的 2 种方法

有两种安装 MariaDB 服务器的方法。您可以安装 CentOS 7 存储库中可用的默认版本,也可以通过手动添加 MariaDB 存储库来安装最新版本。 如果安装过MariaDB或MySQL,使用以下命令彻底删除它们: yum remove mariadb* yum remove mysql* 方法一: 使用 Yum…

[ Vue3 ] 三种方式实现组件数据双向绑定

Vue3 三种方式实现组件数据双向绑定 在 Vue 中,组件数据双向绑定是一项非常重要的特性,它使得我们能够轻松地在组件中处理数据的变化并将其同步到视图 比如我们想要在父组件中修改数据能够同步给子组件,并且子组件修改数据也能同步给父组件…

Make Pixels Dance: High-Dynamic Video Generation论文解析

高动态视频生成的新进展 Make Pixels Dance: High-Dynamic Video Generation高动态视频生成的新进展前言视频生成模式摘要论文十问实验数据集定量评估指标消融研究 训练和推理技巧训练技术推理技术 更多的应用 Make Pixels Dance: High-Dynamic Video Generation 高动态视频生…

VBA技术资料MF87:创建固定顺序名称的一组文件夹

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

gRPC Java、Go、PHP使用例子

文章目录 1、Protocol Buffers定义接口1.1、编写接口服务1.2、Protobuf基础数据类型 2、服务器端实现2.1、生成gRPC服务类2.2、Java服务器端实现 3、java、go、php客户端实现3.1、Java客户端实现3.2、Go客户端实现3.3、PHP客户端实现 4、运行效果 本文例子是在Window平台测试&a…

Unity UGUI图片锯齿严重怎么解决

在开发的时候,发现图片锯齿严重,打包到移动端或者在编辑器都这样,如下图 原因: 查了一些资料,找到了原因如下:关于为什么会发生这种情况:看起来你的源资源比你在屏幕上显示的大小大得多。所以当…

【迅搜04】索引配置(一)加载配置文件以及服务端配置

索引配置(一)加载配置文件以及服务端配置 对于一个搜索引擎来说,索引配置是非常重要,并且也是非常核心的内容。在 XS 中,我们的索引配置是通过一个配置文件来实现的。在前两篇文章的测试中,我们使用了一个叫…

深入浅出 Vue 中的插槽 slot

深入浅出 Vue 中的插槽 slot start 最近被问到好几次 Vue 中的插槽相关知识,掌握的还是有些不全面。抱着重新学习的心态,写这篇博客。首先对基础知识做一个回顾,然后再对源码实现做一个学习。作者:番茄编写时间:2023…

初始本地仓库推送到远程仓库-git

背景(问题描述) 下面的git的操作符合的情况是: ①本地初始化一个仓库,但是还没有和远程仓库相关联; ②远程仓库也刚刚创建,里面啥也没有 然后目前就想将本地的仓库的内容和远程仓库相关联并推送到远程仓…

Linux配置SFTP用户

0. 背景 Linux机器上已有路径/data/tomcat/apache-tomcat-8.5.96/webapps/webroot,需要在该路径之下配置一个sftp用户账户对外暴露给业务人员使用。 下面是相关配置: SFTP 用户名:iios SFTP主目录:/data/tomcat/apache-tomcat-8.5.96/weba…

STM32_10(I2C)

I2C通信 I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线两根通信线:SCL(Serial Clock)、SDA(Serial Data)同步,半双工带数据应答支持总线挂载多设备(一主多从…

QAC支持的静态度量属性

上面介绍了Coverity支持的12个度量属性,下面我们看看QAC这款工具支持的度量属性。下面分成3类,函数度量、文件度量和类度量。 函数度量指标不多,一共有8个。 文件度量度量指标一共10个,如下表。 类度量指标一个8个,如…

事务一致性

数据库的并发控制与封锁 并发控制 并发控制是确保数据库在多个用户同时访问时保持数据一致性和完整性的机制。主要的并发控制技术包括: 锁定(Locking):数据库通过对数据项加锁来限制对它们的访问。锁可以是共享的(读…