不太常用的mysql語句

2021-10-24 22:36:17 字數 1856 閱讀 7430

1. 通過字段之間的函式關係,計算某個欄位的值(即某個欄位的值,為其他欄位的加減乘除的值)

比方說,你想記錄員工的工作時間(worktime)和工資(salary),這兩者成正比,即worktime=salary*100(常數)。如何通過工作時間直接得到工資的值呢?

一行命令列就可以啦:

update tbname set salary=worktime*100 where id='11111';

這裡要注意欄位的屬性:是否都是int。如果是varchar的話需要轉成int。下面說說mysql的字串如何轉成int。

2. 字串轉int/擷取字串某幾位

字串轉int

參考:mysql字串的『123』轉換為數字的123 - emanlee -

三種方法如下,我覺得第三種最方便了

1. cast('123' as signed)

2. convert('123',signed)

3. '123'+0

擷取字串的某幾位

left(str,length):從左截

right(str,length):從右截

str: 被截的字串,length: 擷取長度

舉例:比如worktime是乙個四位的字串,0410表示4個小時10分鐘,0059表示59分鐘

update tbname set salary=(right(worktime,2)+(left(worktime,2)+0)*60)*100 where id='11111';

(right(worktime,2)+0) 表示擷取worktime從右邊開始的兩位,即分鐘數; 

(left(worktime,2)+0)*60 表示擷取worktime從左邊開始的兩位,即小時數,再乘60表示分鐘數。

3. 提取表中某個欄位的多行,把它變成乙個表的某列

我之前沒有考慮周全,導致原來的資料庫的字段很彆扭,我想要篩選出其中符合a條件的行,以及符合b條件的行(我事先知道兩者的行數是相同的),將兩者變成乙個新錶的兩列,然後這兩列差聽起來就好複雜啊。

這是我寫過的最長的mysql了,還是挺有用的。

在這個sql語句中我用到了join(同inner join),參考:mysql中join的連線方式

這個sql語句最基礎的結構是:

select a.欄位1, b.欄位2 from 

(select 欄位1 from tbname where 字段=「值」)as a join 

(select 欄位2 from tbname where 字段=「值」) as b

但是這樣返回的結果是所有行的排列組合,它不會把ab的每行對應起來。也就是說,假設這條語句中的a,b分別有10行,結果有100行而不是10行。所以以上的這個sql語句是不對的❌

要想把a,b每行對應起來,需要在join後面加on,加上乙個能把a, b一一對應的條件。比如自增的序號。

加上on條件的sql語句:

select a.欄位1, b.欄位2 from

(select(@i:=@i+1)i, 欄位1 from tbname, (select @i:=0) as i where 字段=「值」) as a join

(select(@j:=@j+1)j, 欄位2 from tbname, (select @j:=0) as j where 字段=「值」) as b

on a.i=b.j;

這條語句相當於先把a, b表分別加上序號,然後利用這個序號把a,b的每行一一對應起來。得到結果的行數=a的行數=b的行數

常用mysql語句 常用MySql語句

新建資料表 drop table if exists ga game way create table ga game way id int 11 unsigned not null auto increment comment id primary key id using btree,主鍵 un...

幾個不太常用的sql

要離職了,一些資料做個備份,以後可能用得到。由於in效率比較低,實測當in裡面資料超過1000條會報錯。exists用法 select from zhp register info t where exists select 1 from zhp register info s where s.co...

MySql常用的語句

1.複製表結構和資料,但是不複製索引和外來鍵 create table a select from b 2.複製表結構和索引和外來鍵,不複製資料 create table a like b 3.只複製資料 insert into a select from b 4.移動表到另乙個庫 rename t...