【SQL基础-1】SQL基本语句—增删改查

2023-11-19

SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。 SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。注意,SQL 对大小写不敏感:SELECT 与 select 是相同的。

对于零基础入门渗透测试而言,对数据库编程的掌握程度无需像专业数据处理人员那样精通,无需对SQL有多深入的了解,主要是先理解SQL语句的运行规则。本阶段对数据库的学习主要分为三个步骤:
(1)配合SQL语句菜鸟联盟理解基础语句。
(2)在SQLzoo平台上根据题目进行练习,加深对语句的理解;
(3)观看入门教学视频加深理解:【戴师兄】SQL入门免费教程。该专栏视频主要描述SQL语句运行规则,总共有4个视频,时长约3.5h。

1 SQL 增删改查基本语句

(1)增删改查是一个数据操作工具最基本的命令,在SQL中,这四种语句主要由以下关键字语句执行:

  • :insert
  • :delete
  • :update
  • :select

(2)SQL 语句后面的分号:

  • 某些数据库系统要求在每条 SQL 语句的末端使用分号。
  • 分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。
  • 在本教程中,我们将在每条 SQL 语句的末端使用分号。

2 查:select 语句

2.1 select 基本语句

功能:SELECT 语句用于从数据库中选取数据,选取结果被存储在一个结果表中,称为结果集。
语法:可以用以下语句选择特定列名,或用*代替表示所有列。

SELECT column_name,column_name
FROM table_name;

练习网址https://sqlzoo.net/wiki/SELECT
在这里插入图片描述

2.2 Select distinct 语句

功能:在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。distinct 关键词用于返回唯一不同的值
语法

SELECT DISTINCT column_name,column_name
FROM table_name;

例子
在这里插入图片描述

2.3 Select … where 语句

功能:SELECT语句用于从数据库中选取数据,WHERE子句用于提取那些满足指定条件的记录。而指定条件需要用到各种运算符。
语法

SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;

WHERE 子句中的运算符:下面的运算符可以在 WHERE 子句中使用:

运算符 描述
= 等于
<> 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
IN 指定针对某个列的多个可能值

其中,WHERE 子句中的运算符的具体用法可参考《SQL WHERE 子句笔记篇》

例子:下面的 SQL 语句从 “Websites” 表中选取国家为 “CN” 的所有网站:


SELECT * FROM Websites WHERE country='CN';
#SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。
#在上个实例中 'CN' 文本字段使用了单引号。
#如果是数值字段,请不要使用引号。
SELECT * FROM Websites WHERE id=1;

练习网址:https://sqlzoo.net/wiki/SELECT_…_WHERE
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4 Select … order by 语句

功能:SELECT语句用于从数据库中选取数据,用于对一列或者多列数据进行升序(ASC)或者降序(DESC)排列。默认为升序排列,如果要对某元素按降序排列则在对应关键字后添加参数DESC。
语法

SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

例子
在这里插入图片描述

2.5 Select … group by 语句

功能:SELECT语句用于从数据库中选取数据, GROUP BY 语句用来对相同的数据进行分组。
语法

SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN

练习网址:https://sqlzoo.net/wiki/SELECT_…_GROUP_BY
在这里插入图片描述

2.6 SELECT TOP 子句

功能:SELECT TOP 子句用于规定要返回的记录的数目。SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。
注意:并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。
SQL Server / MS Access 语法

SELECT TOP number|percent column_name(s)
FROM table_name;

MySQL 语法

SELECT column_name(s)
FROM table_name
LIMIT number;

实例

SELECT *
FROM Persons
LIMIT 5;

Oracle 语法

SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;

实例

SELECT *
FROM Persons
WHERE ROWNUM <=5;

例子
在这里插入图片描述
在这里插入图片描述

2.7 Select … join 语句

功能:JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
类型

  • INNER JOIN:如果表中有至少一个匹配,则返回行;
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行;
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行;
  • FULL JOIN:只要其中一个表中存在匹配,则返回行。

功能图解:不同类型的join语句功能图解
在这里插入图片描述
例子
在这里插入图片描述
在这里插入图片描述

练习网址:https://sqlzoo.net/wiki/SELECT_…_JOIN
在这里插入图片描述

3 增:insert into 语句

功能:用于向表中插入新记录,可以插入一行也可以同时插入多行。

语法:INSERT INTO 语句可以有两种编写形式。

  • 第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name
VALUES (value1,value2,value3,...);
  • 第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

例子
在这里插入图片描述

练习网址:https://sqlzoo.net/wiki/INSERT_…_VALUES
在这里插入图片描述

4 改:update 语句

功能用于更新表中已存在的记录。
语法

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

注意:WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!
例子
在这里插入图片描述

5 删:delete 语句

功能用于删除表中的行。
语法

