所有程式設計師都應該知道的13條最重要的sql命令

每個大的或動態的網站都以某種方式使用資料庫,當與結構化查詢語言(SQL)結合使用時,操縱資料的可能性真的是無窮無盡。...

數據庫驅動著現代網絡。每個大的或動態的網站都以某種方式使用數據庫,當與結構化查詢語言(SQL)結合使用時,操縱數據的可能性真的是無窮無盡。如果您已經知道SQL,請確保您檢查了所有網站開發人員都應該知道的編程技能。

important-sql-commands

今天我將向您展示作為程序員需要了解的一些核心SQL命令。

從數據庫表返回的數據有許多名稱。數據通常被稱為行、記錄或元組。在本文中,我將交替使用這些術語。

前言

今天所有的例子都基於四個虛構的表格。customer表包含客戶的姓名和年齡:

SQL Table Customers

高度表包含任何人的姓名和身高:

SQL Table Heights

staff表包含職員的姓名和年齡——與customer表完全相同:

SQL Staff Table

最後一個名為people的表包含人員的姓名和年齡,就像customer和staff表一樣:

People Table

1選擇

select語句是最簡單的,您必須理解它,因為它支持幾乎所有其他命令。以大寫形式編寫保留的SQL字被認為是一種最佳實踐,因為它使命令更易於閱讀和理解。

顧名思義,select用於從數據庫中選擇數據。以下是最簡單的用法:

SELECT * FROM table;

這有兩個部分。第一部分(SELECT*)指定要選擇的列。星號表示您希望選擇表中的所有列。第二部分(來自表)告訴您的數據庫引擎要從何處檢索這些數據。將“table”替換為數據庫表的名稱。

這個select被稱為“select star”。使用星號是一個很好的方法來找出表中的數據,但是我不建議您在任何生產代碼中使用它。使用selectstar時,由數據庫引擎向您提供所需的數據。您無法控制數據返回的順序,因此如果有人向表中添加新列,您可能會發現編程語言中的變量不再表示正確的數據。幸運的是,有一個解決辦法。

可以顯式說明要檢索哪些列,如下所示:

SELECT age, name FROM people;

此查詢從“people”表中檢索“age”和“name”列。如果您有大量數據,那麼這種顯式可能會有點乏味,但是這樣做會減少將來的問題,同時使您的SQL更容易被未來的程序員理解。

如果要選擇一個附加的數據段,但它沒有存儲在任何表中,可以這樣做:

SELECT age, '1234' FROM people;

SQL Select

將返回單引號內的任何字符串,而不是與列名匹配的字符串。

2哪裡

select命令非常適合檢索數據,但是如果您想進一步過濾結果呢?那隻找藍眼睛的人怎麼樣?一月份出生的機械師呢?這就是命令的作用。這允許您將條件應用於select,只需將其附加到語句末尾:

SELECT age, name FROM people WHERE age > 10;

SQL Where

此查詢現在僅限於10歲以上的人。可以使用AND運算符組合多個條件:

SELECT age, name FROM people WHERE age > 10 AND age < 20;

AND命令的工作方式與英語中的完全相同:它對語句應用另一個條件。在本例中,返回的數據將是年齡在10到20之間的任何記錄。由於沒有匹配結果,因此不返回任何數據。

另一個可以與此結合使用的命令是或。舉個例子:

SELECT age, name FROM people WHERE age > 10 OR name = 'Joe';

SQL Where

此查詢返回年齡大於10歲或名稱等於“Joe”的記錄。注意到只有一個等號嗎?大多數編程語言使用雙等於(=)來檢查等價性。對於絕大多數數據庫引擎來說,這是不需要的(但是對於每個環境來說,這是非常必要的,所以首先要仔細檢查)。

三。秩序

order命令用於對返回的結果進行排序。這是另一個容易使用的。只需將其附加到語句末尾:

SELECT name, age FROM people ORDER BY age DESC;

