作為一名開(kāi)發(fā)者,你可能已經(jīng)使用過(guò)自然語(yǔ)言處理(NLP)及其可能徹底改變我們與技術(shù)互動(dòng)的方式。由OpenAI提供支持的文本到SQL工具是一種強(qiáng)大的方法,可以從自然語(yǔ)言文本中生成SQL語(yǔ)句。在本博客文章中,我們將探討七個(gè)創(chuàng)造性和不尋常的示例,展示如何使用ChatGPT生成SQL語(yǔ)句。
1、修改現(xiàn)有查詢語(yǔ)句
下面是一個(gè)示例,展示如何向Text-to-SQL提供一個(gè)現(xiàn)有的復(fù)雜SQL查詢,并要求它進(jìn)行修改:從現(xiàn)有的SQL查詢中移除特定的結(jié)果
提示詞:
Take the attached SQL query and remove all results that happened in the first quarter of 2021.
SELECT product_name, SUM(quantity) AS total_quantity_sold FROM sales WHERE date BETWEEN '2021-01-01' AND '2021-12-31' GROUP BY product_name ORDER BY total_quantity_sold DESC;”
對(duì)應(yīng)的翻譯(使用中文也能返回對(duì)應(yīng)的預(yù)期):
請(qǐng)修改以下SQL語(yǔ)句,刪除2021年第一季度的數(shù)據(jù),并返回其他季度的數(shù)據(jù)
SELECT product_name, SUM(quantity) AS total_quantity_sold FROM sales WHERE date BETWEEN '2021-01-01' AND '2021-12-31' GROUP BY product_name ORDER BY total_quantity_sold DESC;”
生成的SQL語(yǔ)句:
SELECT product_name, SUM(quantity) AS total_quantity_sold
FROM sales WHERE date BETWEEN '2021-04-01' AND '2021-12-31'
GROUP BY product_name
ORDER BY total_quantity_sold DESC;
在這個(gè)例子中,我們提供了一個(gè)現(xiàn)有的SQL查詢,該查詢檢索2021年全年度每種產(chǎn)品的總銷售量。Text-to-SQL修改了SQL語(yǔ)句,通過(guò)更改WHERE子句中的日期范圍來(lái)排除2021年第一季度的結(jié)果。
2.不僅是英文!也可以使用中文
您可以將任何語(yǔ)言的自然語(yǔ)言輸入生成 SQL 查詢。以下是使用中文的例子
提示詞:
展示每個(gè)分類中最近一個(gè)月的產(chǎn)品銷售數(shù)量,同時(shí)顯示分類的名稱和最后一次銷售的日期。
生成的SQL語(yǔ)句:
SELECT categories.category_name, COUNT(*) AS sales_count, MAX(orders.order_date) AS last_sale_date
FROM categories
JOIN products ON categories.category_id = products.category_id
JOIN order_details ON products.product_id = order_details.product_id
JOIN orders ON order_details.order_id = orders.order_id
WHERE orders.order_date BETWEEN DATEADD(MONTH, -1, GETDATE()) AND GETDATE()
GROUP BY categories.category_name
該示例演示了Text-to-SQL的靈活性,它能夠從任何語(yǔ)言的自然語(yǔ)言輸入生成SQL查詢。雖然文本提示是用漢語(yǔ)語(yǔ)編寫(xiě)的,但Text-to-SQL仍能理解并將查詢轉(zhuǎn)換為有效的SQL語(yǔ)句。該查詢檢索最近一個(gè)月內(nèi)每個(gè)產(chǎn)品分類別的銷售數(shù)量,以及分類別名稱和最后一次銷售日期。查詢連接categories、products、order_details和orders表,并使用聚合函數(shù)計(jì)算每個(gè)分類別的銷售數(shù)量和最后一次銷售日期。結(jié)果被過(guò)濾為僅包括最近一個(gè)月的訂單,并按分類別名稱分組。
3、在現(xiàn)有的SQL查詢中添加過(guò)濾
提示詞
Take the attached SQL query and add a filter to show only the top 10 customers by totalspending who live in California.
“SELECT customer_name, SUM(order_total) AS total_spent FROM orders GROUP BY customer_name ORDER BY total_spent DESC;”
對(duì)應(yīng)的翻譯(使用中文也能返回對(duì)應(yīng)的預(yù)期):
請(qǐng)對(duì)附加的SQL查詢添加篩選條件,僅顯示在加州居住且消費(fèi)總額排名前10位的客戶。
“SELECT customer_name, SUM(order_total) AS total_spent FROM orders GROUP BY customer_name ORDER BY total_spent DESC;”
生成的SQL語(yǔ)句:
SELECT customer_name, SUM(order_total)
AS total_spent FROM orders JOIN customers
ON orders.customer_id = customers.customer_id
WHERE state = 'California'
GROUP BY customer_name
ORDER BY total_spent DESC LIMIT 10;
本示例提供了一個(gè)現(xiàn)有的SQL查詢,用于檢索每個(gè)客戶的消費(fèi)總額。使用Text-to-SQL,我們可以修改SQL語(yǔ)句,添加一個(gè)篩選條件,僅顯示住在加利福尼亞州的前10位客戶。通過(guò)連接訂單和客戶表,并添加一個(gè)篩選條件,按州過(guò)濾,我們可以只檢索住在加利福尼亞州的客戶,然后通過(guò)消費(fèi)總額將結(jié)果限制為前10位。
4、提供數(shù)據(jù)庫(kù)結(jié)構(gòu),生成查詢
提示詞
“This is my Schema
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(50),
address VARCHAR(100),
city VARCHAR(50),
state VARCHAR(50),
zip_code VARCHAR(10)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
customer_id INT,
order_total DECIMAL(10,2),
FOREIGN KEY (customer_id) REFERENCES customers (customer_id)
);
CREATE TABLE order_details (
order_id INT,
product_name VARCHAR(50),
quantity INT,
price DECIMAL(10,2),
PRIMARY KEY (order_id, product_name),
FOREIGN KEY (order_id) REFERENCES orders (order_id)
);
Write a SQL statement that retrieves the customer name,
order date, product name, and quantity for all orders
where the order total is greater than $1,000 and
the product name contains the word "chair".
對(duì)應(yīng)的翻譯(使用中文也能返回對(duì)應(yīng)的預(yù)期):
“這是我的數(shù)據(jù)庫(kù)結(jié)構(gòu)
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(50),
address VARCHAR(100),
city VARCHAR(50),
state VARCHAR(50),
zip_code VARCHAR(10)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
customer_id INT,
order_total DECIMAL(10,2),
FOREIGN KEY (customer_id) REFERENCES customers (customer_id)
);
CREATE TABLE order_details (
order_id INT,
product_name VARCHAR(50),
quantity INT,
price DECIMAL(10,2),
PRIMARY KEY (order_id, product_name),
FOREIGN KEY (order_id) REFERENCES orders (order_id)
);
編寫(xiě)一條SQL語(yǔ)句,檢索所有訂單中客戶名稱、訂單日期、產(chǎn)品名稱和數(shù)量,
其中訂單總額大于$1,000且產(chǎn)品名稱包含單詞“chair”。
生成的SQL語(yǔ)句:
SELECT customers.customer_name, orders.order_date, order_details.product_name, order_details.quantity
FROM customers
JOIN orders ON customers.customer_id = orders.customer_id
JOIN order_details ON orders.order_id = order_details.order_id
WHERE orders.order_total > 1000 AND order_details.product_name LIKE '%chair%';
在這個(gè)例子中,我們提供了數(shù)據(jù)庫(kù)模式,并要求Text-to-SQL編寫(xiě)一條SQL語(yǔ)句,檢索所有訂單中客戶名稱、訂單日期、產(chǎn)品名稱和數(shù)量,其中訂單總額大于$1,000且產(chǎn)品名稱包含單詞“chair”。利用數(shù)據(jù)庫(kù)模式,Text-to-SQL可以確定客戶、訂單和訂單細(xì)節(jié)表之間的關(guān)系,并編寫(xiě)一條SQL語(yǔ)句,連接這些表并檢索所需的數(shù)據(jù)。
5. 按日期范圍過(guò)濾數(shù)據(jù)
提示詞
Show me all orders between January 1, 2022 and March 1, 2022.
對(duì)應(yīng)的翻譯(使用中文也能返回對(duì)應(yīng)的預(yù)期):
顯示 2022 年 1 月 1 日至 2022 年 3 月 1 日之間的所有訂單。
生成的SQL語(yǔ)句:
SELECT * FROM orders WHERE order_date BETWEEN '2022-01-01' AND '2022-03-01';
這個(gè)例子展示了如何使用Text-to-SQL生成一個(gè)按照特定日期范圍篩選數(shù)據(jù)的SQL語(yǔ)句。在這個(gè)例子中,SQL語(yǔ)句檢索2022年1月1日至2022年3月1日之間下的所有訂單。訂單表包含了每個(gè)訂單的信息,包括訂單日期、客戶名稱和產(chǎn)品信息。
6. 不僅僅是 SELECT - 還可以Update
提示詞
Update the price of all products in the electronics category by 10%.
對(duì)應(yīng)的翻譯(使用中文也能返回對(duì)應(yīng)的預(yù)期):
使用 SQL 更新電子產(chǎn)品分類是electronics的價(jià)格,并將價(jià)格提高10%。
生成的SQL語(yǔ)句:
UPDATE products SET price = price * 1.1 WHERE category = 'electronics';
這個(gè)例子展示了如何使用Text-to-SQL生成一個(gè)更新表中數(shù)據(jù)的SQL語(yǔ)句。在這個(gè)例子中,SQL語(yǔ)句更新電子產(chǎn)品分類中所有產(chǎn)品的價(jià)格,并提高價(jià)格的百分比為10%。通過(guò)在WHERE子句中指定分類,我們可以只針對(duì)需要更新的產(chǎn)品進(jìn)行更新。
成用于報(bào)表查詢使用的 SQL 查詢語(yǔ)句
提示詞
Generate a SQL query to retrieve data for a custom report that shows the total revenue for each product category in the past quarter,along with the number of orders and the average order value.The data should be sorted by total revenue in descending order.
對(duì)應(yīng)的翻譯(使用中文也能返回對(duì)應(yīng)的預(yù)期):
請(qǐng)生成一條SQL查詢語(yǔ)句,檢索過(guò)去一個(gè)季度每個(gè)產(chǎn)品類別的總收入、訂單數(shù)和平均訂單價(jià)值,數(shù)據(jù)應(yīng)按總收入降序排序,以用于自定義報(bào)告。
生成的SQL語(yǔ)句:
SELECT categories.category_name,
SUM(order_details.quantity * order_details.price) AS total_revenue,
COUNT(DISTINCT orders.order_id) AS num_orders,
AVG(orders.order_total) AS avg_order_value
FROM categories
JOIN products ON categories.category_id = products.category_id
JOIN order_details ON products.product_id = order_details.product_id
JOIN orders ON order_details.order_id = orders.order_id
WHERE orders.order_date BETWEEN DATEADD(QUARTER, -1, GETDATE()) AND GETDATE()
GROUP BY categories.category_name
ORDER BY total_revenue DESC;
在本示例中,我們請(qǐng)求Text-to-SQL生成一個(gè)SQL查詢,以檢索用于自定義報(bào)告的數(shù)據(jù),該報(bào)告顯示過(guò)去一個(gè)季度每個(gè)產(chǎn)品類別的總收入、訂單數(shù)和平均訂單價(jià)值。該查詢連接categories、products、order_details和orders表,并使用聚合函數(shù)計(jì)算每個(gè)類別的總收入、訂單數(shù)和平均訂單價(jià)值。結(jié)果被過(guò)濾為僅包括過(guò)去季度的訂單,并按總收入降序排序。這個(gè)查詢可以用于生成一個(gè)自定義報(bào)告,幫助企業(yè)跟蹤其按產(chǎn)品類別的銷售情況。
8. 將其用于代碼審查——了解復(fù)雜查詢的功能
提示詞
Explain in natural language what this SQL query does:
SELECT department_name, AVG(salary) AS avg_salary, COUNT(*) AS num_employees
FROM employees
JOIN departments ON employees.department_id = departments.department_id
GROUP BY department_name
HAVING AVG(salary) > 50000 AND COUNT(*) > 10
ORDER BY avg_salary DESC;
對(duì)應(yīng)的翻譯(使用中文也能返回對(duì)應(yīng)的預(yù)期):
請(qǐng)使用通俗易懂的語(yǔ)言解釋以下SQL查詢的作用:
SELECT department_name, AVG(salary) AS avg_salary, COUNT(*) AS num_employees
FROM employees
JOIN departments ON employees.department_id = departments.department_id
GROUP BY department_name
HAVING AVG(salary) > 50000 AND COUNT(*) > 10
ORDER BY avg_salary DESC;
執(zhí)行后的結(jié)果
這個(gè) SQL 查詢從 employees 和 departments 表中檢索出員工的薪資和部門(mén)名稱。它使用 JOIN 子句將兩個(gè)表連接起來(lái),以便將相應(yīng)的員工分配到其所在的部門(mén)。使用 GROUP BY 子句按部門(mén)分組,計(jì)算每個(gè)部門(mén)的平均薪資和員工數(shù)量。使用 HAVING 子句過(guò)濾掉平均薪資小于 50000 和員工數(shù)量少于 10 的部門(mén)。最后,使用 ORDER BY 子句將結(jié)果按平均薪資降序排序,以便更容易看到薪資最高的部門(mén)。這個(gè)查詢可以幫助管理層了解每個(gè)部門(mén)的平均薪資和規(guī)模,以便做出更好的管理決策。
結(jié)束
Text-to-SQL 是一種強(qiáng)大的工具,不僅可以將自然語(yǔ)言文本轉(zhuǎn)換成 SQL 語(yǔ)句,還可以修改現(xiàn)有的 SQL 查詢。
今天的分享就到這里,感謝你的閱讀,希望能夠幫助到你,文章創(chuàng)作不易,如果你喜歡我的分享,別忘了點(diǎn)贊轉(zhuǎn)發(fā),讓更多有需要的人看到,最后別忘記關(guān)注「前端達(dá)人」,你的支持將是我分享最大的動(dòng)力,后續(xù)我會(huì)持續(xù)輸出更多內(nèi)容,敬請(qǐng)期待。
原文:
https://www.eversql.com/7-unusual-uses-of-chat-gpt-for-text-to-sql-and-sql-queries/作者:Oded Valin文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-428791.html
非直接翻譯,有自行改編和添加部分,翻譯水平有限,難免有疏漏,歡迎指正文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-428791.html
到了這里,關(guān)于如何利用ChatGPT自動(dòng)生成SQL語(yǔ)句的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!