App下載

學習 SQL 查詢 - 初學者數(shù)據(jù)庫查詢教程

酒神檸檬酒 2021-08-30 10:19:26 瀏覽數(shù) (4354)
反饋

SQL 代表結(jié)構(gòu)化查詢語言,是一種用于管理數(shù)據(jù)庫中數(shù)據(jù)的語言。SQL 由命令和聲明性語句組成,它們充當數(shù)據(jù)庫的指令,以便它可以執(zhí)行任務。您可以使用 SQL 命令在數(shù)據(jù)庫中創(chuàng)建表、添加和更改大量數(shù)據(jù)、搜索數(shù)據(jù)以快速查找特定內(nèi)容,或者一起刪除表。在本文中,我們將介紹一些最適合初學者的 SQL 命令,以及如何使用它們來有效地查詢數(shù)據(jù)庫——即請求特定信息。

數(shù)據(jù)庫的基本結(jié)構(gòu)

在開始之前,您應該了解數(shù)據(jù)庫的層次結(jié)構(gòu)。

SQL 數(shù)據(jù)庫是存儲在表中的相關信息的集合。每個表都有描述其中數(shù)據(jù)的列,以及包含實際數(shù)據(jù)的行。字段是一行中的單個數(shù)據(jù)。因此,要獲取所需的數(shù)據(jù),我們需要具體化。

例如,遠程公司可以有多個數(shù)據(jù)庫。要查看他們的數(shù)據(jù)庫的完整列表,我們可以鍵入SHOW DATABASES;并可以在Employees數(shù)據(jù)庫上進行分區(qū)。

輸出將如下所示:

+--------------------+
|     Databases      |
+--------------------+
| mysql              |
| information_schema |
| employees          |
| test               |
| sys                |
+--------------------+

一個數(shù)據(jù)庫可以有多個表。以上面的例子為例,要查看employees數(shù)據(jù)庫中的不同表,我們可以這樣做SHOW TABLES in employees;。表格可以是Engineering、Product、Marketing和 ,Sales適用于公司擁有的不同團隊。

+----------------------+
| Tables_in_employees  |
+----------------------+
| engineering          |
| product              |
| marketing            |
| sales                |
+----------------------+

然后,所有表都由描述數(shù)據(jù)的不同列組成。

要查看不同的列,請使用Describe Engineering;. 例如,工程表可以具有限定單個屬性樣柱employee_id,first_name,last_name,email,country,和salary。

這是輸出:

+-----------+-------------------+--------------+
| Name      |         Null      |      Type    |  
+-----------+-------------------+--------------+
|EMPLOYEE_ID| NOT NULL          | INT(6)       |  
|FIRST_NAME | NOT NULL          |VARCHAR2(20)  |
|LAST_NAME  | NOT NULL          |VARCHAR2(25)  | 
|EMAIL      | NOT NULL          |VARCHAR2(255) |
|COUNTRY    | NOT NULL          |VARCHAR2(30)  |
|SALARY     | NOT NULL          |DECIMAL(10,2) |
+-----------+-------------------+--------------+

表也??由行組成,行是表中的單個條目。例如,一個行會包括根據(jù)條目employee_id,first_name,last_name,email,salary,和country。這些行將定義并提供有關工程團隊中一個人的信息。

基本 SQL 查詢

您可以對數(shù)據(jù)執(zhí)行的所有操作都遵循 CRUD 首字母縮寫詞。

CRUD 代表我們在查詢數(shù)據(jù)庫時執(zhí)行的 4 個主要操作:創(chuàng)建、讀取、更新和刪除。

我們CREATE在數(shù)據(jù)庫中提供信息,我們READ/從數(shù)據(jù)庫中檢索該信息,我們UPDATE/操縱它,如果我們愿意,我們可以DELETE。

下面我們將介紹一些基本的 SQL 查詢及其語法以開始使用。

SQLCREATE DATABASE語句

要創(chuàng)建名為 的數(shù)據(jù)庫engineering,我們可以使用以下代碼:

CREATE DATABASE engineering;

SQLCREATE TABLE語句

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype
);

此查詢在數(shù)據(jù)庫內(nèi)創(chuàng)建一個新表。

它為表提供了一個名稱,并且我們希望我們的表具有的不同列也被傳入。

我們可以使用多種數(shù)據(jù)類型。一些最常見的有:INT,DECIMAL,DATETIME,VARCHAR,NVARCHAR,F(xiàn)LOAT,和BIT。

從上面的示例中,這可能類似于以下代碼:

CREATE TABLE engineering (
employee_id  int(6) NOT NULL,
first_name   varchar(20) NOT NULL,
last_name  varchar(25) NOT NULL,
email  varchar(255) NOT NULL,
country varchar(30),
salary  decimal(10,2) NOT NULL
);