DELETE FROM table_name
WHERE some_column=some_value;

例子
在这里插入图片描述

练习网址:https://sqlzoo.net/wiki/DELETE
在这里插入图片描述

6 XXX … Select 语句

(1)功能:在一个查询语句中使用另一个查询语句的结果,用于无法一次查询到所需内容的情况。

(2)子查询可以与 SELECT、INSERT、UPDATE 和 DELETE 语句一起使用,并可使用运算符如 =、<、>、>=、<=、IN、BETWEEN 等。

(3)以下是子查询必须遵循的几个规则

  • 子查询必须用括号括起来。
  • 子查询在 SELECT 子句中只能有一个列,除非在主查询中有多列,与子查询的所选列进行比较。
  • ORDER BY 不能用在子查询中,虽然主查询可以使用 ORDER BY。可以在子查询中使用 GROUP BY,功能与 ORDER BY 相同。
  • 子查询返回多于一行,只能与多值运算符一起使用,如 IN 运算符。
  • BETWEEN 运算符不能与子查询一起使用,但是,BETWEEN 可在子查询内使用。

(4)语法

--SELECT 语句中的子查询使用
SELECT column_name [, column_name ]
FROM   table1 [, table2 ]
WHERE  column_name OPERATOR
      (SELECT column_name [, column_name ]
      FROM table1 [, table2 ]
      [WHERE])
      
--INSERT 语句中的子查询使用
--INSERT 语句使用子查询返回的数据插入到另一个表中。
INSERT INTO table_name [ (column1 [, column2 ]) ]
   SELECT [ *|column1 [, column2 ] ]
   FROM table1 [, table2 ]
   [ WHERE VALUE OPERATOR ]

--UPDATE 语句中的子查询使用
--当通过 UPDATE 语句使用子查询时,表中单个或多个列被更新。
UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

--DELETE 语句中的子查询使用
DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

7 数据库连接与退出

要对数据库进行操作,需要先连接数据库;操作完毕后需要退出数据库。对数据库的连接与退出命令如下:

/*两种连接方式*/
mysql -uroot -ppass						-- 连接本地SQL,账号为root,密码为pass
mysql -h192.168.206.100 -uroot -ppass	-- 连接远程SQL,IP为192.168.206.100,账号为root,密码为pass

/*三种退出方式*/
exit;
quit;
\q;

8 归纳

(1)掌握select及其扩展的各种查询语句,如; Select distinct 、 Select … where、 Select … order by、Select … group by、SELECT TOP 、Select … join等语句
(2)掌握insert 、delete、update等增删改语句;
(3)掌握增删改查中包含子查询的语句;
(4)掌握数据库的连接与退出方式。

参考文章

