sql 查詢(基本,條件,投影,排序)

2022-08-10 07:12:11 字數 3759 閱讀 1219

要查詢資料庫表的資料,我們使用如下的sql語句:

select * from 《表名》

使用select * from students時,select是關鍵字,表示將要執行乙個查詢,*表示「所有列」,from表示將要從哪個表查詢,

該sql將查詢出students表的所有資料。注意:查詢結果也是乙個二維表,它包含列名和每一行的資料。

select語句其實並不要求一定要有from子句。

雖然select可以用作計算,但它並不是sql的強項。但是,不帶from子句的select語句有乙個有用的用途,就是用來判斷當前到資料庫的連線是否有效。許多檢測工具會執行一條select 1;來測試資料庫連線。

使用select查詢的基本語句select * from 《表名》可以查詢乙個表的所有行和所有列的資料。

select查詢的結果是乙個二維表。

使用select * from 《表名》可以查詢到一張表的所有記錄。但是,很多時候,我們並不希望獲得所有記錄,而是根據條件選擇性地獲取指定條件的記錄,例如,查詢分數在80分以上的學生記錄。在一張表有數百萬記錄的情況下,獲取所有記錄不僅費時,還費記憶體和網路頻寬。

select語句可以通過where條件來設定查詢條件,查詢結果是滿足查詢條件的記錄。

例如,要指定條件「分數在80分或以上的學生」,寫成where條件就是

select * from students where score >= 80。

其中,where關鍵字後面的score >= 80就是條件。score是列名,該列儲存了學生的成績,因此,score >= 80就篩選出了指定條件的記錄

因此,條件查詢的語法就是:

select * from 《表名》 where 《條件表示式》

條件表示式可以用《條件1> and 《條件2>表達滿足條件1並且滿足條件2。例如,符合條件「分數在80分或以上」,並且還符合條件「男生」,把這兩個條件寫出來:

條件1:根據score列的資料判斷:score >= 80;

條件2:根據gender列的資料判斷:gender = 'm',注意gender列儲存的是字串,需要用單引號括起來。

就可以寫出where條件:score >= 80 and gender = 'm':

第二種條件是《條件1> or 《條件2>,表示滿足條件1或者滿足條件2。例如,把上述and查詢的兩個條件改為or,查詢結果就是「分數在80分或以上」或者「男生」,滿足任意之一的條件即選出該記錄:

很顯然or條件要比and條件寬鬆,返回的符合條件的記錄也更多。

第三種條件是not 《條件》,表示「不符合該條件」的記錄。

例如,寫乙個「不是2班的學生」這個條件,可以先寫出「是2班的學生」:class_id = 2,再加上not:not class_id = 2:

上述not條件not class_id = 2其實等價於class_id <> 2,因此,not查詢不是很常用。

要組合三個或者更多的條件,就需要用小括號()表示如何進行條件運算。例如,編寫乙個複雜的條件:分數在80以下或者90以上,並且是男生:

select * from students where (score < 80 or score > 90) and gender = 'm';

如果不加括號,條件運算按照not、and、or的優先順序進行,即not優先順序最高,其次是and,最後是or。加上括號可以改變優先順序。

常用的條件表示式

條件表示式舉例1

表示式舉例2

說明使用=判斷相等

score = 80

name = 'abc'

字串需要用單引號括起來

使用》判斷大於

score > 80

name > 'abc'

字串比較根據ascii碼,中文字元比較根據資料庫設定

使用》=判斷大於或相等

score >= 80

name >= 'abc'

使用《判斷小於

score < 80

name <= 'abc'

使用<=判斷小於或相等

score <= 80

name <= 'abc'

使用<>判斷不相等

score <> 80

name <> 'abc'

使用like判斷相似

name like 'ab%'

name like '%bc%'

%表示任意字元,例如'ab%'將匹配'ab','abc','abcd'

使用select * from 《表名》 where 《條件》可以選出表中的若干條記錄。我們注意到返回的二維表結構和原表是相同的,即結果集的所有列與原表的所有列都一一對應。

如果我們只希望返回某些列的資料,而不是所有列的資料,我們可以用select 列1, 列2, 列3 from ...,讓結果集僅包含指定列。這種操作稱為投影查詢。

例如,從students表中返回id、score和name這三列:

select id, score, name from students;

這樣返回的結果集就只包含了我們指定的列,並且,結果集的列的順序和原表可以不一樣。

使用select 列1, 列2, 列3 from ...時,還可以給每一列起個別名,這樣,結果集的列名就可以與原表的列名不同。它的語法是select 列1 別名1, 列2 別名2, 列3 別名3 from ...。

例如,以下select語句將列名score重新命名為points,而id和name列名保持不變:

select id, score points, name from students;

投影查詢同樣可以接where條件,實現複雜的查詢:

select id, score points, name from students where gender = 'm';

我們使用select查詢時,細心的讀者可能注意到,查詢結果集通常是按照id排序的,也就是根據主鍵排序。這也是大部分資料庫的做法。如果我們要根據其他條件排序怎麼辦?可以加上order by子句。例如按照成績從低到高進行排序:

-- 按score從低到高

select id, name, gender, score from students order by score;

如果要反過來,按照成績從高到底排序,我們可以加上desc表示「倒序」:

-- 按score從高到低

select id, name, gender, score from students order by score desc;

如果score列有相同的資料,要進一步排序,可以繼續新增列名。例如,使用order by score desc, gender表示先按score列倒序,如果有相同分數的,再按gender列排序:

-- 按score, gender排序:

select id, name, gender, score from students order by score desc, gender;

預設的排序規則是asc:「公升序」,即從小到大。asc可以省略,即order by score asc和order by score效果一樣。

如果有where子句,那麼order by子句要放到where子句後面。例如,查詢一班的學生成績,並按照倒序排序:

-- 帶where條件的order by:

select id, name, gender, score

from students

where class_id = 1

order by score desc;

這樣,結果集僅包含符合where條件的記錄,並按照order by的設定排序。

基本條件語句

一 if.else if 條件 內容一 內容二 else 內容三 內容四 嚴格按照縮排,否則報錯,indentationerror expected an indented block 乙個等號是賦值 兩個等號是比較 表示不等於 a 1b 2 if aprint yes else print no ...

Python 基本條件語句

python 條件語句 python條件語句是通過一條或多條語句的執行結果 true或者false 來決定執行的 塊。可以通過下圖來簡單了解條件語句的執行過程 python程式語言指定任何非0和非空 null 值為true,0 或者 null為false。python 程式設計中 if 語句用於控制...

DOM動畫的基本條件

讓乙個元素從左至右進行運動 box div var box document.getelementbyid box var t null t setinterval function t setinterval function 元素的屬性值 目標點 if dom.attr target 起始點 乙...