我們根據(jù)這些數(shù)據(jù)創(chuàng)建的表看起來類似于以下內(nèi)容:

EMPLOYEE_IDFIRST_NAMELAST_NAMEEMAILCOUNTRYSALARY
?

SQLALTER TABLE語句

創(chuàng)建表后,我們可以通過向其添加另一列來修改它。

ALTER TABLE table_name 
ADD column_name datatype;

例如,如果我們想要,我們可以birthday通過鍵入以下內(nèi)容向現(xiàn)有表中添加一列:

ALTER TABLE engineering
ADD  birthday date;

現(xiàn)在我們的表格將如下所示:

EMPLOYEE_IDFIRST_NAMELAST_NAMEEMAILCOUNTRYSALARYBIRTHDAY
?

SQLINSERT語句

這就是我們向表中插入數(shù)據(jù)并創(chuàng)建新行的方式。這是CCRUD 中的一部分。

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

在INSERT INTO部分中,我們可以指定要填充信息的列。

里面VALUES是我們想要存儲的信息。這會在表中創(chuàng)建一個新記錄,這是一個新行。

每當我們插入字符串值時,它們都用單引號括起來,''.

例如:

INSERT INTO table_name(employee_id,first_name,last_name,email,country,salary) 
VALUES
(1,'Timmy','Jones','timmy@gmail.com','USA',2500.00);
(2,'Kelly','Smith','ksmith@gmail.com','UK',1300.00);

該表現(xiàn)在看起來像這樣:

EMPLOYEE_IDFIRST_NAMELAST_NAMEEMAILCOUNTRYSALARY
1TimmyJonestimmy@gmail.comUSA2500.00
2KellySmithksmith@gmail.comUK1300.00

SQLSELECT語句

該語句從數(shù)據(jù)庫中獲取數(shù)據(jù)。它是RCRUD的一部分。

SELECT  column1,column2
FROM    table_name;

從我們之前的示例中,這將如下所示:

SELECT first_name,last_name
FROM   engineering;

輸出:

+-----------+----------+
|FirstName  | LastName |
+-----------+----------+
| Timmy     | Jones    |
| Kelly     | Smith    |
+-----------+----------+

該SELECT語句指向我們想要從中獲取數(shù)據(jù)的特定列,我們希望在結(jié)果中顯示該列。

該FROM部分確定表本身。

這是另一個例子SELECT:

SELECT * FROM table_name;

星號*將從我們指定的表中獲取所有信息。

SQLWHERE語句

WHERE 使我們能夠更具體地了解我們的查詢。

如果我們想過濾我們的Engineering表以搜索具有特定薪水的員工,我們將使用WHERE.

SELECT employee_id,first_name,last_name,email,country
FROM engineering
WHERE salary > 1500

上一個示例中的表:

EMPLOYEE_IDFIRST_NAMELAST_NAMEEMAILCOUNTRYSALARY
1TimmyJonestimmy@gmail.comUSA2500.00
2KellySmithksmith@gmail.comUK1300.00

現(xiàn)在將有以下輸出:

+-----------+----------+----------+----------------+------------+
|employee_id|first_name|last_name |email           |country     |
+-----------+----------+----------+----------------+------------+
|          1| Timmy    |Jones     |timmy@gmail.com | USA        |
+-----------+----------+----------+----------------+------------+

該過濾器通過,并說明滿足條件的結(jié)果-也就是說,它表明只有其薪水的人的行more than 1500。

SQL AND,OR和BETWEEN運營商

這些運算符允許您通過向WHERE語句添加更多條件來使查詢更加具體。

該AND操作發(fā)生在兩個條件,他們都必須是true為了在結(jié)果中顯示的行。

SELECT column_name
FROM table_name
WHERE column1 =value1
    AND column2 = value2;

該OR運算符接受兩個條件,其中之一必須為真,才能在結(jié)果中顯示該行。

SELECT column_name
FROM table_name
WHERE column_name = value1
    OR column_name = value2;

該BETWEEN運營商過濾出數(shù)字或文字的特定范圍內(nèi)。

SELECT column1,column2
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

我們也可以將這些運算符相互結(jié)合使用。

假設我們的表現(xiàn)在是這樣的:

EMPLOYEE_IDFIRST_NAMELAST_NAMEEMAILCOUNTRYSALARY
1TimmyJonestimmy@gmail.comUSA2500.00
2KellySmithksmith@gmail.comUK1300.00
3JimWhitejwhite@gmail.comUK1200.76
4José LuisMartìnezjmart@gmail.comMexico1275.87
5EmiliaFischeremfis@gmail.comGermany2365.90
6DelphineLavignelavigned@gmail.comFrance2108.00
7LouisMeyerlmey@gmail.comGermany2145.70

