肝通宵写了三万字把SQL数据库的所有命令,函数,运算符讲得明明白白讲解,内容实在丰富,建议收藏+三连好评!_川川菜鸟三万字sql

57 阅读23分钟

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。 img img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

SELECT * FROM Customers WHERE City LIKE 's%';


从Customers数据库中查找所有在Paris和London的用户



SELECT * FROM Customers WHERE City IN ('Paris','London');


以上便是对所有符号的演示。  
 我们再来一些**练习**加以巩固(我们用到的是上面的customers)  
 1-选择City列值为“Berlin”的所有记录。



SELECT * FROM Customers WHERE City='Berlin';


2-使用NOT关键字选择City不是"Berlin"的所有记录。



SELECT * FROM Customers WHERE NOT City ='Berlin';


3-选择CustomerID列值为 32 的所有记录。



SELECT * FROM Customers WHERE CustomerID =12;


### AND、OR 和 NOT 运算符


该WHERE子句可以结合 AND,OR和 NOT操作。在AND与OR操作用于基于多个条件筛选记录:  
 该AND操作显示一个记录,如果所有条件满足 AND 为真。  
 所述OR操作显示一个记录,如果任何一个条件满足OR为真。  
 该NOT操作显示,如果条件(S)是不正确的记录。  
 **AND 语法**



SELECT column1, column2, ... FROM table_name WHERE condition1 AND condition2 AND condition3 ...;


**OR语法**



SELECT column1, column2, ... FROM table_name WHERE condition1 OR condition2 OR condition3 ...;


**NOT语法**



SELECT column1, column2, ... FROM table_name WHERE NOT condition;


我们还是假设有如下“Customers”表:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/4f043063d46b4b07ae3ac2ebd49430f5~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=hXD9%2B1sr5l1medWpVJO2zNK4pc4%3D)  
 **AND 示例**  
 以下 SQL 语句从Customers中选择国家为"Germany"且city为"Berlin"的所有字段:



SELECT * FROM Customers WHERE Country='Germany' AND City='Berlin';


**OR 示例**  
 选取所有"Customers" 中city为"Berlin" OR “München”:



SELECT * FROM Customers WHERE City='Berlin' OR City='München';


**NOT 示例**  
 从 “Customers” 选取country不是 "Germany"的字段:



SELECT * FROM Customers WHERE NOT Country='Germany';


**结合AND, OR and NOT**  
 从"Customers" 中选择国家为"Germany"”且城市必须为"Berlin" OR "München"的所有字段(使用括号形成复杂的表达式):



SELECT * FROM Customers WHERE Country='Germany' AND (City='Berlin' OR City='München');


从 “Customers"中选择国家不是“Germany” 也不是"USA":的所有字段:



SELECT * FROM Customers WHERE NOT Country='Germany' AND NOT Country='USA';


**练习**  
 选择 City 列值为 ‘Berlin’ 且 PostalCode 列值为 12209 的所有记录。



SELECT * FROM Customers WHERE City = 'Berlin' AND PostalCode= 12209;


### ORDER BY 关键字


该ORDER BY关键字用于按升序或降序对结果集进行排序。ORDER BY默认情况下,关键字按升序对记录进行排序。要按降序对记录进行排序,请使用 DESC关键字。  
 **ORDER BY 语法**



SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC|DESC;


我们还是假设有这个“Customers”表如下:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/3b0260c4d9524602b053d29da8c6409d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=eTfGWE0IEInAyPuf%2BBvEYqEkEaU%3D)  
 **ORDER BY 示例**  
 从“Customers”表中选择所有客户,按“Country”列排序:



SELECT * FROM Customers ORDER BY Country;


**ORDER BY DESC 示例**  
 从“Customers”表中选择所有客户,按“Country”列按 DESCENDING 排序:



SELECT * FROM Customers ORDER BY Country DESC;