SQL Order

您需要指定列和順序,升序可以是ASC,降序可以是DESC。您可以按以下方式按多個列排序:

SELECT name, age FROM people ORDER BY name ASC, age DESC

SQL Order

ORDER BY與其他命令結合使用時可能最有用。並不是所有的查詢都會以邏輯或有序的方式返回數據——這個命令允許您更改這一點。

4參加

join命令用於連接存儲在一個或多個表中的相關數據。將第二個表連接到第一個表,並指定數據的連接方式。下面是一個基本示例:

SELECT age, name, height FROM people LEFT JOIN heights USING (name);

這裡發生了一些事情。必須從“LEFT JOIN”語法開始,該語法指定要使用LEFT類型的連接來連接表。接下來,指定要聯接的表(高度)。USING(name)語法聲明在兩個表中都可以找到“name”列,並且應該將其用作將表連接在一起的鍵。

如果您的列在每個表中有不同的名稱,請不要擔心。您可以使用“ON”而不是“USING”:

SELECT age, name, height FROM people LEFT JOIN heights ON (namea = nameb);

SQL Join

on語句顯式聲明要在哪些列上設置鍵。連接有多種類型,每種類型的詳細信息都需要很長時間,下面簡要介紹一下它們的用法:

  • (INNER)JOIN—返回兩個表中匹配的行。
  • LEFT(OUTER)JOIN——返回左表中的所有行,以及右表中的任何匹配項。如果沒有匹配項,則仍然返回左表記錄。
  • 右(外部)聯接——這與左聯接相反:返回右表中的所有行,以及左表中的所有匹配項。
  • FULL(OUTER)JOIN——返回任何一個表中匹配的記錄。

“內部”或“外部”語法是可選的。它可以使事情更容易理解,但你不必在絕大多數時間裡指定它。

5別名

現在您瞭解了基礎知識,讓我們看看alias命令。這用於臨時重命名一個表——更像是一個暱稱,因為這個新名稱只存在於正在運行的單個事務中。以下是使用方法:

SELECT A.age FROM people A;

你可以用任何你喜歡的有效名字,但我喜歡用字母表中的字母。在每個列名之前,都會加上別名的前綴。此別名在聲明後立即分配給表。這與這樣做完全相同:

SELECT people.age FROM people;

不必鍵入長表名,您可以鍵入一個簡單易記的字母——但這有什麼意義呢?如果您從多個表中進行選擇,很容易混淆哪些列屬於哪個表。如果兩個表恰好有同名的列,則在沒有顯式引用表名或別名的情況下,數據庫查詢甚至可能無法運行。下面是一個包含兩個表的示例:

SELECT staff.age, staff.name, customers.age, customers.name FROM staff, customers;

下面是相同的查詢,帶有別名:

SELECT A.age, A.name, B.age, B.name FROM staff A, customers B;

staff表的別名為“A”,customers表的別名為“B”。別名表確實有助於使代碼更易於理解,並減少了所需的鍵入量。

也可以使用“AS”命令重命名具有別名的列:

SELECT age AS person_age FROM people;

SQL Alias

運行此查詢時,該列現在將被稱為“person\u age”,而不是“age”。

6聯盟

團結是偉大的命令。它允許您將行相互附加。與附加匹配列的聯接不同,union可以附加不相關的行,前提是它們具有相同的列數和列名。以下是使用方法:

SELECT age, name FROM customersUNION SELECT age, name FROM staff;

SQL Union

您可以將union看作是組合兩個查詢結果的一種方法。聯合將只返回兩個查詢之間存在唯一行的結果。可以使用“UNION ALL”語法返回所有數據,而不考慮重複數據:

SELECT age, name FROM customersUNION ALLSELECT age, name FROM staff;

SQL Union

注意行的順序是如何變化的嗎?Union以最有效的方式運行,因此返回的數據可以按順序變化。

