排序問題,限定性查詢,模糊查詢

2021-09-01 09:00:04 字數 4385 閱讀 3322

第三章

1.排序問題

預設排序規則:按照物理儲存順序。

指定排序規則:order by關鍵字

位置:出現在select語句的最後邊。

語法:select ...

from ...

order by 字段 排序規則;

字段用來定義要根據哪個字段進行排序。

排序規則:

1)公升序排列 從小到大 asc

2)降序排列 從大到小 desc

例如:查詢所有員工的id、salary

要求按照工資的降序排列?

select id,salary

from s_emp

order by salary desc;

指定多個排序規則:

select ...

from ....

order by 欄位1 排序規則1,

欄位2 排序規則2,

欄位3 排序規則3.....;

例如:查詢所有員工的id、salary

按照工資的降序和id的公升序進行排列?

select id,salary

from s_emp

order by salary desc,id asc;

commission_pct 存在空值

空值的處理:

排序過程中,空值視為無限大。

在公升序排列中,空值應該排在最後。

在降序排列中,空值應該排在最前。

2.限定性查詢/條件查詢

在查詢時要根據指定條件

篩除掉一部分不需要的資料。

關鍵字:where

位置:from子句後面

語法:select ...

from ...

where 判斷條件;

1)等值判斷和不等值判斷

字段值等於/不等於某個特定的值。

例如:查詢id為1的員工id、last_name、salary?

select id,last_name,salary

from s_emp

where id = 1;

查詢id不為1的員工id、last_name、salary?

select id,last_name,salary

from s_emp

where id != 1;

不等於:

寫法一:!=

寫法二:^=

寫法三:<>

空值判斷:

例如:查詢員工表中所有不拿提成的員工

id、last_name、salary?

select id,last_name,salary

from s_emp

where commission_pct is null;

查詢員工表中所有拿提成的員工

id、last_name、salary?

select id,last_name,salary

from s_emp

where commission_pct is not null;

2)範圍判斷

大於                >

小於                <

大於等於        >=

小於等於        <=

練習:查詢所有工資高於1100元的員工id、

last_name、salary?

select id,last_name,salary

from s_emp

where salary > 1100;

查詢所有工資不低於1100元的員工id、

last_name、salary?

select id,last_name,salary

from s_emp

where salary >= 1100;

3)條件並列

a)邏輯與 and

使用and連線的所有條件必須同時滿足

才會被查詢出來。                

b)邏輯或 or

使用or連線的所有條件只需要滿足

其中乙個,就會被查詢出來。

練習:查詢id在10以內並且工資高於1100元的

員工id、last_name、salary?

select id,last_name,salary

from s_emp

where id <= 10 and salary > 1100;

查詢41和42號部門所有員工的

id、last_name、dept_id?

select id,last_name,dept_id

from s_emp

where dept_id = 41 or dept_id = 42;

and的優先順序大於or的優先順序。

查詢所有工資高於1100元並且任職在

41或42號部門的員工資訊?

select id,last_name,dept_id

from s_emp

where salary > 1100 

and (dept_id = 41 or dept_id = 42);

4)邏輯比較符

between 在給定的最小值和最大值範圍之間

語法:between 較小值 and 較大值

代表大於等於較小值和

小於等於較大值的結果會被查詢出來。

注意:一定要先寫較小值,再寫較大值。

select id,last_name

from s_emp

where salary>=1100 and salary<=1200;

等同於where salary between 1100 and 1200;

in 在給定的可選值中選乙個

語法:where 字段值 in(值1,值2,值3...);

練習:查詢id為1、3、5、7、9的員工資訊?

select id,salary,dept_id

from s_emp

where id = 1 or id = 3 or id =5

or id=7 or id=9;

select id,salary,dept_id

from s_emp

where id in(1,3,5,7,9);

查詢工資不在1100-1200範圍內的員工資訊?

select id,last_name,salary

from s_emp

where salary not between 1100 and 1200;

等同於:

where salary>1200 and salary <1100;

查詢41、42號部門以外的所有員工資訊?

select id,last_name,dept_id

from s_emp

where dept_id!=41 and dept_id!=42;

select id,last_name,dept_id

from s_emp

where dept_id not in(41,42);

3.模糊查詢/關鍵字查詢

語法:where 字段值 like 模糊值;

萬用字元:

1)% 百分號代表任意數量任意字元

可以沒有 可以有乙個 可以有多個

2)_ 下劃線代表乙個任意字元 --佔位符

有且只有乙個任意字元

例如:查詢所有last_name中包含'n'的員工資訊?

select id,last_name

from s_emp

where last_name like '%n%';

查詢所有last_name第二位是'e'的員工資訊?

select id,last_name

from s_emp

where last_name like '_e%';

例如:先向s_emp表中插入一條資料:

insert into s_emp(id,last_name)

values(999,'_briup');

commit;

查詢員工表中last_name以'_'下劃線開頭的使用者資訊?

select id,last_name

from s_emp

where last_name like '_%';

字元轉義:

1)在要轉義的字元前面加上乙個標識字元

標識字元可以是任意字元。

2)使用escape關鍵字宣告哪乙個字元是標識字元

select id,last_name

from s_emp

where last_name like 'a_%' escape 'a';

select id,last_name

from s_emp

where last_name like '/_%' escape '/';

排序查詢,模糊查詢

排序查詢 根據歌手名下的歌曲數量,對歌手進行降序排序 建立兩個模型 建立歌手模型 class songer models.model name models.charfield max length 50 models.charfield max length 20 img models.image...

SQL模糊查詢排序問題

drop table if exists t user create table t user id varchar 20 not null,name varchar 20 default null,password varchar 20 default null,primary key id en...

模糊查詢和排序查詢

1.表示任意一位字元 2.表示任意位數的任意字元 3.要實現模糊查詢需要使用到關鍵字 like 基本語法 3 select 1 from 資料 2 where 模糊查詢的字段 like 模糊查詢的關鍵字 注意 模糊查詢要在where字句中使用。查詢姓名是以a開頭的雇員資訊select from em...