**ORDER BY 多列示例**  
 从“Customers”表中选择所有客户,按“Country”和“CustomerName”列排序。这意味着它按国家/地区排序,但如果某些行具有相同的国家/地区,则按 CustomerName 排序:



SELECT * FROM Customers ORDER BY Country, CustomerName;


从“Customers”表中选择所有客户,按“Country”升序和“CustomerName”列降序排序:



SELECT * FROM Customers ORDER BY Country ASC, CustomerName DESC;


**练习**  
 从Customers表中选择所有记录,按城市列的字母顺序对结果进行排序。



SELECT * FROM Customers ORDER BY City;


### INSERT INTO 插入语句


该INSERT INTO语句用于在表中插入新记录。  
 **INSERT语法**  
 可以INSERT INTO 用两种方式编写语句:  
 1- 指定要插入的列名和值:



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


2-如果要为表的所有列添加值,则无需在 SQL 查询中指定列名。但是,请确保值的顺序与表中的列顺序相同。在这里, INSERT INTO语法如下:



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


我们假设还是有着样一个Customers表:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/58724f36154d482aa2b2c251064c1068~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=vbOsxmPVpvTsmAxAX%2BQT7vUt%2FOE%3D)  
 **INSERT示例**  
 以下 SQL 语句在“Customers”表中插入一条新记录:



INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country) VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');


运行显示如下:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/cb15b2c82bcf43b3ba4d6fc8a62bf1f7~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=h%2BwD8RToNTaA%2Bb3%2BV7CEZKRfEek%3D)  
 您是否注意到我们没有在 CustomerID 字段中插入任​​何数字?CustomerID 列是一个自动递增字段,将在新记录插入表中时自动生成。  
 **仅在指定列中插入数据**  
 下面的 SQL 语句将插入一条新记录,但只在“CustomerName”、“City”和“Country”列中插入数据(CustomerID 会自动更新):



INSERT INTO Customers (CustomerName, City, Country) VALUES ('Cardinal', 'Stavanger', 'Norway');


运行后将会显示如下:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/670495ee355c4082a6dbedeb8bfe6e35~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=x4gU068dhrAgfDHyaCUy90o3X4Y%3D)  
 **练习:**  
 表中插入一条新记录。



INSERT INTO Customers (

CustomerName, Address, City, PostalCode, Country )

VALUES

(

'Hekkan Burger', 'Gateveien 15', 'Sandnes', '4306', 'Norway' ) ;


### NULL 空值


具有 NULL 值的字段是没有值的字段。如果表中的字段是可选的,则可以在不向该字段添加值的情况下插入新记录或更新记录。然后,该字段将保存为 NULL 值。  
 **注意**: NULL 值不同于零值或包含空格的字段。具有 NULL 值的字段是在创建记录期间留空的字段!  
 **如何测试 NULL 值?**  
 无法使用比较运算符(例如 =、< 或 <>)测试 NULL 值。我们将不得不改用IS NULLIS NOT NULL运算符。  
 **IS NULL 语法**



SELECT column_names FROM table_name WHERE column_name IS NULL;


**IS NOT NULL 语法**



SELECT column_names FROM table_name WHERE column_name IS NOT NULL;


我们还是以”Customers”表为例子:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/be610544a8404729a057d87b94e9c672~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=%2FN8u07kOGt2AZRB9k4uc6HI9tHM%3D)


**IS NULL 运算符**  
 列出了 "Address"字段中具有 NULL 值的所有客户:



SELECT CustomerName, ContactName, Address FROM Customers WHERE Address IS NULL;


**提示**:始终使用 IS NULL 来查找 NULL 值。  
 **IS NOT NULL 运算符**  
 该IS NOT NULL运算符用于测试非空值(NOT NULL 值)。  
 列出了在 "Address”字段中具有值的所有客户:



SELECT CustomerName, ContactName, Address FROM Customers WHERE Address IS NOT NULL;


**练习:**  
 从列为空的Customers位置选择所有记录PostalCode。



SELECT * FROM Customers WHERE PostalCode IS NULL;


