SQL基礎(chǔ)語法筆記

1、數(shù)據(jù)檢索

  • 選擇單列

從Products中選出prod_name列

SELECT prod_name
FROM Products;
  • 選擇多個列

SELECT prod_id, prod_name, prod_price
FROM Products;
  • 選擇所有列

SELECT *
FROM Products;
  • 選擇前五行

SELECT TOP 5 prod_name
FROM Products;
  • 選擇從第5行開始的5行數(shù)據(jù)

SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5;

2、排序檢索

  • 排序數(shù)據(jù)

SELECT prod_name
FROM Products
ORDER BY prod_name;

提取prod-name,并且用它來排序。

  • 按照多個列排序

SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price, prod_name;
  • 按照列位置排序

SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY 2, 3;
  • 指定排序方向

  • 降序:
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC;
  • 只降第一個:
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC, prod_name;
  • 所有的都降
    如果想在多個列上進(jìn)行降序排序,必須對每一列指定 DESC 關(guān)鍵字。

3、過濾數(shù)據(jù)

  • where子句

SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49;

在同時使用 ORDER BY 和 WHERE 子句時,應(yīng)該讓 ORDER BY 位于WHERE 之后,否則將會產(chǎn)生錯誤。一般來說,order by一般都放在最后。

  • where子句的操作符

be469e4d2f0882f0d8ef210254a0512.png
  • 列出所有價格小于 10 美元的產(chǎn)品
SELECT prod_name, prod_price
FROM Products
WHERE prod_price < 10;
  • 檢索所有價格小于等于 10 美元的產(chǎn)品
SELECT prod_name, prod_price
FROM Products
WHERE prod_price <= 10;
  • 列出所有不是供應(yīng)商 DLL01 制造的產(chǎn)品:
SELECT vend_id, prod_name
FROM Products
WHERE vend_id <> 'DLL01';

觀察上述 WHERE 子句中的條件,會看到有的值括在單引號內(nèi),而有的值未括起來。單引號用來限定字符串。如果將值與字符串類型的列進(jìn)行比較,就需要限定引號。用來與數(shù)值列進(jìn)行比較的值不用引號。

  • 使用 BETWEEN 操作符,它檢索價格在 5 美元和 10美元之間的所有產(chǎn)品:
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;
  • 空值檢查
SELECT prod_name
FROM Products
WHERE prod_price IS NULL;
  • 組合where子句

  • AND
SELECT prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = 'DLL01' AND prod_price <= 4;
  • OR操作符
SELECT prod_name, prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = ‘BRS01’;
  • 任何時候使用具有 AND 和 OR 操作符的 WHERE 子句,都應(yīng)該使用圓括號明確地分組操作符。不要過分依賴默認(rèn)求值順序,即使它確實如你希望的那樣。使用圓括號沒有什么壞處,它能消除歧義。
SELECT prod_name, prod_price
FROM Products
WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01')
AND prod_price >= 10;
  • IN字符
    IN 操作符用來指定條件范圍,范圍中的每個條件都可以進(jìn)行匹配。 IN 取一組由逗號分隔、括在圓括號中的合法值。
SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ( 'DLL01', 'BRS01' )
ORDER BY prod_name;

此 SELECT 語句檢索由供應(yīng)商 DLL01 和 BRS01 制造的所有產(chǎn)品。 IN 操作符后跟由逗號分隔的合法值,這些值必須括在圓括號中。 IN 操作符完成了與 OR 相同的功能!

  • NOT字符
SELECT prod_name
FROM Products
WHERE NOT vend_id = 'DLL01'
ORDER BY prod_name;

這里的 NOT 否定跟在其后的條件,因此, DBMS 不是匹配 vend_id 為DLL01,而是匹配非 DLL01 之外的所有東西。

  • 通配符過濾

  • 找出所有以詞 Fish 起頭的產(chǎn)品:
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE 'Fish%';

