日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql查询注意_mysql中sql查询使用注意

發(fā)布時(shí)間:2025/3/15 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql查询注意_mysql中sql查询使用注意 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.注意DESC關(guān)鍵字僅適用于在它前面的列名(birth);不影響species列的排序順序。

SELECT name, species, birth FROM petORDER BY species, birth DESC; ---desc只影響birth.先按照species升序列排序,species值相同的再按照birth降序排序

2.日期計(jì)算

MySQL提供了幾個(gè)函數(shù),可以用來計(jì)算日期,例如,計(jì)算年齡或提取日期部分。

要想確定每個(gè)寵物有多大,可以計(jì)算當(dāng)前日期的年和出生日期之間的差。如果當(dāng)前日期的日歷年比出生日期早,則減去一年。以下查詢顯示了每個(gè)寵物的出生日期、當(dāng)前日期和年齡數(shù)值的年數(shù)字。

mysql> SELECT name, birth, CURDATE(),

-> (YEAR(CURDATE())-YEAR(birth))

-> - (RIGHT(CURDATE(),5)

-> AS age

-> FROM pet;

+----------+------------+------------+------+

| name???? | birth????? | CURDATE()? | age? |

+----------+------------+------------+------+

| Fluffy?? | 1993-02-04 | 2003-08-19 |?? 10 |

| Claws??? | 1994-03-17 | 2003-08-19 |??? 9 |

| Buffy??? | 1989-05-13 | 2003-08-19 |?? 14 |

| Fang???? | 1990-08-27 | 2003-08-19 |?? 12 |

| Bowser?? | 1989-08-31 | 2003-08-19 |?? 13 |

| Chirpy?? | 1998-09-11 | 2003-08-19 |??? 4 |

| Whistler | 1997-12-09 | 2003-08-19 |??? 5 |

| Slim???? | 1996-04-29 | 2003-08-19 |??? 7 |

| Puffball | 1999-03-30 | 2003-08-19 |??? 4 |

+----------+------------+------------+------+

此處,YEAR()提取日期的年部分,RIGHT()提取日期的MM-DD?(日歷年)部分的最右面5個(gè)字符。比較MM-DD值的表達(dá)式部分的值一般為1或0,如果CURDATE()的年比birth的年早,則年份應(yīng)減去1。整個(gè)表達(dá)式有些難懂,使用alias?(age)來使輸出的列標(biāo)記更有意義。

盡管查詢可行,如果以某個(gè)順序排列行,則能更容易地瀏覽結(jié)果。添加ORDER BY name子句按照名字對(duì)輸出進(jìn)行排序則能夠?qū)崿F(xiàn)。

mysql> SELECT name, birth, CURDATE(),

-> (YEAR(CURDATE())-YEAR(birth))