### UPDATE更新语句


UPDATE语句用于修改表中的现有记录。  
 UPDATE **语法:**



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


**注意:** 更新表中的记录时要小心!注意 WHERE语句中的子句UPDATE。该WHERE子句指定应该更新哪些记录。如果省略该WHERE子句,表中的所有记录都将被更新!  
 我们还是以“Customers”表为例:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/e533a5870570468a9b3d89db0ff1cca9~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=shR6dRhlWJtpztdGkDOEZqh5V%2Fw%3D)  
 **更新表**  
 更新CustomerID = 1的用户名字和城市数据



UPDATE Customers SET ContactName = 'Alfred Schmidt', City= 'Frankfurt' WHERE CustomerID = 1;


更新过后将会如下:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/7e3094230e964d85982b425be69ce4a7~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=ZdfyMHRpYxJmEBQ%2BZb1%2B1RCJkF4%3D)  
 **更新多条记录**  
 该WHERE子句确定将更新多少条记录。  
 将国家为"Mexico"的所有记录的 ContactName 更新为“Juan”:



UPDATE Customers SET ContactName='Juan' WHERE Country='Mexico';


更新后将会变成:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f1fac03bf3c947ba8af8a946282fd2fc~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=8whNAsNDvFZ73rwkaWzRwTZXQNc%3D)  
 **更新警告!**  
 更新记录时要小心。如果省略该 WHERE子句,则所有记录都将被更新!  
 例如:



UPDATE Customers SET ContactName='Juan';


则会导致如下结果:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/8ef0d55aa8bf4623aff43c530e1a849d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=viROaRT65Z%2FLWzlRVbxYA2bzaGE%3D)  
 **练习:**  
 更新表City中所有记录的Customers列。



UPDATE Customers SET City = 'Oslo';


### DELETE删除语句


该DELETE语句用于删除表中的现有记录。  
 **删除语法**



DELETE FROM table_name WHERE condition;


**注意:** 删除表中的记录时要小心!注意 WHERE语句中的子句 DELETE。该WHERE条款指定应删除哪些记录。如果省略该WHERE子句,表中的所有记录都将被删除!  
 哈哈哈哈,我们还是以“Customers”表为例子如下:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/34f9e9be80a7463fae4c1fc97e36c7fe~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=g8PxH9e4cyKkfo1gyN%2FOMKBexag%3D)  
 **删除示例**  
 从“Customers”表中删除客户“Alfreds Futterkiste”:



DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste';


于是就变成这样:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/a0a36e07d6f64d29b43bb9f558d2173b~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=HNEjlbQzRyAYlgN4XkcjPyryYNg%3D)  
 **删除所有记录**  
 可以在不删除表的情况下删除表中的所有行。这意味着表结构、属性和索引将保持不变



DELETE FROM table_name;


例如:删除“Customers”表中的所有行,但不删除该表:



DELETE FROM Customers;


**练习**:从Customers表中删除Country值为“挪威”的所有记录。



DELETE FROM Customers WHERE Country = 'Norway';


### TOP、LIMIT、FETCH FIRST 或 ROWNUM限制子句


**SELECT TOP 子句**  
 SELECT TOP子句用于指定要返回的记录数。SELECT TOP子句在具有数千条记录的大表上很有用。返回大量记录会影响性能。  
 **注意:** 并非所有数据库系统都支持该 SELECT TOP子句。MySQL 支持LIMIT子句选择有限数量的记录,而 Oracle 使用FETCH FIRST n ROWSONLYROWNUM  
 **Server / MS 访问语法:**



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


**MySQL 语法:**



SELECT column_name(s) FROM table_name WHERE condition LIMIT number;


**Oracle 12 语法:**



SELECT column_name(s) FROM table_name ORDER BY column_name(s) FETCH FIRST number ROWS ONLY;


