App下載

學(xué)習(xí) SQL 查詢 - 初學(xué)者數(shù)據(jù)庫(kù)查詢教程

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

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

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

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

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

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

輸出將如下所示:

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

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

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

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

要查看不同的列,請(qǐng)使用Describe Engineering;. 例如,工程表可以具有限定單個(gè)屬性樣柱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) |
+-----------+-------------------+--------------+

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

基本 SQL 查詢

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

CRUD 代表我們?cè)诓樵償?shù)據(jù)庫(kù)時(shí)執(zhí)行的 4 個(gè)主要操作:創(chuàng)建、讀取、更新和刪除。

我們CREATE在數(shù)據(jù)庫(kù)中提供信息,我們READ/從數(shù)據(jù)庫(kù)中檢索該信息,我們UPDATE/操縱它,如果我們?cè)敢猓覀兛梢訢ELETE。

下面我們將介紹一些基本的 SQL 查詢及其語(yǔ)法以開(kāi)始使用。

SQLCREATE DATABASE語(yǔ)句

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

CREATE DATABASE engineering;

SQLCREATE TABLE語(yǔ)句

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

此查詢?cè)跀?shù)據(jù)庫(kù)內(nèi)創(chuàng)建一個(gè)新表。

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

我們可以使用多種數(shù)據(jù)類型。一些最常見(jiàn)的有: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)建的表看起來(lái)類似于以下內(nèi)容:

EMPLOYEE_IDFIRST_NAMELAST_NAMEEMAILCOUNTRYSALARY
?

SQLALTER TABLE語(yǔ)句

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

ALTER TABLE table_name 
ADD column_name datatype;

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

ALTER TABLE engineering
ADD  birthday date;

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

EMPLOYEE_IDFIRST_NAMELAST_NAMEEMAILCOUNTRYSALARYBIRTHDAY
?

SQLINSERT語(yǔ)句

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

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

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

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

每當(dāng)我們插入字符串值時(shí),它們都用單引號(hào)括起來(lái),''.

例如:

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)在看起來(lái)像這樣:

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

SQLSELECT語(yǔ)句

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

SELECT  column1,column2
FROM    table_name;

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

SELECT first_name,last_name
FROM   engineering;

輸出:

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

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

該FROM部分確定表本身。

這是另一個(gè)例子SELECT:

SELECT * FROM table_name;

星號(hào)*將從我們指定的表中獲取所有信息。

SQLWHERE語(yǔ)句

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

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

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

上一個(gè)示例中的表:

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        |
+-----------+----------+----------+----------------+------------+

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

SQL AND,OR和BETWEEN運(yùn)營(yíng)商

這些運(yùn)算符允許您通過(guò)向WHERE語(yǔ)句添加更多條件來(lái)使查詢更加具體。

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

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

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

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

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

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

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

假設(shè)我們的表現(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

如果我們使用如下語(yǔ)句:

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

我們會(huì)得到這個(gè)輸出:

+------------+-----------+-----------+----------------+--------+--------+
|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|
+------------+-----------+-----------+----------------+--------+--------+

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

SQLORDER BY語(yǔ)句

ORDER BY按我們?cè)赟ELECT語(yǔ)句中提到的列排序。

它對(duì)結(jié)果進(jìn)行排序,并按字母或數(shù)字的降序或升序順序(默認(rèn)順序?yàn)樯颍╋@示它們。

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

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

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

SQLGROUP BY語(yǔ)句

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

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

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

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

SQLLIMIT語(yǔ)句

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

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

SELECT column1,column2
FROM table_name
LIMIT number;

SQLUPDATE語(yǔ)句

這就是我們?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)在看起來(lái)像這樣:

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 的員工的居住國(guó)家/地區(qū)列。

我們還可以使用來(lái)自另一個(gè)表的值更新表中的信息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語(yǔ)句

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

基本語(yǔ)法如下所示:

DELETE FROM table_name 
WHERE condition;

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

DELETE FROM engineering
WHERE employee_id = 2;

這將刪除工程團(tuán)隊(duì)中 id 為 2 的員工的記錄。

SQLDROP COLUMN語(yǔ)句

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

ALTER TABLE table_name 
DROP COLUMN column_name;

SQLDROP TABLE語(yǔ)句

要?jiǎng)h除整個(gè)表,我們可以這樣做:

DROP TABLE table_name;

結(jié)論

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

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

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


SQL

0 人點(diǎn)贊