union的一個可能的用例是小計:您可以將sum total查詢合併到特定場景的單個總計查詢上。

7**

現在您已經瞭解了從數據庫檢索數據的所有方法,但是如何**數據呢?這就是insert命令的作用。舉個例子:

INSERT INTO people(name, age) VALUES('Joe', 102);

必須指定表名(people)和要使用的列(name和age)。然後使用“VALUES”語法提供要**的值。這些列的順序必須與先前指定的列的順序相同。

不能為insert指定where子句,需要確保遵循現有的任何必要的表約束。

8更新

在**一些數據之後,很自然地需要更改特定的行。更新命令語法如下:

UPDATE people SET name = 'Joe', age = 101;

必須指定要更改的表,然後使用“SET”語法指定列及其新值。這個例子很好,但它會更新每一條記錄——這並不總是可取的!

為了更具體,您可以使用“WHERE”子句,就像在執行select時一樣:

UPDATE people SET name = 'Joe', age = 101 WHERE name = 'James';

您甚至可以使用“AND”和“OR”指定多個條件:

UPDATE people SET name = 'Joe', age = 101 WHERE (name = 'James' AND age = 100) OR name = 'Ryan';

請注意括號是如何用於約束條件的。

9更新**

Upsert是一個聽起來很奇怪的詞,但卻是一個非常有用的命令。假設您的表上有一個約束,並且您指定只需要具有唯一名稱的記錄——例如,您不希望存儲具有相同名稱的兩行。如果您嘗試**多個'Joe'值,您的數據庫引擎將拋出一個錯誤並拒絕這樣做(非常正確)。UPSERT允許您更新已存在的記錄。這是非常有用的!如果沒有這個命令,您將不得不編寫大量的邏輯來首先檢查記錄是否存在,如果不存在則**,否則檢索正確的主鍵,然後更新。

不幸的是,upsert在不同的數據庫引擎中實現方式不同。PostgreSQL最近才獲得這種能力,而MySQL擁有這種能力已經有相當一段時間了。以下是MySQL語法供參考:

INSERT INTO people(name, age)VALUES('Joe', 101)ON DUPLICATE KEY UPDATE age = 101;

請注意,這實際上是一個update和insert語句,可以概括為“insert失敗時更新”

10刪除

Delete用於完全刪除記錄——如果被濫用,它可能會造成相當大的損害!基本語法非常容易使用:

DELETE FROM people;

像大多數其他命令一樣,這將刪除所有內容!您需要使用where將其限制為稍微合理的行數,最好是:

DELETE FROM people WHERE name = 'Joe';

如果您正在開發一個系統,實現“軟刪除”通常是明智的。您實際上從未運行delete命令,而是創建一個已刪除的列,然後在selects中檢查該列—如果您能夠快速輕鬆地檢索假定已刪除的記錄,則可以避免許多潛在的尷尬。然而,這並不能替代正確的備份。

11創建表

create table命令用於創建表。這是另一個非常簡單的問題:

CREATE TABLE people ( name TEXT, age, INTEGER, PRIMARY KEY(name));

請注意,列名和約束是如何放在方括號內的,並且這些列被賦予了適當的數據類型。主鍵是指定的,這在任何好的數據庫設計中都是必需的。

12更改表格

altertable命令用於修改表的結構。這是有點限制的,因為如果現有數據會導致衝突,數據庫將不允許您更改表——例如,將字符串更改為整數。在這些情況下,首先修復數據,然後修改表。舉個例子:

ALTER TABLE people ADD height integer;

本例向people表中添加了一個integer類型的名為“height”的列。你能改變的東西其實沒有限制。

13刪除表格

最後一個命令是drop table。可以將此視為刪除,但它不會刪除單個記錄,而是刪除表中的每個記錄!以下是使用方法:

DROP TABLE people;

這是一個相當激烈的命令,沒有理由它需要被編程到您的系統。在絕大多數情況下,只能手動執行,而且破壞性很大。