比如还是“Customers”表如下  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/c5c49afe57194218a026c94a73097877~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=aAZf7sumt5XYtt5RZX5qM5FYuc0%3D)  
 **TOP、LIMIT 和 FETCH FIRST示例**  
 从 "Customers表中选择前三个记录(用于 SQL Server/MS Access):



SELECT TOP 3 * FROM Customers;


MySQL 的等效示例:



SELECT * FROM Customers LIMIT 3;


Oracle 的等效示例:



SELECT * FROM Customers FETCH FIRST 3 ROWS ONLY;


**TOP PERCENT 示例**  
 从"Customers“表中选择前 50% 的记录(用于 SQL Server/MS Access):



SELECT TOP 50 PERCENT * FROM Customers;


Oracle 的等效示例:



SELECT * FROM Customers FETCH FIRST 50 PERCENT ROWS ONLY;


**添加 WHERE 条款**  
 从“Customers”表中选择前三个记录,其中国家是“Germany”(对于 SQL Server/MS Access):



SELECT TOP 3 * FROM Customers WHERE Country='Germany';


MySQL 的等效示例



SELECT * FROM Customers WHERE Country='Germany' LIMIT 3;


Oracle 的等效示例:



SELECT * FROM Customers WHERE Country='Germany' FETCH FIRST 3 ROWS ONLY;


### MIN() 和 MAX()函数求最大最小值


MIN()函数返回所选列的最小值。MAX()函数返回所选列的最大值。  
 **MIN() 语法**



SELECT MIN(column_name) FROM table_name WHERE condition;


**MAX() 语法**



SELECT MAX(column_name) FROM table_name WHERE condition;


现在我们换一个新的表Product如下:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/1228677f8d534e19a0e9c3ba7c154491~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=Xq%2BBC7BsKCx2glSv2tcMlrsdOlk%3D)  
 **MIN() 示例**  
 查找最便宜产品的价格:



SELECT MIN(Price) AS SmallestPrice FROM Products;


显示如下:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/56ff2d2d944d4dffa7abc871a8abcb08~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=PujyQF4m1jmfU7kCi8uF0o88W3k%3D)  
 **MAX() 示例**  
 查找最贵产品的价格:



SELECT MAX(Price) AS LargestPrice FROM Products;


返回如下:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/a790bfc3c6734ce88a383ad720432d7e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=SXXsgVjEKa3V1iARwTiDZzuSj18%3D)  
 **练习:**  
 使用该MIN函数选择Price列的最小值的记录。



SELECT MIN(Price) FROM Products;


### COUNT()、AVG() 和 SUM()函数


该COUNT()函数返回与指定条件匹配的行数。  
 **COUNT() 语法**



SELECT COUNT(column_name) FROM table_name WHERE condition;

AVG()函数返回数字列的平均值。  
 **AVG() 语法**



SELECT AVG(column_name) FROM table_name WHERE condition;

SUM()函数返回数字列的总和。  
 **SUM() 语法**



SELECT SUM(column_name) FROM table_name WHERE condition;


我们还是用表product  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/ee91c8233af74bc596f3c95493aacd3a~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=q9gs2xsoj2%2Fsu9%2BlxKvWR%2BcbZt0%3D)  
 **COUNT() 示例**  
 查找产品数量:



SELECT COUNT(ProductID) FROM Products;


注意: NULL 值不计算在内。  
 **AVG() 示例**  
 查找所有产品的平均价格:



SELECT AVG(Price) FROM Products;


注意: NULL 值被忽略。  
 假设我现在有“OrderDetails”表如下:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f22052013c5041afbac3c8691f635d36~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=eQXO3ahulgdhbBiIu1Jhfs3Qo8I%3D)  
 **SUM() 示例**  
 查找“OrderDetails”表中“Quantity”字段的总和:



SELECT SUM(Quantity) FROM OrderDetails;


返回如下:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/bd693b330d9d4af2ba344eca653b7e7f~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=mqI170N10cE%2BWMnwIOwQj6Bwot0%3D)  
 注意: NULL 值被忽略。  
 **练习**:  
 返回Price值设置为18的记录数