如果使用的是 Microsoft Access,需要使用*而不是%。

  • 可以使用多個通配符
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '%bean bag%';

有一種情況下把通配符放在搜索模式中間是很有用的,就是根據(jù)郵件地 址 的 一 部 分 來 查 找 電 子 郵 件 , 例 如

WHERE email LIKE 'b%@forta.com'。

下劃線的用途與%一樣,但它只匹配單個字符,而不是多個字符。

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '__ inch teddy bear';

如果使用的是 Microsoft Access,需要使用?而不是_。
方括號( [])通配符用來指定一個字符集,它必須匹配指定位置(通配符的位置)的一個字符。
找出所有名字以 J 或 M 起頭的聯(lián)系人,可進(jìn)行如下查詢:

SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE '[JM]%'
ORDER BY cust_contact;

這一搜索模式使用了兩個不
同的通配符。 [JM]匹配方括號中任意一個字符,它也只能匹配單個字符。因此,任何多于一個字符的名字都不匹配。 [JM]之后的%通配符匹配第一個字符之后的任意數(shù)目的字符,返回所需結(jié)果。
注意:
不要過度使用通配符。如果其他操作符能達(dá)到相同的目的,應(yīng)該使用其他操作符。

4、創(chuàng)建計算字段

  • 拼接

拼接(concatenate):將值聯(lián)結(jié)到一起(將一個值附加到另一個值)構(gòu)成單個值。
我們來舉一個簡單例子,創(chuàng)建由兩列組成的標(biāo)題。
Vendors 表包含供應(yīng)商名和地址信息。假如要生成一個供應(yīng)商報表,需要在格式化的名稱(位置)中列出供應(yīng)商的位置。此報表需要一個值,而表中數(shù)據(jù)存儲在兩個列 vend_name 和 vend_country 中。此外,需要用括號將 vend_country 括起來,這些東西都沒有存儲在數(shù)據(jù)庫表中。
解決辦法是把兩個列拼接起來。在 SQL 中的 SELECT 語句中,可使用一個特殊的操作符來拼接兩個列。根據(jù)你所使用的 DBMS,此操作符可用加號( +)或兩個豎杠( ||)表示。

SELECT vend_name + ' (' + vend_country + ')'
FROM Vendors
ORDER BY vend_name;

有的時候可能帶來空格,所以需要去掉空格,可以寫成這個樣子:

SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
FROM Vendors
ORDER BY vend_name;

RTRIM()函數(shù)去掉值右邊的所有空格。通過使用 RTRIM(),各個列都進(jìn)行了整理。
順便給這些新搞的數(shù)據(jù)取一個新名字:

SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
AS vend_title
FROM Vendors
ORDER BY vend_name;
  • 算術(shù)計算

Orders 表包含收到的所有訂單, OrderItems 表包含每個訂單中的各項物品。下面的 SQL 語句檢索訂單號 20008 中的所有物品:

SELECT prod_id, quantity, item_price
FROM OrderItems
WHERE order_num = 20008;

item_price 列包含訂單中每項物品的單價。如下匯總物品的總價格

SELECT prod_id,
quantity,
item_price,
quantity*item_price AS expanded_price
FROM OrderItems
WHERE order_num = 20008;

5、使用函數(shù)進(jìn)行計算

與 SQL 語句不一樣, SQL 函數(shù)不是可移植的。這意味著為特定 SQL 實現(xiàn)編寫的代碼在其他實現(xiàn)中可能不正常。

  • 文本處理函數(shù)

1.png

SOUNDEX 是一個將任何文本串轉(zhuǎn)換為描述其語音表示的字母數(shù)字模式的算法。 SOUNDEX 考慮了類似的發(fā)音字符和音節(jié),使得能對字符串進(jìn)行發(fā)音比較而不是字母比較。雖然 SOUNDEX 不是 SQL 概念,但多數(shù)DBMS 都提供對 SOUNDEX的支持。

  • 時間處理函數(shù)

