SQL 代表結(jié)構(gòu)化查詢語言,是一種用于管理數(shù)據(jù)庫中數(shù)據(jù)的語言。SQL 由命令和聲明性語句組成,它們充當(dāng)數(shù)據(jù)庫的指令,以便它可以執(zhí)行任務(wù)。您可以使用 SQL 命令在數(shù)據(jù)庫中創(chuàng)建表、添加和更改大量數(shù)據(jù)、搜索數(shù)據(jù)以快速查找特定內(nèi)容,或者一起刪除表。在本文中,我們將介紹一些最適合初學(xué)者的 SQL 命令,以及如何使用它們來有效地查詢數(shù)據(jù)庫——即請(qǐng)求特定信息。
數(shù)據(jù)庫的基本結(jié)構(gòu)
在開始之前,您應(yīng)該了解數(shù)據(jù)庫的層次結(jié)構(gòu)。
SQL 數(shù)據(jù)庫是存儲(chǔ)在表中的相關(guān)信息的集合。每個(gè)表都有描述其中數(shù)據(jù)的列,以及包含實(shí)際數(shù)據(jù)的行。字段是一行中的單個(gè)數(shù)據(jù)。因此,要獲取所需的數(shù)據(jù),我們需要具體化。
例如,遠(yuǎn)程公司可以有多個(gè)數(shù)據(jù)庫。要查看他們的數(shù)據(jù)庫的完整列表,我們可以鍵入SHOW DATABASES;并可以在Employees數(shù)據(jù)庫上進(jìn)行分區(qū)。
輸出將如下所示:
+--------------------+
| Databases |
+--------------------+
| mysql |
| information_schema |
| employees |
| test |
| sys |
+--------------------+
一個(gè)數(shù)據(jù)庫可以有多個(gè)表。以上面的例子為例,要查看employees數(shù)據(jù)庫中的不同表,我們可以這樣做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ù)庫時(shí)執(zhí)行的 4 個(gè)主要操作:創(chuàng)建、讀取、更新和刪除。
我們CREATE在數(shù)據(jù)庫中提供信息,我們READ/從數(shù)據(jù)庫中檢索該信息,我們UPDATE/操縱它,如果我們?cè)敢?,我們可以DELETE。
下面我們將介紹一些基本的 SQL 查詢及其語法以開始使用。
SQLCREATE DATABASE語句
要?jiǎng)?chuàng)建名為 的數(shù)據(jù)庫engineering,我們可以使用以下代碼:
CREATE DATABASE engineering;
SQLCREATE TABLE語句
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype
);
此查詢?cè)跀?shù)據(jù)庫內(nèi)創(chuàng)建一個(gè)新表。
它為表提供了一個(gè)名稱,并且我們希望我們的表具有的不同列也被傳入。
我們可以使用多種數(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_ID | FIRST_NAME | LAST_NAME | COUNTRY | SALARY | |
---|---|---|---|---|---|
? |
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_ID | FIRST_NAME | LAST_NAME | COUNTRY | SALARY | BIRTHDAY | |
---|---|---|---|---|---|---|
? |
SQLINSERT語句
這就是我們向表中插入數(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)括起來,''.
例如:
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_ID | FIRST_NAME | LAST_NAME | COUNTRY | SALARY | |
---|---|---|---|---|---|
1 | Timmy | Jones | timmy@gmail.com | USA | 2500.00 |
2 | Kelly | Smith | ksmith@gmail.com | UK | 1300.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部分確定表本身。
這是另一個(gè)例子SELECT:
SELECT * FROM table_name;
星號(hào)*將從我們指定的表中獲取所有信息。
SQLWHERE語句
WHERE 使我們能夠更具體地了解我們的查詢。
如果我們想過濾我們的Engineering表以搜索具有特定薪水的員工,我們將使用WHERE.
SELECT employee_id,first_name,last_name,email,country
FROM engineering
WHERE salary > 1500
上一個(gè)示例中的表:
EMPLOYEE_ID | FIRST_NAME | LAST_NAME | COUNTRY | SALARY | |
---|---|---|---|---|---|
1 | Timmy | Jones | timmy@gmail.com | USA | 2500.00 |
2 | Kelly | Smith | ksmith@gmail.com | UK | 1300.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運(yùn)營商
這些運(yùn)算符允許您通過向WHERE語句添加更多條件來使查詢更加具體。
該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)營商過濾出數(shù)字或文字的特定范圍內(nèi)。
SELECT column1,column2
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
我們也可以將這些運(yùn)算符相互結(jié)合使用。
假設(shè)我們的表現(xiàn)在是這樣的:
EMPLOYEE_ID | FIRST_NAME | LAST_NAME | COUNTRY | SALARY | |
---|---|---|---|---|---|
1 | Timmy | Jones | timmy@gmail.com | USA | 2500.00 |
2 | Kelly | Smith | ksmith@gmail.com | UK | 1300.00 |
3 | Jim | White | jwhite@gmail.com | UK | 1200.76 |
4 | José Luis | Martìnez | jmart@gmail.com | Mexico | 1275.87 |
5 | Emilia | Fischer | emfis@gmail.com | Germany | 2365.90 |
6 | Delphine | Lavigne | lavigned@gmail.com | France | 2108.00 |
7 | Louis | Meyer | lmey@gmail.com | Germany | 2145.70 |
如果我們使用如下語句:
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|
+------------+-----------+-----------+----------------+--------+--------+
這將選擇所有具有德國國家/地區(qū)employee_id之間的comlumns 3 and 7 AND。
SQLORDER BY語句
ORDER BY按我們?cè)赟ELECT語句中提到的列排序。
它對(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語句
GROUP BY 讓我們將具有相同數(shù)據(jù)和相似點(diǎn)的行組合起來。
將重復(fù)的數(shù)據(jù)和在表格中多次出現(xiàn)的條目排列起來很有幫助。
SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name;
這里COUNT(*)單獨(dú)計(jì)算每一行并返回指定表中的行數(shù),同時(shí)還保留重復(fù)的行。
SQLLIMIT語句
LIMIT允許您指定應(yīng)在結(jié)果中返回的最大行數(shù)。
這在處理可能導(dǎo)致查詢需要很長時(shí)間運(yùn)行的大型數(shù)據(jù)集時(shí)很有用。通過限制您獲得的結(jié)果,它可以節(jié)省您的時(shí)間。
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_ID | FIRST_NAME | LAST_NAME | COUNTRY | SALARY | |
---|---|---|---|---|---|
1 | Timmy | Jones | timmy@gmail.com | USA | 2500.00 |
2 | Kelly | Smith | ksmith@gmail.com | UK | 1300.00 |
3 | Jim | White | jwhite@gmail.com | UK | 1200.76 |
4 | José Luis | Martìnez | jmart@gmail.com | Mexico | 1275.87 |
5 | Emilia | Fischer | emfis@gmail.com | Germany | 2365.90 |
6 | Delphine | Lavigne | lavigned@gmail.com | France | 2108.00 |
7 | Louis | Meyer | lmey@gmail.com | Germany | 2145.70 |
現(xiàn)在看起來像這樣:
EMPLOYEE_ID | FIRST_NAME | LAST_NAME | COUNTRY | SALARY | |
---|---|---|---|---|---|
1 | Timmy | Jones | timmy@gmail.com | Spain | 2500.00 |
2 | Kelly | Smith | ksmith@gmail.com | UK | 1300.00 |
3 | Jim | White | jwhite@gmail.com | UK | 1200.76 |
4 | José Luis | Martìnez | jmart@gmail.com | Mexico | 1275.87 |
5 | Emilia | Fischer | emfis@gmail.com | Germany | 2365.90 |
6 | Delphine | Lavigne | lavigned@gmail.com | France | 2108.00 |
7 | Louis | Meyer | lmey@gmail.com | Germany | 2145.70 |
這將更新 ID 為 1 的員工的居住國家/地區(qū)列。
我們還可以使用來自另一個(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語句
DELETE是DCRUD的一部分。這就是我們從表中刪除記錄的方式。
基本語法如下所示:
DELETE FROM table_name
WHERE condition;
例如,在我們的engineering示例中,它可能如下所示:
DELETE FROM engineering
WHERE employee_id = 2;
這將刪除工程團(tuán)隊(duì)中 id 為 2 的員工的記錄。
SQLDROP COLUMN語句
要從表中刪除特定列,我們將執(zhí)行以下操作:
ALTER TABLE table_name
DROP COLUMN column_name;
SQLDROP TABLE語句
要?jiǎng)h除整個(gè)表,我們可以這樣做:
DROP TABLE table_name;
結(jié)論
在本文中,我們討論了您作為 SQL 初學(xué)者使用的一些基本查詢。
我們學(xué)習(xí)了如何創(chuàng)建表和行,如何收集和更新信息,最后是如何刪除數(shù)據(jù)。我們還將 SQL 查詢映射到它們相應(yīng)的 CRUD 操作。
感謝您的閱讀和愉快的編碼!