mysql查詢總結

2021-10-23 04:49:30 字數 1949 閱讀 6573

sql語句並不是按照**的順序來執行的

下面是**的執行順序

先找錶 然後找錶的關聯條件 然後進行關聯 關聯之後進行where處理 然後在進行字段選取,然後進行分組,排序,最後進行顯示limit

子查詢:就是一組巢狀的select查詢

缺點:子查詢執行效率非常低下,疑問子查詢比普通的關聯查詢(join)更難讓mysql進行優化。

對時間的統計:

按年進行匯**計:

select year,count(1) from tb group by date_format(col,』%y』)

按月進行匯**計:

select year,count(1) from tb group by date_format(col,』%y-%m』)

按季度進行統計:

group by concat(date_format(col, 『%y』),floor((date_format(col, 『%m』)+2)/3));

按小時進行彙總:

group by date_format(col, '%y-%m-%d %h ');

查詢本年度的資料:

where year(from_unixtime(my_time)) = year(curdate())

查詢本季度的資料:

where quarter(from_unixtime(my_time)) = quarter(curdate());

查詢本月的資料:

where month(my_time1) = month(curdate()) and year(my_time2) = year(curdate())

查詢本週的資料:

where month(my_time1) = month(curdate()) and week(my_time2) = week(curdate())

查詢n天內的資料:

where to_days(now()) - to_days(時間段) <=n

mysql計算兩個時間之間的時長

datediff函式,返回值是相差的天數,不能定位到小時、分鐘和秒。

– 相差2天

select datediff(『2018-03-22 09:00:00』, 『2018-03-20 07:00:00』);

timestampdiff函式,有引數設定,可以精確到天(day)、小時(hour),分鐘(minute)和秒(second),使用起來比datediff函式更加靈活。對於比較的兩個時間,時間小的放在前面,時間大的放在後面。

–相差1天

select timestampdiff(day, 『2018-03-20 23:59:00』, 『2015-03-22 00:00:00』);

#問題應對

在mysql中對0的查詢需要注意的問題:

有個int欄位a,預設值為0,程式傳入的判斷條件是 a = 『abacd』。

傳入的是乙個字串,結果a=0的所有資料都返回了。

原因:mysql會在邏輯判斷時,如果是整型判斷,但是傳入的是字串,如果字串不是數字,則字串會被轉換為0。所以,

這段**實際判斷的條件是 a = 0。

實際出現的問題為:

and (%(usage_status)s=』』 or a.usage_status=%(usage_status)s)

當傳入usage_status=0,就會造成0=0的判斷,此時就會輸出所有資料

修正的辦法:讓兩邊的型別是相同的

usage_status = request[「usage_status」]

if usage_status == 0:

usage_status = str(usage_status)

mysql查詢總結

最近在複習mysql查詢操作,課本上有兩個例子感覺理解起來略顯晦澀,特記錄下來 查詢選修了全部課程的學生姓名 查詢至少選秀了學生201215122選修的全部課程的學生號碼 對於第乙個問題,它可以等價於不存在一門課程是該學生沒有選的。那麼首先,我們可以分析到開始一定是查詢學生的姓名 select sn...

MySQL 總結MySQL模糊查詢

create table student id char 36 primary key,name varchar 8 not null age int 3 default0,mobile char 11 address varchar 150 insert into student values 9...

MySql模糊查詢總結

在mysql中如何使用模糊查詢呢?在where子句中,可以對datetime char varchar欄位型別的列用like子句配合萬用字元選取那些 很像.的資料記錄,以下是可使用的萬用字元 零或者多個字元 單一任何字元 下劃線 特殊字元 在某一範圍內的字元,如 0 9 或者 aeth 不在某範圍內...