同時出現了where,group by,having,order by的時候,執行順序和編寫順序:mysql
完成一個複雜的查詢語句,需求以下:
按由高到低的順序顯示我的平均分在70分以上的學生姓名和平均分,爲了儘量地提升平均分,在計算平均分前不包括分數在60分如下的成績,而且也不計算賤人(jr)的成績。 分析:
1.要求顯示學生姓名和平均分
所以肯定第1步select s_name,avg(score) from student
2.計算平均分前不包括分數在60分如下的成績,而且也不計算賤人(jr)的成績
所以肯定第2步 where score>=60 and s_name!=’jr’ sql
3.顯示我的平均分
相同名字的學生(同一個學生)考了多門科目數據庫
所以按姓名分組 肯定第3步 group by s_name oracle
4.顯示我的平均分在70分以上
所以肯定第4步 having avg(s_score)>=70 app
5.按由高到低的順序
所以肯定第5步 order by avg(s_score) descoop
總結:1>sql語句寫的時候having子句必須跟在group by子句以後,在order by子句以前。spa
2>利用group by子句根據某字段進行分組,該字段必定要出如今select語句裏。code
3>每查詢一條主線都會到子查詢全部的結果去比對。blog
select * from mytable where to_char(install_date,'YYYYMMDD') > '20050101'; select * from mytable where install_date > to_date('2005-01-01','yyyy-mm-dd');
app_key like CONCAT('%',CONCAT(#{appKey},'%'))
oracle數據庫使用plsqldev遷移數據:ip
數據量較大的時候,直接運行sql腳本會卡死,需打開命令窗口,把sql腳本放在某個目錄下(例如e盤中room.sql),
須要注意的是若是insert中的的內容有特殊字符的話(例如&等),
首先執行命令 set define off,而後才能insert成功,不然會報錯,
接着執行@@e:\room.sql
declare --類型定義 cursor c_job is select room_id,multiple from multiple_log where id in (select max(id) from multiple_log group by room_id); --定義一個遊標變量c_row c_job%ROWTYPE ,該類型爲遊標c_job中的一行數據類型 c_row c_job%rowtype; begin for c_row in c_job loop dbms_output.put_line(c_row.room_id||'-'||c_row.multiple); update user_count u set u.multiple = c_row.multiple where u.room_id = c_row.room_id ; end loop; end;
mysql timestamp datetime 默認設置
在建立新記錄的時候把這個字段設置爲當前時間,但之後修改時,再也不刷新它
TIMESTAMP DEFAULT CURRENT_TIMESTAMP
在建立新記錄的時候把這個字段設置爲0(能夠隨意設置),之後修改時刷新它
TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
在建立新記錄和修改現有記錄的時候都對這個數據列刷新
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
在建立新記錄的時候把這個字段設置爲給定值,之後修改時刷新它
TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss’ ON UPDATE CURRENT_TIMESTAMP