SQL分別查詢表奇偶行(無行號,表結構不修改)

2021-08-02 23:18:58 字數 1919 閱讀 8698

有一張表,表內容如下所示:

注意點

①如上所示,表中沒有標識關於行號的字段,比如id神馬的

②不准修改表結構,比如使用alter語句

查了一些資料,發現具體的思路大概是,自行生成自增的行號列,然後根據模2的結果進行奇偶的篩選。順著這個思路下去,會發現oracle中的具體思路是直接使用其提供的row_number函式,而mysql中思路其實差不多,只不過是曲線救國,因為mysql並沒有提供row_number函式,所以需要你自己先去實現它,然後和oracle的操作方法就差不多了。

1.row_numberrow_number() over(partition by col1 order by col2) 表示根據col1分組,在分組內部根據col2排序,而此函式計算的值就表示每組內部排序後的順序編號(組內是連續且唯一的)。

2.mod

語法:mod(number,divisor)

引數

number 為被除數。

divisor 為除數。如果 divisor 為零,函式 mod 返回值 為原來number

說明

函式mod可以借用函式 int 來表示:

mod(n, d) = n - d*int(n/d)

oracle中通過查詢資料,發現也可以分為兩種,一種比較中規中矩點(長一點哈~

select * from (select row_number() over (order

by name asc) a,t.* from test t) where mod(a,2)=0;

算是嚴格按照row_number使用路子來滴:

先對列name按照公升序,再為每條記錄返回乙個序列號:

還有一種簡潔點,如下所示:

select * from (select rownum row_num, t.* from test t)

where

mod(row_num, 2)=1

mysql中其實是借助於變數的形式,進行近似row_number的實現,但是要注意的是如果想要重新查詢的話,變數要初始化哦~

set @row = 0;

select * from (select @row:=case

when @row

isnull

then

1else @row+1

endas rnr,name,age,class from test) t where t.rnr%2 = 0;

sql查詢奇數行、偶數行

mysql row number()排序函式的用法和注意

oracle row_number()

oracle mod 表示式

請問oracle如何查詢奇數行資料

sql 查詢多個表

直接黏貼sql cook book上的資料 1 select ename as ename and dname,deptno 2 from emp 3 where deptno 10 4 union all 5 select null 6 from t1 7 union all 8 select d...

SQL連表查詢

感覺好笨,老大寫過想了一會才想明白。因為資料都是在兩個表中的兩個表中,所以是四個表。應該先把乙個表中的兩個表篩選出來,然後再用union.sql union 操作符 union 操作符用於合併兩個或多個 select 語句的結果集。請注意,union 內部的 select 語句必須擁有相同數量的列。...

sql聯表查詢

比如 all list 這個表,是包含所有資料的,我們要把整個資料的某些字段查詢出來顯示在列表上 select from all list select 現在我要檢視一條資料,需要根據表 user list 的乙個字段內容,去檢視另外乙個表 info list 的內容 select dept nam...