[1] 《SQL 教程》
[2] 《SQLzoo练习平台》
[3] 《千锋网络安全零基础到就业教程-Web渗透全套》
[4] 《【SQL基础】SQL增删改查基本语句》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【SQL基础-1】SQL基本语句—增删改查 的相关文章

  • Sql Server 的夏令时

    我们正在使用一个以 C Unix 格式存储日期的旧应用程序 C 时间基本上是自 1970 年 1 月 1 日以来的秒数 日期以整数形式存储在 SQL Server 数据库中 我正在为使用这些日期的报告编写视图 到目前为止 我正在使用以下命令
  • 优化 LATERAL join 中的慢速聚合

    在我的 PostgreSQL 9 6 2 数据库中 我有一个查询 该查询根据一些股票数据构建计算字段表 它为表中的每一行计算 1 到 10 年的移动平均窗口 并将其用于周期性调整 具体来说 CAPE CAPB CAPC CAPS 和 CAP
  • Oracle 删除约束级联等效于 Sql Server

    在Oracle中 删除约束PK SAI我使用语法 ALTER TABLE SAISIE DROP CONSTRAINT PK SAI CASCADE SQL Server 中与此等效的是什么 您正在考虑与实际 DELETE 语句相关的 FO
  • 与 SQL 中的 IN 运算符相反

    我怎么能做相反的事情 换句话说 选择所有姓氏不是 Hansen 或 Pettersen 的人 WHERE lastname NOT IN Hansen Pettersen 请参阅 IN 和 NOT IN 运算符 部分SQLite 所理解的
  • 如何将彼此“接近”的纬度/经度点分组?

    我有一个用户提交的纬度 经度点的数据库 并且正在尝试将 接近 点分组在一起 接近 是相对的 但目前看来约为 500 英尺 起初 我似乎只能按前 3 个小数位具有相同纬度 经度的行进行分组 大约是一个 300x300 的盒子 了解当您远离赤道
  • 错误:不支持的 PIVOT 列类型:文本

    我正在尝试执行 PIVOT 但出现错误 我正在尝试查看哪些患者接受了多次间隔治疗 该列是文本类型 我尝试在查询中将列类型转换为 VARCHAR MAX 但仍然收到错误 这是我的代码 SELECT patientname IntervalNa
  • REGEXP_REPLACE - 仅当包含在 () 中时才从字符串中删除逗号

    我在 oracle 论坛网站找到了一个例子 输入字符串 a b c x y z a xx yy zz x WITH t AS SELECT a b c x y z a xx yy zz x col1 FROM dual SELECT t c
  • SQL 约束最小值/最大值?

    有没有办法为数字字段设置 SQL 约束 最小值应为 1234 最大值应为 4523 SQL Server 语法为the check约束 http technet microsoft com en us library ms179491 as
  • PostgreSQL 在递归查询中找到所有可能的组合(排列)

    输入是一个长度为 n 的数组 我需要生成数组元素的所有可能组合 包括输入数组中元素较少的所有组合 IN j A B C OUT k A AB AC ABC ACB B BA BC BAC BCA 随着重复 所以AB BA 我尝试过这样的事情
  • 通过 SQLAlchemy 获取随机行

    如何使用 SQLAlchemy 从表中选择一个或多个随机行 这在很大程度上是一个特定于数据库的问题 我知道 PostgreSQL SQLite MySQL 和 Oracle 具有通过随机函数排序的能力 因此您可以在 SQLAlchemy 中
  • 如何使用 SQL 通过表示多级订单的 varchar 字段正确排序?

    我不太喜欢数据库 我发现在查询上出现以下问题SQL服务器数据库旧的遗留应用程序的 我声明不幸的是我无法更改数据库结构 字段类型 这非常难看 我有以下情况 SELECT Sottocategoria IdSottocategoria IdCa
  • Extbase - 从查询中获取创建的sql

    我想从我的typo3 扩展中获取一些数据库表 该扩展基于 extbase 查询总是不返回任何内容 但数据存在 我试过这个 query this gt createQuery query gt statement SELECT FROM my
  • Magento --“SQLSTATE[23000]:违反完整性约束..”客户更新

    迁移服务器后 每次尝试更新客户信息时都会出现错误 我正在使用一个客户激活插件 http www magentocommerce com magento connect vinai extension 489 customer activat
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • 如何引用下一行的数据?

    我正在 PostgreSQL 9 2 中编写一个函数 对于股票价格和日期的表 我想计算每个条目较前一天的百分比变化 对于最早一天的数据 不会有前一天 因此该条目可以简单地为 Nil 我知道WITH声明可能不应该高于IF陈述 到目前为止 这就
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • MySQL:如何获取每个分组的x个结果数[重复]

    这个问题在这里已经有答案了 可能的重复 mysql 在 GROUP BY 中使用 LIMIT 来获取每组 N 个结果 https stackoverflow com questions 2129693 mysql using limit w
  • 使用 MS Access 链接表连接到 SQL Server 后端时是否可能发生 SQL 注入

    我一直在对此进行一些研究 但到目前为止还是一片空白 情况是这样的 我正在开发一个链接到 SQL Server 后端的 MS Access 前端 我在某种程度上使用 Access 中的链接表 表单访问 SQL DB 这样 当用户更新表单中的值
  • 在 MS Access SQL 查询中从正常日期转换为 unix 纪元日期

    我正在尝试编写一个通过 ODBC 连接到 MySQL 数据库的 MS Access 2007 连接的查询 一切工作正常 查询执行我想要的操作 我挂断的部分是我一直在询问用户 unix 纪元时间 而不是常规日期 我查找了 MS Access
  • 没有为 1 个或多个必需参数给出值。更新SQL

    我正在编写一个程序 当用户在列表视图上选择记录时 该程序会更新密码或积分 我收到错误 没有为 1 个或多个必需参数给出值 我不知道如何纠正 我是否遗漏了一些明显的东西 Dim sql As String UPDATE Users SET P

