(大資料工程師學習路徑)第四步 SQL基礎課程----select詳解

來源:互聯網
上載者:User

標籤:

準備

在正式開始本內容之前,需要先從github下載相關代碼,搭建好一個名為mysql_shiyan的資料庫(有三張表:department,employee,project),並向其中插入資料。

具體操作如下,首先輸入命令進入Desktop:

cd Desktop

然後再輸入命令,下載代碼:

git clone http://git.shiyanlou.com/shiyanlou/SQL4

下載完成後,輸入“cd ~”(注意有空格)退回到原先目錄,然後輸入命令開啟MySQL服務並使用root使用者登入:

sudo service mysql start        #開啟MySQL服務mysql -u root                   #使用root使用者登入

剛才從github下載的SQL4目錄下,有個兩檔案“MySQL-04-01.sql”和“MySQL-04-02.sql”,其中第一個檔案用於建立資料庫,第二個檔案向資料庫中插入資料。

SQL4目錄在案頭上,你可以用Gedit查看裡面兩個的檔案。

輸入命令運行第一個檔案,搭建資料庫:

source /home/shiyanlou/Desktop/SQL4/MySQL-04-01.sql

運行第二個檔案,向資料庫中插入資料:

source /home/shiyanlou/Desktop/SQL4/MySQL-04-02.sql
一、內容

在資料庫動作陳述式中,使用最頻繁,也被認為最重要的是SELECT查詢語句。之前的實驗中,我們已經在不少地方用到了 SELECT * FROM table_name; 這條語句用於查看一張表中的所有內容。 而SELECT與各種限制條件關鍵詞搭配使用,具有各種豐富的功能,這次實驗就進行詳細介紹。

1、基本的SELECT語句

SELECT語句的基本格式為:

SELECT 要查詢的列名 FROM 表名字 WHERE 限制條件;

如果要查詢表的所有內容,則把要查詢的列名用一個 * 號表示(實驗2、3中都已經使用過),代表要查詢表中所有的列。 而大多數情況,我們只需要查看某個表的指定的列,比如要查看employee表的name和age:

SELECT name,age FROM employee;

2、數學符號條件

SELECT語句常常會有WHERE限制條件,用於達到更加精確的查詢。WHERE限制條件可以有數學符號 (=,<,>,>=,<=) ,剛才我們查詢了name和age,現在稍作修改:

SELECT name,age FROM employee WHERE age>25;

篩選出age大於25的結果:

或者尋找一個名字為Mary的員工:

SELECT name,age,phone FROM employee WHERE name=‘Mary‘;

結果當然是:

3、“AND”與“OR”

從這兩個單詞就能夠理解它們的作用。WHERE後面可以有不止一條限制,而根據條件之間的邏輯關係,可以用OR(或)AND(且)串連:

SELECT name,age FROM employee WHERE age<25 OR age>30;     #篩選出age小於25,或age大於30

SELECT name,age FROM employee WHERE age>25 AND age<30;    #篩選出age大於25,且age小於30

而剛才的限制條件 age>25 AND age<30 ,如果需要包含25和30的話,可以替換為 age BETWEEN 25 AND 30 :

4、IN和NOT IN

關鍵詞INNOT IN的作用和它們的名字一樣明顯,用於篩選“在”“不在”某個範圍內的結果,比如說我們要查詢在dpt3dpt4的人:

SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN (‘dpt3‘,‘dpt4‘);

NOT IN的效果則是,如下面這條命令,查詢出了不在dpt1也不在dpt3的人:

SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt NOT IN (‘dpt1‘,‘dpt3‘);

5、萬用字元

關鍵字 LIKE 在SQL語句中和萬用字元一起使用,萬用字元代表未知字元。SQL中的萬用字元是 _ 和 % 。其中 _ 代表一個未指定字元,% 代表不定個未指定字元。

比如,要只記得電話號碼前四位元為1101,而後兩位忘記了,則可以用兩個 _ 萬用字元代替:

SELECT name,age,phone FROM employee WHERE phone LIKE ‘1101__‘;

這樣就尋找出了1101開頭的6位元電話號碼

另一種情況,比如只記名字的首字母,又不知道名字長度,則用 % 萬用字元代替不定個字元:

SELECT name,age,phone FROM employee WHERE name LIKE ‘J%‘;

這樣就尋找出了首字母為 J 的人:

6、對結果排序

為了使查詢結果看起來更順眼,我們可能需要對結果按某一列來排序,這就要用到 ORDER BY 排序關鍵詞。預設情況下,ORDER BY的結果是升序排列,而使用關鍵詞ASCDESC可指定升序降序排序。 比如,我們按salary降序排列,SQL語句為:

SELECT name,age,salary,phone FROM employee ORDER BY salary DESC;

7、SQL內建函數和計算

SQL允許對錶中的資料進行計算。對此,SQL有5個內建函數,這些函數都對SELECT的結果做操作:

函數名: COUNT SUM AVG MAX MIN
作用: 計數 求和 求平均值 最大值 最小值

其中COUNT函數可用於任何資料類型(因為它只是計數),而另4個函數都只能對數字類資料類型做計算。

具體舉例,比如計算出salary的最大、最小值,用這樣的一條語句:

SELECT MAX(salary) AS max_salary,MIN(salary) FROM employee;

有一個細節你或許注意到了,使用AS關鍵詞可以給值重新命名,比如最大值被命名為了max_salary:

8、子查詢

上面討論的SELECT語句都僅涉及一個表中的資料,然而有時必須處理多個表才能獲得所需的資訊。例如:想要知道名為"Tom"的員工所在部門做了幾個工程。員工資訊儲存在employee表中,但工程資訊儲存在project表中。 對於這樣的情況,我們可以用子查詢:

SELECT of_dpt,COUNT(proj_name) AS count_project FROM projectWHERE of_dpt IN(SELECT in_dpt FROM employee WHERE name=‘Tom‘);

子查詢還可以擴充到3層、4層或更多層。

9、串連查詢

在處理多個表時,子查詢只有在結果來自一個表時才有用。但如果需要顯示兩個表或多個表中的資料,這時就必須使用串連(join)操作。 串連的基本思想是把兩個或多個表當作一個新的表來操作,如下:

SELECT id,name,people_numFROM employee,departmentWHERE employee.in_dpt = department.dpt_nameORDER BY id;

這條語句查詢出的是,各員工所在部門的人數,其中員工的id和name來自employee表,people_num來自department表:

另一個串連語句格式是使用JOIN ON文法,剛才的語句等同於:

SELECT id,name,people_numFROM employee JOIN departmentON employee.in_dpt = department.dpt_nameORDER BY id;

結果也與剛才的語句相同。

二、練習

1、使用串連查詢的方式,查詢出各員工所在部門的人數與工程數,工程數命名為count_project。(串連3個表,並使用COUNT內建函數)

代碼如下:(SQL基礎不好,研究了好大會兒呢,可能有些繁瑣的地方,歡迎指正!):

 

結果:

(大資料工程師學習路徑)第四步 SQL基礎課程----select詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.