SELECT COUNT(*) FROM Products WHERE Price = 18;


### LIKE运算符


该LIKE运算符在 WHERE子句中用于搜索列中的指定模式。有两个通配符经常与 LIKE运算符结合使用:  
 百分号 (%) 代表零、一个或多个字符  
 下划线 (*) 代表一个,单个字符  
 但是呢注意: MS Access 使用星号 (\*) 代替百分号 (%),使用问号 (?) 代替下划线 (*)  
 当然百分号和下划线也可以组合使用!  
 **LIKE 语法**



SELECT column1, column2, ... FROM table_name WHERE columnN LIKE pattern;


提示:您还可以使用 AND或OR运算符组合任意数量的条件。  
 以下是一些示例,显示了LIKE带有“%”和“\_”通配符的不同运算符:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/b987f79340c941589ceddb2dca6567d8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=QYsVYTVIwWDaQN6C7im0bOVwd5Y%3D)  
 所对应意思为:  
 第一行:匹配任何以a开头的字段  
 第二行:匹配任何以a结尾的字段  
 第三行:匹配任何具有“or”的字段  
 第四行:查找第二个位置有“r”的任何值  
 第五行:查找任何以“a”开头且长度至少为 2 个字符的值  
 第六行:查找任何以“a”开头且长度至少为 3 个字符的值  
 第七行:查看以“a”开头并以“o”结尾的任何值  
 比如我们还是有如下Customers”表:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/6b1a329a5efd417bbe4d45a32b5d881a~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=nt8Vju4JDsX86KgUUNBFas0iVSs%3D)


**LIKE 示例**  
 选择 CustomerName 以“a”开头的所有客户:



SELECT * FROM Customers WHERE CustomerName LIKE 'a%';


选择 CustomerName 以“a”结尾的所有客户:



SELECT * FROM Customers WHERE CustomerName LIKE '%a';


选择 CustomerName 中任何位置都有“或”的所有客户:



SELECT * FROM Customers WHERE CustomerName LIKE '%or%';


选择 CustomerName 中第二个位置为“r”的所有客户:



SELECT * FROM Customers WHERE CustomerName LIKE '_r%';


选择 CustomerName 以“a”开头且长度至少为 3 个字符的所有客户:



SELECT * FROM Customers WHERE CustomerName LIKE 'a__%';


选择 ContactName 以“a”开头并以“o”结尾的所有客户:



SELECT * FROM Customers WHERE ContactName LIKE 'a%o';


选择 CustomerName 不以“a”开头的所有客户:



SELECT * FROM Customers WHERE CustomerName NOT LIKE 'a%';


### 通配符\*?!等


这是英文文档所有通配符描述(实在不想翻译,大家自己看看)  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/8662fd09340d4333b90b030f4c552240~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=TFgDhUcIshnqPXmeGXpz2Afl93M%3D)  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/0f6e2f255c0644b9b6c942cb83561d5a~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=GfPLMP0Mt61Yb17IYenN5y7JBhQ%3D)  
 假设我们还是有如下“Customers”表:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/5f6aac5da10f4f69bd28abd8b351c349~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=cDYvjs9okN9adcbCT%2FPz7IEJLck%3D)  
 **使用 % 通配符**  
 选择 City 以“ber”开头的所有客户:



SELECT * FROM Customers WHERE City LIKE 'ber%';


选择 City 包含“es”的所有客户:



SELECT * FROM Customers WHERE City LIKE '%es%';


返回如下:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2da808c9f63340728cc00d196dd9a382~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=r59gRjs0QEgmV4FsUUI57IBBxeU%3D)  
 **使用 \_ 通配符**  
 选择 City 以任何字符开头,后跟“ondon”的所有客户:



SELECT * FROM Customers WHERE City LIKE '_ondon';


选择 City 以“L”开头、后跟任意字符、“n”、任意字符、“on”的所有客户:



SELECT * FROM Customers WHERE City LIKE 'L_n_on';


**使用 [charlist] 通配符**  
 选择 City 以“b”、“s”或“p”开头的所有客户:



SELECT * FROM Customers WHERE City LIKE '[bsp]%';


选择 City 以“a”、“b”或“c”开头的所有客户:



SELECT * FROM Customers WHERE City LIKE '[a-c]%';


**使用 [!charlist] 通配符**  
 选择 City 不是以“b”、“s”或“p”开头的所有客户:



SELECT * FROM Customers WHERE City LIKE '[!bsp]%';


或者



SELECT * FROM Customers WHERE City NOT LIKE '[bsp]%';


### IN运算符


IN运算符允许您在 WHERE子句中指定多个值。  
 IN操作是针对多个速记 OR条件。  
 **IN 语法**



SELECT column_name(s) FROM table_name WHERE column_name IN (value1, value2, ...);


我们还是以“Customers”表为例子:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/347e024e343c47ab8400801d540adae2~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=YjYAXc%2BT3lcZGzcs4kMegZxOZr8%3D)  
 **IN 运算符示例**  
 选择位于’Germany’, ‘France’, 'UK’的所有客户:



SELECT * FROM Customers WHERE Country IN ('Germany', 'France', 'UK');


选择不在选择位于’Germany’, ‘France’, 'UK’的所有客户:



SELECT * FROM Customers WHERE Country NOT IN ('Germany', 'France', 'UK');


选择与 Suppliers来自相同国家的所有客户:



SELECT * FROM Customers WHERE Country IN (SELECT Country FROM Suppliers);


返回如下  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/b36565627f8140bcb80b915591ccdacc~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=wZXszjowJqRH4bkBm9269BgE820%3D)


### BETWEEN 之间运算符


在BETWEEN操作者选择一个给定的范围内的值。值可以是数字、文本或日期。  
 **BETWEEN 语法**



SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;


我们有用到如下的product表:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/17bccd9ed67a467d983f2849bffcd78f~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=5Qg5zm9B89iPBgp8fdo1qGmMKAo%3D)  
 **between示例**  
 选择价格在 10 到 20 之间的所有产品:



SELECT * FROM Products WHERE Price BETWEEN 10 AND 20;


要显示上一个示例范围之外的产品,请使用 NOT BETWEEN

SELECT * FROM Products WHERE Price NOT BETWEEN 10 AND 20;


**数字之间**  
 选择价格在 10 到 20 之间的所有产品。此外;不要显示 CategoryID 为 1,2 或 3 的产品:



SELECT * FROM Products WHERE Price BETWEEN 10 AND 20 AND CategoryID NOT IN (1,2,3);


**文本值之间**  
 语句选择 Carnarvon Tigers 和 Mozzarella di Giovanni 之间具有 ProductName 的所有产品



SELECT * FROM Products WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni' ORDER BY ProductName;


选择产品名称介于 Carnarvon Tigers 和 Chef Anton’s Cajun Seasoning 之间的所有产品:



SELECT * FROM Products WHERE ProductName BETWEEN "Carnarvon Tigers" AND "Chef Anton's Cajun Seasoning" ORDER BY ProductName;


**NOT BETWEEN 文本值**  
 选择 ProductName 不在 Carnarvon Tigers 和 Mozzarella di Giovanni 之间的所有产品:



SELECT * FROM Products WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni' ORDER BY ProductName;


我们现在假设有如下"Orders" 表:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/8338181241bd4c8985a207d5a265d579~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=hB4dCguQvk8k0dmBAsEedctMLAM%3D)  
 **日期之间示例**  
 选择 OrderDate 介于 ‘01-July-1996’ 和 ‘31-July-1996’ 之间的所有订单



SELECT * FROM Orders WHERE OrderDate BETWEEN #07/01/1996# AND #07/31/1996#;


或者使用:



SELECT * FROM Orders WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';


### AS 别名使用


**别名列语法**