随机推荐

  • sql: paging in SQL Server

    sql server 2012 及以上 涂聚文 Geovin Du geovindu 注 SELECT FROM BookKindList ORDER BY SELECT NULL OFFSET 0 ROWS FETCH NEXT 3 RO
  • 数学建模4 论文写作排版和技巧

    文字 标题一 四号黑体 标题二 三 小四号黑体 正文 宋体小四 行距1 5 标题前后空0 5行 英文和数字使用Times New Roman 小四 包括表格中的内 表头在表格上方 需写成 表1 什么什么表 黑体小五加粗 居中 图名在图下 需
  • Saas-Export项目之部门数据回显(下拉框和单选框回显)

    Saas Export项目之部门数据回显 之前的经验 做数据回显一般就是在数据修改时需要查询出这条信息 然后再将数据拆分每一项逐一赋值在表单上 通常赋值就行 而且都是input type text这种类型的 所有只要在input里增加val
  • 推荐 4 个本月火火火的开源项目

    本期推荐开源项目目录 1 开源的 AI 生成图像 APP 2 属于你的微信聊天机器人 3 好玩的 Windows 桌面应用 4 Windows 12 网页版 01 开源的 AI 生成图像 APP 该开源项目技术栈基于 Next js Cha
  • 与Miriam Suzanne一起进行Sass,Susy,单元测试和寻找声音

    In this episode of the Versioning Show Tim and David are joined by Miriam Suzanne best known for Susy a responsive layou
  • jmockit使用(一) —— mock 系统时间

    一 mock工具被广泛的应用于单测中 尤其是当测试环境系统依赖的外部项较多 而且不受控制时 jmockit一般有2种方式 一种是基于行为的方式 使用者在单测类中写 Expectations 里面放置 预期 会被执行的代码段和返回 这就是一种
  • 12款最常使用的网络爬虫工具推荐

    网络爬虫在当今的许多领域得到广泛应用 它的作用是从任何网站获取特定的或更新的数据并存储下来 网络爬虫工具越来越为人所熟知 因为网络爬虫简化并自动化了整个爬取过程 使每个人都可以轻松访问网站数据资源 使用网络爬虫工具可以让人们免于重复打字或复
  • VTK7.1.1+VS2017+QT的安装与配置

    本文转载自 https blog csdn net hebbely article details 81067505 简述 为了实现RealSense的PCL点云显示 需要VTK支持 由于整个平台在Qt环境实现 VTK编译为Qt插件 QVT
  • YOLO v5 引入解耦头部

    YOLO v5 引入解耦头部 最近想开个 深度学习模型搭建 opencv方面的训练营 有兴趣可以私聊我 文章目录 YOLO v5 引入解耦头部 前言 一 解耦头部示意图 二 在YOLO v5 中引入解耦头部 1 修改common py文件
  • Sqlite3 常见几种数据插入方式性能比较

    include
  • 【读写锁 ReadWriteLock 结合 LinkedHashMap】

    import java util LinkedHashMap import java util Map import java util concurrent locks ReadWriteLock import java util con
  • 微信小程序自定义tree组件,拿走直接用

    工作原因 微信小程序需要一个功能类似于elemenui中的tree组件 找了好多ui组件库没有能直接用的 最后自己写了一套 封装成组件 中心技术是组件本身递归 只需要在父级页面传 树列表数据 和 选中的节点id 就可以用了 tree组件 t
  • 期货计算题

    期货考试计算题精选及答案 1 1月5日 大连商品交易所黄大豆1号3月份期货合约的结算价是2800元 吨 该合约下一交易日跌停板价格正常是 元 吨 A 2716 B 2720 C 2884 D 2880 答案 A 分析 本题考察的是期货合约涨
  • Unity的三级排序层级渲染Layer,sorting layer,order in layer

    一 前言 Unity游戏开发中 模型 界面 特效等等 需要规划好层的概念 涉及到摄像机 Camera 画布 Canvas Shader等相关内容 Unity大致按照三级排序进行层级渲染 Camera的Depth CullingMask gt
  • 模块化规范

    常用模块化有两种规范 commonJS和ES6 一 两者区别 二 如何转义 我们常遇到的使用场景是 在commonJS的模块里需要引入ES6规范的模块 这时就需要把ES6模块转译为commonJS规范的模块 否则报错 转义工具有 Babel
  • mysql udf函数_Linux平台下 MYSQL用户自定义函数(UDF)的利用

    来源 http hi baidu com ylbhz Linux平台下 MYSQL用户自定义函数 UDF 的利用 Chris Anley chris ngssoftware com 5th July 2004 根据MySQL函数族的可扩展机
  • 双向A*算法的Python实现

    双向A 算法的Python实现 双向A算法是一种用于寻找最短路径的启发式搜索算法 它通过同时从起点和终点进行搜索 以加快搜索过程并找到最短路径 在本文中 我们将介绍如何使用Python实现双向A算法 并提供相应的源代码 算法步骤 创建一个节
  • 【机器学习算法模型】关联分析——Apriori

    机器学习算法模型 关联分析 Apriori 参考材料 1 统计学习方法 李航 2 机器学习 周志华 3 数据挖掘 概念与技术 范明 孟小峰译
  • bigdecimal类型和String类型互相转换

    实现bigdecimal类型转成String类型 BigDecimal bd new BigDecimal xxx String str bd toString String类型转成bigdecimal类型 String str xxx B
  • 【SQL基础-1】SQL基本语句—增删改查

    目录 1 SQL 增删改查基本语句 2 查 select 语句 2 1 select 基本语句 2 2 Select distinct 语句 2 3 Select where 语句 2 4 Select order by 语句 2 5 Se