如果我們使用如下語句:

SELECT * FROM engineering
WHERE  employee_id BETWEEN 3 AND 7
        AND 
        country = 'Germany';

我們會得到這個輸出:

+------------+-----------+-----------+----------------+--------+--------+
|employee_id | first_name| last_name | email          |country |salary  |
+------------+-----------+-----------+----------------+--------+--------+
|5           |Emilia     |Fischer    |emfis@gmail.com | Germany| 2365.90|
|7           |Louis      |Meyer      |lmey@gmail.com  | Germany| 2145.70|
+------------+-----------+-----------+----------------+--------+--------+

這將選擇所有具有德國國家/地區(qū)employee_id之間的comlumns 3 and 7 AND。

SQLORDER BY語句

ORDER BY按我們在SELECT語句中提到的列排序。

它對結(jié)果進行排序,并按字母或數(shù)字的降序或升序順序(默認順序為升序)顯示它們。

我們可以指定使用以下命令:ORDER BY column_name DESC | ASC。

SELECT employee_id, first_name, last_name,salary
FROM engineering
ORDER BY salary DESC;

在上面的示例中,我們對工程團隊中員工的工資進行排序,并按數(shù)字降序排列。

SQLGROUP BY語句

GROUP BY 讓我們將具有相同數(shù)據(jù)和相似點的行組合起來。

將重復的數(shù)據(jù)和在表格中多次出現(xiàn)的條目排列起來很有幫助。

SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name;

這里COUNT(*)單獨計算每一行并返回指定表中的行數(shù),同時還保留重復的行。

SQLLIMIT語句

LIMIT允許您指定應在結(jié)果中返回的最大行數(shù)。

這在處理可能導致查詢需要很長時間運行的大型數(shù)據(jù)集時很有用。通過限制您獲得的結(jié)果,它可以節(jié)省您的時間。

SELECT column1,column2
FROM table_name
LIMIT number;

SQLUPDATE語句

這就是我們?nèi)绾胃卤碇械囊恍小_@U是 CRUD的一部分。

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

該WHERE條件指定要編輯的記錄。

UPDATE engineering
SET    country = 'Spain'
WHERE   employee_id = 1

我們之前的表:

EMPLOYEE_IDFIRST_NAMELAST_NAMEEMAILCOUNTRYSALARY
1TimmyJonestimmy@gmail.comUSA2500.00
2KellySmithksmith@gmail.comUK1300.00
3JimWhitejwhite@gmail.comUK1200.76
4José LuisMartìnezjmart@gmail.comMexico1275.87
5EmiliaFischeremfis@gmail.comGermany2365.90
6DelphineLavignelavigned@gmail.comFrance2108.00
7LouisMeyerlmey@gmail.comGermany2145.70

現(xiàn)在看起來像這樣:

EMPLOYEE_IDFIRST_NAMELAST_NAMEEMAILCOUNTRYSALARY
1TimmyJonestimmy@gmail.comSpain2500.00
2KellySmithksmith@gmail.comUK1300.00
3JimWhitejwhite@gmail.comUK1200.76
4José LuisMartìnezjmart@gmail.comMexico1275.87
5EmiliaFischeremfis@gmail.comGermany2365.90
6DelphineLavignelavigned@gmail.comFrance2108.00
7LouisMeyerlmey@gmail.comGermany2145.70


這將更新 ID 為 1 的員工的居住國家/地區(qū)列。

我們還可以使用來自另一個表的值更新表中的信息JOIN。

UPDATE table_name
SET table_name1.column_name1 = table_name2.column_name1
    table_name1.column_name2 = table_name2.column2
FROM table_name1
JOIN table_name2 
    ON table_name1.column_name = table_2.column_name;

SQLDELETE語句

DELETE是DCRUD的一部分。這就是我們從表中刪除記錄的方式。

基本語法如下所示:

DELETE FROM table_name 
WHERE condition;

例如,在我們的engineering示例中,它可能如下所示:

DELETE FROM engineering
WHERE employee_id = 2;

這將刪除工程團隊中 id 為 2 的員工的記錄。

SQLDROP COLUMN語句

要從表中刪除特定列,我們將執(zhí)行以下操作:

ALTER TABLE table_name 
DROP COLUMN column_name;

SQLDROP TABLE語句

要刪除整個表,我們可以這樣做:

DROP TABLE table_name;

結(jié)論

在本文中,我們討論了您作為 SQL 初學者使用的一些基本查詢。

我們學習了如何創(chuàng)建表和行,如何收集和更新信息,最后是如何刪除數(shù)據(jù)。我們還將 SQL 查詢映射到它們相應的 CRUD 操作。

感謝您的閱讀和愉快的編碼!


SQL

0 人點贊