SELECT column_name AS alias_name FROM table_name;


**别名表语法**



SELECT column_name(s) FROM table_name AS alias_name;


现在我们还是假设有custorm表如下:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9b66e271c45d40969be025ca2e898b31~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=%2BLnuey4kcR7JdZobWcUoFc7tYYg%3D)  
 还有一个oeder表  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/aeeda8812d1442a596025119acf4c512~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=p1YtlpKmNQyQ76Wo2KXhDv7bAEs%3D)  
 **列的别名示例**  
 创建两个别名,一个用于 CustomerID 列,另一个用于 CustomerName 列:



SELECT CustomerID AS ID, CustomerName AS Customer FROM Customers;


创建两个别名,一个用于 CustomerName 列,另一个用于 ContactName 列。注意:如果别名包含空格,则需要双引号或方括号:



SELECT CustomerName AS Customer, ContactName AS [Contact Person] FROM Customers;


创建一个名为“Address”的别名,该别名组合了四列(Address、PostalCode、 City 和Country):



SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address FROM Customers;


注意:要使上面的 SQL 语句在 MySQL 中工作,请使用以下命令:



SELECT CustomerName, CONCAT(Address,', ',PostalCode,', ',City,', ',Country) AS Address FROM Customers;


**表别名示例**  
 选择来自 CustomerID=4(Around the Horn)的客户的所有订单。我们使用“Customers”和“Orders”表,分别给它们表别名“c”和“o”(这里我们使用别名来缩短SQL)



SELECT o.OrderID, o.OrderDate, c.CustomerName FROM Customers AS c, Orders AS o WHERE c.CustomerName='Around the Horn' AND c.CustomerID=o.CustomerID;


以下 SQL 语句与上面相同,但没有别名:



SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName FROM Customers, Orders WHERE Customers.CustomerName='Around the Horn' AND Customers.CustomerID=Orders.CustomerID;


别名在以下情况下很有用:  
 1.一个查询涉及多个表  
 2.一个查询涉及多个表  
 3.查询中使用的函数  
 4.列名很大或不太可读  
 5.两列或更多列组合在一起


### JOIN连接


JOIN子句用于行从两个或更多表根据它们之间的相关列结合。  
 假设我们现在有"Orders" 表如下  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/ccc48905366741ab9566f54e2f491483~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=H2YbTrXOzwg%2FBXo95RlDhYlqNcE%3D)  
 同时还有表 “Customers” 如下:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2cbade0e994243ac9e4a601d18ead794~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=6OeeJgCGajym5Y738QCMsFJUemw%3D)  
 请注意,“Orders”表中的“CustomerID”列指的是“Customers”表中的“CustomerID”。上面两个表之间的关系是“CustomerID”列。  
 **示例**  
 使用INNER JOIN选择在两个表中具有匹配值的记录:



SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate FROM Orders INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;


返回如下  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/3cc6a7055ac049b0ae6b082cecede0cc~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=SFWjeeQS4W%2F2KVhmKNB4a0OoPBw%3D)  
 **不同类型的 SQL JOIN**  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/793ba9c8ad3f44b2bbc261afd7a18ba8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=0KJnMn9%2BAFDaYxvZleu9rniMnJg%3D)


### INNER JOIN内连接关键字


INNER JOIN关键字选择在两个表中具有匹配值的记录。  
 语法:



SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;


画个图理解:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/ce12f7ad0b834a73956a457981d6f630~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=WcMzOyMklB4u%2FDgDO7B4TsWI4Kc%3D)  
 假设我们还是有order表  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/1922ef9e4d4645718d07e3c1bc7386a5~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=YMytRW5CaLzMzu0cz0isHk85ntk%3D)  
 customer表  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9a2f3449aae1464db9767fda66b5cd8e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=DBAWrgHD1Q6xYf4jRi9ZG5uQRE8%3D)  
 **INNER JOIN 示例**  
 选择所有包含客户信息的订单:



SELECT Orders.OrderID, Customers.CustomerName FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;


返回  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/3720ad478810475c999847a72ad761d4~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=1XAil7Jf5xdSCA0oMvioWRif4KY%3D)  
 **JOIN 三张表**  
 选择包含客户和发货人信息的所有订单



SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName FROM ((Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID) INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);


返回如下  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/d54f9cdb3b5b446a83cce9b490014c5b~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=5rdD0q1eZl9T23jJOGwkxcbKjAA%3D)


### LEFT JOIN 左连接 关键字


LEFT JOIN关键字返回左表 (table1) 中的所有记录,以及右表 (table2) 中的匹配记录。如果没有匹配项,则结果是右侧的 0 条记录。  
 **左连接语法**



SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;


来个图就懂了  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/428f1dda089547ac96661b22dd83eedf~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=aPLaxjFPtTtVo14ZIM1ZKFjrrXc%3D)  
 我们还是用customer表:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f20909514d0e4bd49a3d80ee9e40a6f9~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=m1pFNlAWrwcxlp%2BRnQjQW9D%2BlxQ%3D)  
 order表  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/4410b466c58a4ec19629084e9c32084d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=NCog5C1jCH0Y9kDa9%2F1oNj0epEA%3D)  
 **LEFT JOIN 示例**  
 选择所有客户,以及他们可能拥有的任何订单:



SELECT Customers.CustomerName, Orders.OrderID FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID ORDER BY Customers.CustomerName;


返回如下  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/3d5a34b7be344894ac276957026278d1~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=r2vBQZ2iWMUw1hnHagBZAPNxM08%3D)


### RIGHT JOIN右连接 关键字


**语法**



SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;


上图就懂了  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/691b265478ab4bf8bff26646192b6cf8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=Yg%2BotXPTjLzPMrJuCuSF%2FTXYqVo%3D)  
 现在我们用到order表如下  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/17cb344088754fb7acc9953005e73eef~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=Wk%2FwJAnS6%2FGXisgJyyLzmkp2KBo%3D)  
 还有个employee表  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/7c7c677fb6e942ffa02ebf6488c8c99b~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=zcFT%2BOUWVaxxzdYpC8odfKFGxSA%3D)  
 返回所有员工,以及他们可能下过的任何订单:



SELECT Orders.OrderID, Employees.LastName, Employees.FirstName FROM Orders RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID ORDER BY Orders.OrderID;


### FULL OUTER JOIN 关键字


FULL OUTER JOINFULL JOIN是一样的。  
 语法为:



SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name WHERE condition;


来个图就懂了  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/0925a6f3d355400985a4de6979eac0cc~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=jbltZcl%2BwnZFPqq%2FaQ2%2FuE%2Famt4%3D)  
 我们假设还是以customer表  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/c7e824b275e64d20a54977a9deaaeecc~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=ZOc%2Befu6yLuMZCEWEb9gNmU6rLQ%3D)  
 还有个order表  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9631998bdd8147d9bd03be0c41a081b8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=H0oouqKf2t2eavnFEZrflCifVRE%3D)  
 选择所有客户和所有订单:



SELECT Customers.CustomerName, Orders.OrderID FROM Customers FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID ORDER BY Customers.CustomerName;


返回如下  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f0a84bf327d94a4d98468e72fa10ee5f~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=ReO0qnVeGewNen9hHahE5V118To%3D)


### Self Join自连接 关键字


语法



SELECT column_name(s) FROM table1 T1, table1 T2 WHERE condition;



**收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**
![img](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/ff250b0590c048e6a10f20d1fc2831f1~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=sMZZIMsSkN08Pk6f%2B2v8GMmLxoU%3D)
![img](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/a1cb40a404e54956962db8d6c0797db4~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771316207&x-signature=BNQYIko1qReMdneVxenDO%2FCTtZo%3D)

**[如果你需要这些资料,可以戳这里获取](https://gitee.com/vip204888)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**