-> - (RIGHT(CURDATE(),5)

-> AS age

-> FROM pet ORDER BY name;

+----------+------------+------------+------+

| name???? | birth????? | CURDATE()? | age? |

+----------+------------+------------+------+

| Bowser?? | 1989-08-31 | 2003-08-19 |?? 13 |

| Buffy??? | 1989-05-13 | 2003-08-19 |?? 14 |

| Chirpy?? | 1998-09-11 | 2003-08-19 |??? 4 |

| Claws??? | 1994-03-17 | 2003-08-19 |??? 9 |

| Fang???? | 1990-08-27 | 2003-08-19 |?? 12 |

| Fluffy?? | 1993-02-04 | 2003-08-19 |?? 10 |

| Puffball | 1999-03-30 | 2003-08-19 |??? 4 |

| Slim? ???| 1996-04-29 | 2003-08-19 |??? 7 |

| Whistler | 1997-12-09 | 2003-08-19 |??? 5 |

+----------+------------+------------+------+

為了按age而非name排序輸出,只要再使用一個(gè)ORDER BY子句:

mysql> SELECT name, birth, CURDATE(),

-> (YEAR(CURDATE())-YEAR(birth))

-> - (RIGHT(CURDATE(),5)

-> AS age

-> FROM pet ORDER BY age;

+----------+------------+------------+------+

| name???? | birth????? | CURDATE()? | age? |

+----------+------------+------------+------+

| Chirpy?? | 1998-09-11 | 2003-08-19 |??? 4 |

| Puffball | 1999-03-30 | 2003-08-19 |??? 4 |

| Whistler | 1997-12-09 | 2003-08-19 |??? 5 |

| Slim???? | 1996-04-29 | 2003-08-19 |??? 7 |

| Claws??? | 1994-03-17 | 2003-08-19 |??? 9 |

| Fluffy?? | 1993-02-04 | 2003-08-19 |?? 10 |

| Fang???? | 1990-08-27 | 2003-08-19 |?? 12 |

| Bowser?? | 1989-08-31 | 2003-08-19 |?? 13 |

| Buffy??? | 1989-05-13 | 2003-08-19 |?? 14 |

+----------+------------+------------+------+

可以使用一個(gè)類似的查詢來確定已經(jīng)死亡動(dòng)物的死亡年齡。你通過檢查death值是否是NULL來確定是哪些動(dòng)物,然后,對(duì)于那些非NULL值的動(dòng)物,需要計(jì)算出death和birth值之間的差:

mysql> SELECT name, birth, death,

-> (YEAR(death)-YEAR(birth)) - (RIGHT(death,5)

-> AS age

-> FROM pet WHERE death IS NOT NULL ORDER BY age;

+--------+------------+------------+------+

| name?? | birth????? | death????? | age? |

+--------+------------+------------+------+

| Bowser | 1989-08-31 | 1995-07-29 |??? 5 |

+--------+------------+------------+------+

查詢使用death IS NOT NULL而非death != NULL,因?yàn)镹ULL是特殊的值,不能使用普通比較符來比較,以后會(huì)給出解釋。參見3.3.4.6節(jié),“NULL值操作”。

如果你想要知道哪個(gè)動(dòng)物下個(gè)月過生日,怎么辦?對(duì)于這類計(jì)算,年和天是無關(guān)的,你只需要提取birth列的月份部分。MySQL提供幾個(gè)日期部分的提取函數(shù),例如YEAR( )、MONTH( )和DAYOFMONTH( )。在這里MONTH()是適合的函數(shù)。為了看它怎樣工作,運(yùn)行一個(gè)簡單的查詢,顯示birth和MONTH(birth)的值:

mysql> SELECT name, birth, MONTH(birth) FROM pet;

+----------+------------+--------------+

| name???? | birth????? | MONTH(birth) |

+----------+------------+--------------+

| Fluffy?? | 1993-02-04 |??????????? 2 |

| Claws??? | 1994-03-17 |??????????? 3 |

| Buffy ???| 1989-05-13 |??????????? 5 |

| Fang???? | 1990-08-27 |??????????? 8 |

| Bowser?? | 1989-08-31 |??????????? 8 |

| Chirpy?? | 1998-09-11 |??????????? 9 |

| Whistler | 1997-12-09 |?????????? 12 |

| Slim???? | 1996-04-29 |??????????? 4 |

| Puffball | 1999-03-30 |??????????? 3 |

+----------+------------+--------------+

找出下個(gè)月生日的動(dòng)物也是容易的。假定當(dāng)前月是4月,那么月值是4,你可以找在5月出生的動(dòng)物?(5月),方法是:

mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5;

+-------+------------+

| name? | birth????? |

+-------+------------+

| Buffy | 1989-05-13 |

+-------+------------+

如果當(dāng)前月份是12月,就有點(diǎn)復(fù)雜了。你不能只把1加到月份數(shù)(12)上并尋找在13月出生的動(dòng)物,因?yàn)闆]有這樣的月份。相反,你應(yīng)尋找在1月出生的動(dòng)物(1月)?。

你甚至可以編寫查詢,不管當(dāng)前月份是什么它都能工作。采用這種方法不必在查詢中使用一個(gè)特定的月份,DATE_ADD( )允許在一個(gè)給定的日期上加上時(shí)間間隔。如果在NOW( )值上加上一個(gè)月,然后用MONTH()提取月份,結(jié)果產(chǎn)生生日所在月份:

mysql> SELECT name, birth FROM pet

-> WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));

完成該任務(wù)的另一個(gè)方法是加1以得出當(dāng)前月份的下一個(gè)月(在使用取模函數(shù)(MOD)后,如果月份當(dāng)前值是12,則“回滾”到值0):

mysql> SELECT name, birth FROM pet

-> WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1;

注意,MONTH返回在1和12之間的一個(gè)數(shù)字,且MOD(something,12)返回在0和11之間的一個(gè)數(shù)字,因此必須在MOD( )以后加1,否則我們將從11月( 11 )跳到1月(1)。

總結(jié)

以上是生活随笔為你收集整理的mysql查询注意_mysql中sql查询使用注意的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。