今天就這些。我希望你學會一些有用的技巧!您可以學習如何創建一個網站,然後使用新發現的技能使其動態化--只需確保您不會犯這些錯誤或使其容易受到SQL注入的影響。如果您不確定是否需要學習SQL,是否考慮過靜態站點生成器?

為什麼不在下面留下你最喜歡的SQL技巧和技巧呢?

圖片來源:HYS\U NP/Shutterstock

  • 發表於 2021-03-14 06:57
  • 閱讀 ( 44 )
  • 分類:程式設計

你可能感興趣的文章

sql語言(sql)和mysql資料庫(mysql)的區別

...開源的關係資料庫管理系統。定義、構造和操作資料庫的程式稱為資料庫管理系統。程式設計師可以在MySQL上使用SQL查詢進行資料儲存和檢索。它提供資料管理、資料遷移和資料保護。 圖01:MySQL MySQL是一個快速且易於使用的工具...

  • 發佈於 2020-10-17 12:07
  • 閲讀 ( 51 )

迄今為止程式設計師更有趣的10個原因

... 一旦構建,軟體往往遠遠超過其預期壽命。因此,幾乎所有的程式設計師都必須在某個時候處理相容性問題。無論是確保一個網站在InternetExplorer8中看起來不錯,還是在一個古老的版本上測試他們的Android應用程式,程式設計師...

  • 發佈於 2021-03-12 19:23
  • 閲讀 ( 48 )

使用sql連線字串的巧妙方法

...有更多的創造性了。今天我將向您展示有關SQL連線字串的所有需要了解的內容。 ...

  • 發佈於 2021-03-13 07:05
  • 閲讀 ( 48 )

使用onenote的每個程式設計師都需要此附加元件儘快

... 有一個地方來整理你所有關於新技術、最佳化、待辦事項列表等的筆記是很好的,但是如果你想記下一些程式碼呢?如果沒有正確的格式和語法高亮顯示,它可能會非常混亂。 ...

  • 發佈於 2021-03-13 16:25
  • 閲讀 ( 53 )

每個設計師都需要關注20個facebook頁面

...的設計師在尋找不間斷的靈感和資訊的首選。但是,篩選所有與設計相關的頁面和組,以找到絕對最好的可能是一個噩夢任務。 ...

  • 發佈於 2021-03-13 18:42
  • 閲讀 ( 51 )

為高效的程式設計師和程式設計師提供的5個最佳javascript編輯器

... JavaScript從一開始就是一種混亂的語言,因此您需要所有能得到的幫助。一個適當的、裝備精良的文字編輯器可以幫助您更快地編寫程式碼,編寫更乾淨的程式碼,儘早地捕獲bug,但最重要的是,它使程式設計變得有趣和愉...

  • 發佈於 2021-03-14 08:05
  • 閲讀 ( 53 )

7所有網站開發人員都應該知道的程式設計技巧

...複雜的佈局是困難的,但是flexbox建立了一個新的標準,所有的開發人員都開始接受這個標準。 ...

  • 發佈於 2021-03-15 10:16
  • 閲讀 ( 58 )

10種最常見的程式設計和編碼錯誤

...試著記住一些程式碼做了什麼。不管是什麼問題,避免犯所有這些錯誤,你應該發現你的程式碼在改進。 ...

  • 發佈於 2021-03-18 04:48
  • 閲讀 ( 52 )

前端與後端web開發:哪條路適合您?

...計。看看本文的演示,按鈕、選單、顏色、字型和導航。所有的東西都被程式設計來創造你看到的成品。 ...

  • 發佈於 2021-03-18 15:23
  • 閲讀 ( 45 )

每個程式設計師都應該知道的13個最好的瀏覽器ide

...有侷限性,但他們一直在進步。不管你打算做什麼,幾乎所有的用途都有一個IDE。 ...

  • 發佈於 2021-03-21 19:14
  • 閲讀 ( 59 )