不同 DBMS 的日期?時間處理函數(shù)可能不同。關(guān)于具體 DBMS 支持的日期?時間處理函數(shù),請參閱相應(yīng)的文檔。

  • 數(shù)值處理函數(shù)

2.png

6、匯總數(shù)據(jù)

  • 聚集函數(shù)

常用的聚集函數(shù)


3.png

舉例:

SELECT AVG(prod_price) AS avg_price
FROM Products;
SELECT AVG(prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';

第二條前一條的不同之處在于,它包含了 WHERE 子句。此WHERE 子句僅過濾出 vend_id 為 DLL01 的產(chǎn)品,因此 avg_price 中返回的值只是該供應(yīng)商產(chǎn)品的平均值。
使用 COUNT(*)對表中行的數(shù)目進(jìn)行計數(shù),不管表列中包含的是空值( NULL)還是非空值。使用COUNT(column)對特定列中具有值的行進(jìn)行計數(shù), 忽略 NULL 值。
MAX()返回指定列中的最大值。 MAX()要求指定列名。

  • 聚集不同值

SELECT AVG(DISTINCT prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';

只包含不同的值,指定 DISTINCT 參數(shù)。它與前面的 SELECT 語句相同,但使用了 DISTINCT 參數(shù),因此平均值只考慮各個不同的價格。

  • 組合聚集函數(shù)

SELECT COUNT(*) AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_avg
FROM Products;

7、數(shù)據(jù)分組

  • 分組

SELECT vend_id, COUNT(*) AS num_prods
FROM Products
GROUP BY vend_id;

上面的 SELECT 語句指定了兩個列: vend_id 包含產(chǎn)品供應(yīng)商的 ID,num_prods 為計算字段(用 COUNT(*)函數(shù)建立)。 GROUP BY 子句指示DBMS 按 vend_id 排序并分組數(shù)據(jù)。這就會對每個 vend_id 而不是整個表計算 num_prods 一次。從輸出中可以看到,供應(yīng)商 BRS01 有 3 個產(chǎn)品,供應(yīng)商 DLL01 有 4 個產(chǎn)品,而供應(yīng)商 FNG01 有 2 個產(chǎn)品。
因為使用了 GROUP BY,就不必指定要計算和估值的每個組了。系統(tǒng)會自動完成。 GROUP BY 子句指示 DBMS 分組數(shù)據(jù),然后對每個組而不是整個結(jié)果集進(jìn)行聚集。

  • 過濾分組

SELECT cust_id, COUNT(*) AS orders
FROM Orders
GROUP BY cust_id
HAVING COUNT(*) >= 2;
SELECT vend_id, COUNT(*) AS num_prods
FROM Products
WHERE prod_price >= 4
GROUP BY vend_id
HAVING COUNT(*) >= 2;
  • select子句順序

1.png

8、子查詢

其實就是嵌套,完畢。

SELECT cust_name,
cust_state,
(SELECT COUNT(*)
FROM Orders
WHERE Orders.cust_id = Customers.cust_id) AS orders
FROM Customers
ORDER BY cust_name;

9、聯(lián)結(jié)

SQL 最強(qiáng)大的功能之一就是能在數(shù)據(jù)查詢的執(zhí)行中聯(lián)結(jié)( join)表。

  • 創(chuàng)建聯(lián)結(jié)關(guān)系

SELECT vend_name, prod_name, prod_price
FROM Vendors, Products
WHERE Vendors.vend_id = Products.vend_id;

目前為止使用的聯(lián)結(jié)稱為等值聯(lián)結(jié)( equijoin),它基于兩個表之間的相等測試。這種聯(lián)結(jié)也稱為內(nèi)聯(lián)結(jié)( inner join)。

  • 給表格改名

SELECT cust_name, cust_contact
FROM Customers AS C, Orders AS O, OrderItems AS OI
WHERE C.cust_id = O.cust_id
AND OI.order_num = O.order_num
AND prod_id = 'RGAN01';

可以看到, FROM 子句中的三個表全都有別名。 Customers AS C 使用 C作為 Customers 的別名,如此等等。

  • 不同類型聯(lián)結(jié)的區(qū)別

  • 自聯(lián)結(jié)

假如要給與 Jim Jones 同一公司的所有顧客發(fā)送一封信件。這個查詢要求首先找出 Jim Jones 工作的公司,然后找出在該公司工作的顧客:

SELECT cust_id, cust_name, cust_contact
FROM Customers
WHERE cust_name = (SELECT cust_name FROM Customers WHERE cust_contact = 'Jim Jones');

這就是自聯(lián)結(jié),聯(lián)結(jié)自己。自聯(lián)結(jié)通常作為外部語句,用來替代從相同表中檢索數(shù)據(jù)的使用子查詢語句。雖然最終的結(jié)果是相同的,但許多 DBMS 處理聯(lián)結(jié)遠(yuǎn)比處理子查詢快得多。

  • 外聯(lián)結(jié)

要檢索包括沒有訂單顧客在內(nèi)的所有顧客,可如下進(jìn)行:

SELECT Customers.cust_id, Orders.order_num
FROM Customers LEFT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id;

這條 SELECT 語句使用了關(guān)鍵字 OUTER JOIN來指定聯(lián)結(jié)類型(而不是在 WHERE 子句中指定)。但是,與內(nèi)聯(lián)結(jié)關(guān)聯(lián)兩個表中的行不同的是,外聯(lián)結(jié)還包括沒有關(guān)聯(lián)行的行。在使用 OUTERJOIN 語法時,必須使用 RIGHT 或 LEFT 關(guān)鍵字指定包括其所有行的表( RIGHT 指出的是 OUTER JOIN 右邊的表,而 LEFT 指出的是 OUTER JOIN左邊的表)。上面的例子使用 LEFT OUTER JOIN 從 FROM 子句左邊的表( Customers 表)中選擇所有行。為了從右邊的表中選擇所有行,需要使用 RIGHT OUTER JOIN,如下例所示:

SELECT Customers.cust_id, Orders.order_num
FROM Customers RIGHT OUTER JOIN Orders
ON Orders.cust_id = Customers.cust_id;
  • 使用帶集聚函數(shù)的聯(lián)結(jié)

要檢索所有顧客及每個顧客所下的訂單數(shù)

SELECT Customers.cust_id,
COUNT(Orders.order_num) AS num_ord
FROM Customers INNER JOIN Orders
ON Customers.cust_id = Orders.cust_id
GROUP BY Customers.cust_id;

也可以這樣:

SELECT Customers.cust_id,
COUNT(Orders.order_num) AS num_ord
FROM Customers LEFT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id
GROUP BY Customers.cust_id;

10、組合查詢

兩次查詢一起進(jìn)行

SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN ('IL','IN','MI')
UNION
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_name = 'Fun4All';

UNION 必須由兩條或兩條以上的 SELECT 語句組成,語句之間用關(guān)鍵字 UNION分隔(因此, 如果組合四條 SELECT語句,將要使用三個 UNION關(guān)鍵字)。
UNION 中的每個查詢必須包含相同的列、表達(dá)式或聚集函數(shù)(不過,各個列不需要以相同的次序列出)。
列數(shù)據(jù)類型必須兼容:類型不必完全相同,但必須是 DBMS 可以隱含轉(zhuǎn)換的類型(例如,不同的數(shù)值類型或不同的日期類型)。
UNION 從查詢結(jié)果集中自動去除了重復(fù)的行;換句話說,它的行為與一條 SELECT 語句中使用多個 WHERE 子句條件一樣。
這是 UNION 的默認(rèn)行為,如果愿意也可以改變它。事實上,如果想返回所有的匹配行,可使用 UNION ALL 而不是 UNION。

11、數(shù)據(jù)插入

  • insert

INSERT 用來將行插入(或添加)到數(shù)據(jù)庫表。插入有幾種方式:
? 插入完整的行;
? 插入行的一部分;
? 插入某些查詢的結(jié)果。

INSERT INTO Customers
VALUES('1000000006',
'Toy Land',
'123 Any Street',
'New York',
'NY',
'11111',
'USA',
NULL,
NULL);

這個例子將一個新顧客插入到 Customers 表中。存儲到表中每一列的數(shù)據(jù)在 VALUES 子句中給出,必須給每一列提供一個值。如果某列沒有值,如上面的 cust_contact 和 cust_email 列,則應(yīng)該使用 NULL 值(假定
表允許對該列指定空值)。各列必須以它們在表定義中出現(xiàn)的次序填充。
編寫 INSERT 語句的更安全(不過更煩瑣)的方法如下:

INSERT INTO Customers(cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_email)
VALUES('1000000006',
'Toy Land',
'123 Any Street',
'New York',
'NY',
'11111',
'USA',
NULL,
NULL);

這個例子與前一個 INSERT 語句的工作完全相同,但在表名后的括號里明確給出了列名。在插入行時, DBMS 將用 VALUES 列表中的相應(yīng)值填入列表中的對應(yīng)項。 VALUES 中的第一個值對應(yīng)于第一個指定列名,第二個值對應(yīng)于第二個列名,如此等等。
下面的 INSERT 語句填充所有列(與前面的一樣),但以一種不同的次序填充。因為給出了列名,所以插入結(jié)果仍然正確(因為指定了列名稱,甚至可以只插入部分列,你指定哪個列就插入哪個列):

INSERT INTO Customers(cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip)
VALUES('1000000006',
NULL,
NULL,
'Toy Land',
'123 Any Street',
'New York',
'NY',
'11111');

INSERT 還存在另一種形式,可以利用它將 SELECT 語句的結(jié)果插入表中,這就是所謂的INSERT SELECT。顧名思義,它是由一條 INSERT 語句和一條 SELECT語句組成的。假如想把另一表中的顧客列合并到 Customers 表中。不需要每次讀取一行再將它用 INSERT 插入,可以如下進(jìn)行:

INSERT INTO Customers(cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
SELECT cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
FROM CustNew;

這 個 例 子 使 用 INSERT SELECT 從 CustNew 中 將 所 有 數(shù) 據(jù) 導(dǎo) 入Customers。 SELECT 語句從 CustNew 檢索出要插入的值,而不是列出它們。 SELECT 中列出的每一列對應(yīng)于 Customers 表名后所跟的每一列。這條語句將插入多少行呢?這依賴于 CustNew 表有多少行。如果這個表為空,則沒有行被插入(也不產(chǎn)生錯誤,因為操作仍然是合法的)。如果這個表確實有數(shù)據(jù),則所有數(shù)據(jù)將被插入到 Customers。

  • 從一個表復(fù)制到另一個表

有一種數(shù)據(jù)插入不使用 INSERT 語句。要將一個表的內(nèi)容復(fù)制到一個全新的表(運(yùn)行中創(chuàng)建的表),可以使用 SELECT INTO 語句。
與 INSERT SELECT 將數(shù)據(jù)添加到一個已經(jīng)存在的表不同, SELECT INTO將數(shù)據(jù)復(fù)制到一個新表(有的 DBMS 可以覆蓋已經(jīng)存在的表,這依賴于所使用的具體 DBMS)。

SELECT *
INTO CustCopy
FROM Customers;

這條 SELECT 語句創(chuàng)建一個名為 CustCopy 的新表,并把 Customers 表的整個內(nèi)容復(fù)制到新表中。因為這里使用的是 SELECT ,所以將在CustCopy 表中創(chuàng)建(并填充)與 Customers 表的每一列相同的列。要想只復(fù)制部分的列,可以明確給出列名,而不是使用通配符。

12、數(shù)據(jù)更新與刪除

  • 更新數(shù)據(jù)

更新(修改)表中的數(shù)據(jù),可以使用 UPDATE 語句。
基本的 UPDATE 語句由三部分組成,分別是:
? 要更新的表;
? 列名和它們的新值;
? 確定要更新哪些行的過濾條件。
舉一個簡單例子??蛻?1000000005 現(xiàn)在有了電子郵件地址,因此他的記錄需要更新,語句如下:

UPDATE Customers
SET cust_email = 'kim@thetoystore.com'
WHERE cust_id = '1000000005';

更新多個列的語法稍有不同:

UPDATE Customers
SET cust_contact = 'Sam Roberts',
cust_email = 'sam@toyland.com'
WHERE cust_id = '1000000006';

在更新多個列時,只需要使用一條 SET 命令。
要刪除某個列的值,可設(shè)置它為 NULL(假如表定義允許 NULL 值)。如下進(jìn)行:

UPDATE Customers
SET cust_email = NULL
WHERE cust_id = '1000000005';
  • 刪除數(shù)據(jù)

從一個表中刪除(去掉)數(shù)據(jù),使用 DELETE 語句。有兩種使用 DELETE的方式:
? 從表中刪除特定的行;
? 從表中刪除所有行。
從 Customers 表中刪除一行:

DELETE FROM Customers
WHERE cust_id = '1000000006';

13、操縱表

  • 創(chuàng)建表

利用 CREATE TABLE 創(chuàng)建表,必須給出下列信息:
? 新表的名字,在關(guān)鍵字 CREATE TABLE 之后給出;
? 表列的名字和定義,用逗號分隔;
? 有的 DBMS 還要求指定表的位置。

CREATE TABLE Products
(
prod_id CHAR(10) NOT NULL,
vend_id CHAR(10) NOT NULL,
prod_name CHAR(254) NOT NULL,
prod_price DECIMAL(8,2) NOT NULL,
prod_desc VARCHAR(1000) NULL
);
CREATE TABLE Orders
(
order_num INTEGER NOT NULL,
order_date DATETIME NOT NULL,
cust_id CHAR(10) NOT NULL
);

這條語句創(chuàng)建本書中所用的 Orders 表。 Orders 包含三列:訂單號、訂單日期和顧客 ID。這三列都需要,因此每一列的定義都含有關(guān)鍵字 NOTNULL。這就會阻止插入沒有值的列。如果插入沒有值的列,將返回錯誤,且插入失敗。
下一個例子將創(chuàng)建混合了 NULL 和 NOT NULL 列的表:

CREATE TABLE Vendors
(
vend_id CHAR(10) NOT NULL,
vend_name CHAR(50) NOT NULL,
vend_address CHAR(50) ,
vend_city CHAR(50) ,
vend_state CHAR(5) ,
vend_zip CHAR(10) ,
vend_country CHAR(50)
);

SQL 允許指定默認(rèn)值,在插入行時如果不給出值, DBMS 將自動采用默認(rèn)值。默認(rèn)值在 CREATE TABLE 語句的列定義中用關(guān)鍵字 DEFAULT 指定。

CREATE TABLE OrderItems
(
order_num INTEGER NOT NULL,
order_item INTEGER NOT NULL,
prod_id CHAR(10) NOT NULL,
quantity INTEGER NOT NULL DEFAULT 1,
item_price DECIMAL(8,2) NOT NULL
);
  • 更新表

更新表定義,可以使用 ALTER TABLE 語句。

ALTER TABLE Vendors
ADD vend_phone CHAR(20);
  • 刪除表

DROP TABLE CustCopy;
  • 創(chuàng)建視圖

CREAT VIEW

CREATE VIEW ProductCustomers AS
SELECT cust_name, cust_contact, prod_id
FROM Customers, Orders, OrderItems
WHERE Customers.cust_id = Orders.cust_id
AND OrderItems.order_num = Orders.order_num;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容