最后更新:2022-07-30 21:16:12 手机定位技术交流文章
也许你对SQL的大写字不习惯,但真正的标准是大字,让我们习惯我用大写字母解释事情的方式。在下列解释中,我将会以基本语法,案例,联系形式讲解,从而加强每个句子的使用和理解。这篇文章由作者安排了一整晚写出来,希望大家三连好评,谢谢。当然,拥有本篇文章,你将完全控制使用的所有 mysql命令,不要用它买东西或搞乱学习。本文简要解释了数据库的选取部分,由于创建的数据库的初始输入,备份等都有讲过,魔法传送:
传送门
该传送门内容有:
SELECT语句用于从数据库中选择数据,返回的数据存储在称为结果集的结果表中。
选择语法:
此处,column1、column2、… 是要从中选择数据的表的字段名称。如果要选择表中的所有可用字段,请使用以下语法:
假设我们已经有一个数据库Customers如下:
选择列例
下列SQL声明在CustomerName和City列中的Customer表中选择:
选择*例
以下 SQL 语句从“Customers”表中选择所有列:
练习题:
1-在客户表中获取所有列。
2.写一个句子,城市从客户表中选择一个列。
3-从Customers表中的Country列中选择所有不同的值。(下面会讲,不懂没关系)
SELECT DISTINCT语句仅用于返回不同的(不同)值。 在表中,列通常包含许多重复值;有时你只是想列出不同的(不同)值。
SELECT DISTINCT 语法
我们还是假设有这样一个Customers数据库:
没有 DISTINCT 的 SELECT 示例
以下 SQL 语句从“Customers”表的“Country”列中选择所有(包括重复的)值:
SELECT DISTINCT 示例
以下SQL声明列出不同(不同)客户端国家/区域的数目:
练习:
1-从表中的“国家”栏中选择“客户”的所有不同值。
WHERE子项用于筛选记录,用于抽取符合指定条件的记录。
WHERE 语法
注:WHERE句子不仅使用了 SELECT句子,它也用于 UPDATE, DELETE等!
我们假设还是有Customers这样一个数据库如下:
下文例
以下 SQL 语句在“Customers”表中选择来自国家“Mexico”的所有客户:
文本字段与数字字段
SQL 需要在文本值周围使用单引号(大多数数据库系统也允许双引号)。但是,数字字段不应包含在引号中:
其中WHERE分段的算符
在WHERE分句中可以使用下列操作符:
我们可以逐一展示这些符号的使用情况。请耐心
假设我们有一个名为产品的数据库:
按价格选择所有产品18
选取所有价格大于30的产品(>)
选取所有价格小于30的产品(<)
选取所有价格大于等于30的产品(>= )
选取所有价格小于等于30的产品( <= )
选择所有价格不等于18的产品(相当于!=)
选择50至60之间的所有产品
搜索从上述客户数据库中的所有字母开始的城市
从Customers数据库中查找所有在Paris和London的用户
以上是所有符号的代表。
我们再做一些巩固的练习(我们将使用上面的客户)
1-为柏林的所有记录选择城市列值。
2-使用不是关键字选择城市不是"柏林"的所有记录。
3-选择所有记录,用户ID列值为32。
子项可结合 AND 、 OR 和 NOT 操作。 AND 和 OR 的操作用于根据多个条件筛选记录:
AND操作显示一个记录,如果所有条件都满足 AND是真。
OR操作显示一个记录,如果任何条件满足OR是正确的。
NOT操作显示条件是否正确记录。
AND 语法
OR语法
NOT语法
我们 还 假设 有 以下 的 “ 顾客 ” 表 :
AND 示例
以下 SQL 语句从Customers中选择国家为"Germany"且city为"Berlin"的所有字段:
OR 示例
选取所有"Customers" 中city为"Berlin" OR “München”:
NOT 示例
从 “Customers” 选取country不是 "Germany"的字段:
结合 AND, OR 和 NOT
从"Customers" 中选择国家为"Germany"”且城市必须为"Berlin" OR "München"的所有字段(使用括号形成复杂的表达式):
从 “Customers"中选择国家不是“Germany” 也不是"USA":的所有字段:
练习
选择 City 列值为 ‘Berlin’ 且 PostalCode 列值为 12209 的所有记录。
按 ORDER BY 关键字用于按 ascending 或 descending 顺序排序结果。 按 ORDER BY 默认,键按 ascending 到记录排序。
按语法顺序
我们 还 假设 有 以下 的 “ 顾客 ” 表 :
按例排序
从“Customers”表中选择所有客户,按“Country”列排序:
DESC命令例
从“Customers”表中选择所有客户,按“Country”列按 DESCENDING 排序:
ORDER BY 多列实例
从“Customers”表中选择所有客户,按“Country”和“CustomerName”列排序。这意味着它按国家/地区排序,但如果某些行具有相同的国家/地区,则按 CustomerName 排序:
从“Customers”表中选择所有客户,按“Country”升序和“CustomerName”列降序排序:
练习
从客户表中选择所有记录,并按城市列的字母顺序排序结果。
插入表语句用于将一个新的记录插入表中。
INSERT语法
可以INSERT INTO 用两种方式编写语句:
1-指定插入的列名和值:
2-如果要为表的所有列添加值,则无需在 SQL 查询中指定列名。但是,请确保值的顺序与表中的列顺序相同。在这里, INSERT INTO语法如下:
我们假设我们仍然有样品的客户表:
INSERT示例
以下 SQL 语句在“Customers”表中插入一条新记录:
运行显示如下:
您是否注意到我们没有在 CustomerID 字段中插入任何数字?CustomerID 列是一个自动递增字段,将在新记录插入表中时自动生成。
仅在指定列中插入数据
下面的 SQL 语句将插入一条新记录,但只在“CustomerName”、“City”和“Country”列中插入数据(CustomerID 会自动更新):
运行后将显示以下内容:
练习:
在表中插入一个新的记录。
具有 NULL 值的字段是没有值的字段。如果表中的字段是可选的,则可以在不向该字段添加值的情况下插入新记录或更新记录。然后,该字段将保存为 NULL 值。
注意: NULL值与零值或包含空字段的字段不同。 具有NULL值的字段是在创建记录时留下的字段!
如何测试NULL值?
无法使用比较运算符(例如 =、< 或 <>)测试 NULL 值。我们将不得不改用IS NULL和 IS NOT NULL运算符。
IS NULL语法
IS NOT NULL 语法
我们还是以”Customers”表为例子:
IS NULL算子
在“地址”字段中列出所有具有NULL值的客户端:
提示: 总是使用IS NULL来搜索 NULL值.
不是零运算器
IS NOT NULL操作器用于测试非空值(NOT NULL值)。
列出所有在“地址”字段中值的客户端:
练习:
从列为空的Customers位置选择所有记录PostalCode。
更新声明用于修改表中的现有记录。
UPDATE语法:
注意:更新表中的记录时要小心!注意 WHERE语句中的子句UPDATE。该WHERE子句指定应该更新哪些记录。如果省略该WHERE子句,表中的所有记录都将被更新!
让我们以“顾客”表为例:
更新表
更新客户ID=1个用户名和城市数据
更新过后将会如下:
更新多条记录
WHERE分项确定将更新多少记录。
将国家为"Mexico"的所有记录的 ContactName 更新为“Juan”:
更新后将会变成:
更新警告!
更新记录时要小心。 如果省略“在哪里”分段,所有记录都会更新!
例如:
则会导致如下结果:
练习:
更新表City中所有记录的Customers列。
删除声明用于删除表中的现有记录。
删除语法
注意:删除表中的记录时要小心!注意 WHERE语句中的子句 DELETE。该WHERE条款指定应删除哪些记录。如果省略该WHERE子句,表中的所有记录都将被删除!
哈哈,我们仍然使用"客户"表,例如如下:
删除示例
从“Customers”表中删除客户“Alfreds Futterkiste”:
于是就变成这样:
删除所有记录
您可以删除表中的所有行,而不删除表,这意味着表结构、属性和索引将保持不变
例如:在客户表中删除所有行,但不能删除表:
练习:从Customers表中删除Country值为“挪威”的所有记录。
选择顶段
SELECT TOP子句用于指定要返回的记录数。SELECT TOP子句在具有数千条记录的大表上很有用。返回大量记录会影响性能。
注意:并非所有数据库系统都支持SELECT TOP子句子。 MySQL支持限制句子选择有限的记录,而Oracle使用FETCH FIRST n ROWSONLYROWNUM
服务器/MS访问语言:
MySQL 语法:
Oracle 12语法:
例如,客户表如下:
顶端 、 限度 和 FETCH 第一例
从“客户”表(SQL Server/MS Access)中选择第一个三个记录:
MySQL方程例子:
Oracle方程例子:
最高百分比例子
从"Customers“表中选择前 50% 的记录(用于 SQL Server/MS Access):
Oracle方程例子:
添加“WHERE”项
从“Customers”表中选择前三个记录,其中国家是“Germany”(对于 SQL Server/MS Access):
MySQL方程实例
Oracle方程例子:
MIN()函数返回选定列的最小值。MAX()函数返回选定列的最大值。
MIN() 语法
MAX() 语法
现在我们换到新的产品如下:
MIN() 示例
找到最便宜的产品价格:
显示如下:
MAX() 示例
寻找最昂贵的产品价格:
返回如下:
练习:
使用 MIN 函数选择价格列最低值的记录.
COUNT()函数返回与指定条件匹配的行数。
COUNT()语法
AVG()函数返回数列的平均值。
AVG() 语法
SUM()函数返回数列的总数。
SUM() 语法
我们仍然使用餐具
COUNT() 实例
查找产品数量:
注: NULL值不包括。
AVG() 示例
找到所有产品的平均价格:
注: NULL值被忽略。
假设我现在有以下的订单详细表:
SUM() 示例
在OrderDetails表中找到“数量”字段的总数:
返回如下:
注: NULL值被忽略。
练习:
返回为价格值设置的记录数为18
LIKE操作器在搜索列指定模式的WHERE子项中使用。 与LIKE操作器结合的两个常用的快捷方式:
百分比(%)表示零,一个或多个字符
下划线 (代表一个单个字符
但请注意:MS Access使用星 (*)而不是百分比(%),以及问题()而不是行()
当然, 百分比和下线也可以结合起来!
LIKE 语法
提示: 还可以使用 AND 或 OR 算子来组合任何条件.
这里有一些例子显示了与"%"和"_"编码的LIKE不同的操作器:
所对应意思为:
第一个行:与一个开始的任何字段匹配
行2:与一个结束的任何行匹配
行3:与"或"匹配任何字段
第四行:在第二位找到"r"的任何值
行5:找到至少长2个字符的"a"开始的任何值
行6:至少长3个字符的"a"开始的任何值
行7:查看任何以a开始和以o结束的值
例如,我们仍然有以下客户表:
LIKE 示例
选择“a”开始的所有客户“CustomerName”:
选择 CustomerName 以“a”结尾的所有客户:
在CustomerName的任何位置中选择所有客户使用"或":
为所有使用"r"的客户选择"CustomerName"中的第二个位置:
选择 CustomerName 以“a”开头且长度至少为 3 个字符的所有客户:
选择“a”开始和“o”结束的所有客户端的“ContactName”:
选择 CustomerName 不以“a”开头的所有客户:
这是英文文档中的所有匹配的描述(我真的不想翻译,让我们自己看看)

假设我们仍然有以下的“客户”表:
使用 % 通配符
为所有从"ber"开始的客户选择城市:
为所有“es”客户选择城市:
返回如下:
使用 _ 通配符
选择“城市”以任何字符开始,然后选择“ondon”的所有客户:
选择城市以"L"开始,然后任何字符,"n",任何字符,和"on"为所有客户端:
使用[字符串]组合
选择“b”、“s”或“p”开始的所有客户“城市”:
选择 City 以“a”、“b”或“c”开头的所有客户:
使用[!Charlist
选择城市不包括所有以"b","s"或"p"开始的客户:
或者
IN操作器允许您在WHERE分段中指定多个值。
IN操作是针对多个加速度或条件的.
IN 语法
我们还是以“Customers”表为例子:
IN 运算符示例
选择位于’Germany’, ‘France’, 'UK’的所有客户:
选择不在选择位于’Germany’, ‘France’, 'UK’的所有客户:
选择来自同一个国家的所有供应商:
返回如下
AtBETWEEN操作员在指定范围内选择一个值,这个值可以是数字、文本或日期。
语法
我们可以使用下列产品表:
between示例
选择10至20之间的所有产品的价格:
要显示上一个示例范围之外的产品,请使用 NOT BETWEEN:
数字之间
选择价格在 10 到 20 之间的所有产品。此外;不要显示 CategoryID 为 1,2 或 3 的产品:
文本值之间
语句选择 Carnarvon Tigers 和 Mozzarella di Giovanni 之间具有 ProductName 的所有产品
选择 Carnarvon Tigers 和 Chef Anton’s Cajun Seasoning 之间所有产品的产品名称:
NOT BETWEEN Text Value
选择 ProductName 不在 Carnarvon Tigers 和 Mozzarella di Giovanni 之间的所有产品:
我们现在假设我们有以下的“订单”表:
日期之间示例
选择 OrderDate 介于 ‘01-July-1996’ 和 ‘31-July-1996’ 之间的所有订单
或者使用:
别名列语法
别名表语法
现在我们仍然假设有以下的风暴表:
还有一个叶子表
列的别名示例
创建两个别名,一个为CustomerID列,另一个为CustomerName列:
创建两个别名,一个用于 CustomerName 列,另一个用于 ContactName 列。注意:如果别名包含空格,则需要双引号或方括号:
创建一个名为“Address”的别名,该别名组合了四列(Address、PostalCode、 City 和Country):
注意:要使上述SQL声明在MySQL中运行,请使用以下命令:
表别名示例
选择来自 CustomerID=4(Around the Horn)的客户的所有订单。我们使用“Customers”和“Orders”表,分别给它们表别名“c”和“o”(这里我们使用别名来缩短SQL)
以下SQL声明与上文相同,但没有其他名称:
其他名称在下列情况下有用:
1.查询涉及多个表
2.查询涉及多个表
3.查询中使用的功能
这个列表太大或不可读
将两个或多个列结合在一起
JOIN项用于根据两个或多个表之间的相应列排列。
假设我们现在有如下的订单表
同时还有表 “Customers” 如下:
请注意,“Orders”表中的“CustomerID”列指的是“Customers”表中的“CustomerID”。上面两个表之间的关系是“CustomerID”列。
示例
使用内联(INNER JOIN)来选择两个表中的匹配值的记录:
返回如下
不同类型的SQL JOIN
INNER JOIN关键字选择两个表中的匹配值的记录。
语法:
画个图理解:
假设我们还有订单表
customer表
内部合约实例
选择包含客户信息的所有订单:
返回
JOIN 三张表
选择包含客户和发货人的信息的所有订单
返回如下
LEFT JOIN关键字返回左表 (table1) 中的所有记录,以及右表 (table2) 中的匹配记录。如果没有匹配项,则结果是右侧的 0 条记录。
左连接语法
来个图就懂了
我们仍然使用客户表:
order表
左合约实例
选择所有客户和他们可能有的所有订单:
返回如下
语法
上图就懂了
现在我们使用顺序表如下
还有一份雇员表
退还所有雇员及他们所发出的任何订单:
FULL OUTER JOIN和 FULL JOIN是一样的。
语法为:
来个图就懂了
假设我们有一个客户桌
还有个order表
选择所有客户和所有订单:
返回如下
语法
假设我们有一个库斯托默桌
同一个城市匹配的客户:
返回如下
该按句子组分将具有相同值的行分组为汇总行,例如“查找每个国家/地区的客户数量”。
该按句子组分通常与聚合函数 ( COUNT(), MAX(), MIN(), SUM(), AVG()) 一起使用, 以按一列或多列对结果集进行分组。
语法:
假设我们仍然有这个客户桌
每个 国家 / 区域 的 客户 数目 如下 :
列出了每个国家的客户数量,从高到低排序:
语法:
假设有以下的风暴表
每个国家/区域的客户数目是列出的,只包括有超过5个客户的国家/区域:
它列出每个国家的客户数目,从高到低订购(只包括超过5个国家的客户):
EXISTS操作器用于测试子查询中是否有记录。
如果子问题返回一个或多个记录,则EXISTS运算器返回真。
语法
假设我们使用产品表
suppiler表
例如:
返回 真话 并 列出 以下 20 个 产品 价格 的 供应商 :
返回如下
返回真,并列出其产品价格为22的供应商:
返回为:
单行注释以–.
–任何在一行末尾的文本都会被忽略(不执行)
例如:
又例如
多行注释/*以/.
/任何在*/之间文本将被忽略。
例如:
又例如
忽略语句的一部分:
例如
又例如
事实上,这个部分的内容已经被操作员们证明了。 再说一遍。
算术运算符有
演示一部分
比如求20+30:
除法(返回3)
取余数(返回2)
比较运算符
演示一部分
大于
不等于
大于等于
先自我介绍一下,他高中毕业了13年,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。了解大多数年轻的Java工程师,想要升技能,经常需要找到自己的成长或向班上汇报。但对于培训机构来说,学费大约是人民币,着实压力不小。当你不在系统时,自我学习的效率很低,而且很持久。也很容易停止天花板技术。所以我为你收集了一个"java开发工具"初衷也很简单,这是一个想帮助自己学习的朋友,却不知道该从哪里学习。同时减少每个人的负担.添加下方名片,你可以得到完整的学习信息
本文由 在线网速测试 整理编辑,转载请注明出处。