Ⅰ sql語句的寫法
這是sql server 2000的方法,如果是2005以上可以用row_number(),oracle可以用rank,比這個就方便多了。
說明一下:class1就是一級分類的ID,class2就是二級分類ID,id就是產品表的產品id,這個也可以換成產品名稱。
select a.class1, b.*
from class a, (
select *, px=(select count(*)
from proct a
where a.class2=b.class2 and a.id < b.id)+1
from
proct b) b
where a.class2 = b.class2
and px <=3 and a.class1 = 輸入的一級分類ID
Ⅱ 求助一條sql語句的寫法
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('delete from zy_inbase_temp ');
ADOQuery1.SQL.Add(' insert into zy_inbase_temp values( select * from zy_inbase where indate between '''+sdate+''' and '''+edate+''' '));
ADOQuery1.ExecSQL;
你去試一下行不?如果不行,在兩個ADOQuery1.SQL.Add(....)之間加上這么一句:
ADOQuery1.SQL.Clear;
Ⅲ java裡面.xml中的sql語句是否也要用駝峰命名
XML的sql命名的話 就隨意了。通常都是 文件名 模塊名 功能名
比如 userloginxml_userinfo_selectpassword
Ⅳ 一個sql語句的寫法
SQL語句這樣寫:
Select
表1.姓名,表2.成績
As
成績
Form
表1
Left
Join
表2
On
表1.成績=表2.id
有人覺得這樣寫過於復雜化,但這是最標準的,當你知道是什麼意思後,其它復雜關系的資料庫的聯合查詢你就會了。
表2.成績
As
成績:這樣用是因為兩個表中都有成績,如果不這樣用可能查詢結果欄位可能會是「表2_成績」之類的名字,要看你的是什麼資料庫。
表1
Left
Join
表2:Left
Join是左鏈接,表示表2的內容以表1為標准鏈接進入查詢結果,當表2中有表1沒有對應關系的數據時會丟棄,如果不用這種方式,則在當表1隻有張三李四時查詢結果會有三條記錄,第三條沒有姓名,成績是差。
On
表1.成績=表2.id:這是鏈接的條件。
Ⅳ sql語句的寫法,希望有人指點下
既然取每個月的交易量,肯定是按照月份來分組了,取的月份就有很多方法了
1.如果時間欄位是字元串類型,就截取前六位,就算是數值型的,在截取時也會自動轉換為字元串
group by substr(col_name,1,6)
2.如果是數值型的,還可以直接除以100取整
group by trunc(col_name/100)
還可以將時間欄位轉換為date類型,使用to_date(),to_char()函數,具體如何使用可以網路一下了。oracle的函數。
Ⅵ 怎麼讓資料庫的欄位以駝峰命名的方式返回出來
怎麼讓資料庫的欄位以駝峰命名的方式返回出來
package test;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
//testing for data base column-key to java field
String[] dbKeys = {"id", "user_age", "user_addr_"};
Test t = new Test();
t.convertToJava(dbKeys);
System.out.println("-----------------------------------");
//testing for Java field to data base column-key
String javaFieldNames[] = {"id","userAge","userHomeAddr"};
t.getDBKey(javaFieldNames);
}
Ⅶ 求sql語句的寫法
SQL> select name,to_char(time,'yyyy-mm-dd') time,
2 max(decode(rid,1,to_char(time,'hh24:mi'),0)) as time1,
3 max(decode(rid,2,to_char(time,'hh24:mi'),0)) as time2,
4 max(decode(rid,3,to_char(time,'hh24:mi'),0)) as time3
5 from (
6 select row_number() over (partition by name,to_char(time,'yyyy-mm-dd') order by to_char(time,'yyyymmdd hh24:mi:ss') ) rid
7 ,a.*
8 from tmp_a a
9 ) a
10 group by name,to_char(time,'yyyy-mm-dd')
11 /
NAME TIME TIME1 TIME2 TIME3
-------------------- ---------- ----- ----- -----
A 2009-03-01 01:00 02:00 0
B 2009-03-02 00:00 0 0
C 2009-03-03 00:00 0 0
Ⅷ 如何書寫高效的SQL語句
優化SQL查詢:如何寫出高性能SQL語句
1、首先要搞明白什麼叫執行計劃?
執行計劃是資料庫根據SQL語句和相關表的統計信息作出的一個查詢方案,這個方案是由查詢優化器自動分析產生欀如一條SQL語句如果用來從一個10萬條記錄的表中查1條記錄,那查詢優化器會選擇「索引查找」方式,如果該表進行了歸檔,當前只剩下5000條記錄了,那查詢優化器就會改變方案,採用 「全表掃描」方式。
可見,執行計劃並不是固定的,它是「個性化的」。產生一個正確的「執行計劃」有兩點很重要:
(1) SQL語句是否清晰地告訴查詢優化器它想干什麼?
(2) 查詢優化器得到的資料庫統計信息是否是最新的、正確的?
2、統一SQL語句的寫法
對於以下兩句SQL語句,程序員認為是相同的,資料庫查詢優化器認為是不同的。
select * from al
select * From al
其實就是大小寫不同,查詢分析器就認為是兩句不同的SQL語句,必須進行兩次解析。生成2個執行計劃。
所以作為程序員,應該保證相同的查詢語句在任何地方都一致,多一個空格都不行!
3、不要把SQL語句寫得太復雜
我經常看到,從資料庫中捕捉到的一條SQL語句列印出來有2張A4紙這么長。一般來說這么復雜的語句通常都是有問題的。我拿著這2頁長的SQL語句去請教原作者,結果他說時間太長,他一時也看不懂了。可想而知,連原作者都有可能看糊塗的SQL語句,資料庫也一樣會看糊塗。
一般,將一個Select語句的結果作為子集,然後從該子集中再進行查詢,這種一層嵌套語句還是比較常見的,但是根據經驗,超過3層嵌套,查詢優化器就很容易給出錯誤的執行計劃。因為它被繞暈了。像這種類似人工智慧的東西,終究比人的分辨力要差些,如果人都看暈了,我可以保證資料庫也會暈的。
另外,執行計劃是可以被重用的,越簡單的SQL語句被重用的可能性越高。而復雜的SQL語句只要有一個字元發生變化就必須重新解析,然後再把這一大堆垃圾塞在內存里。可想而知,資料庫的效率會何等低下。
4、使用「臨時表」暫存中間結果
簡化SQL語句的重要方法就是採用臨時表暫存中間結果,但是,臨時表的好處遠遠不止這些,將臨時結果暫存在臨時表,後面的查詢就在tempdb中了,這可以避免程序中多次掃描主表,也大大減少了程序執行中「共享鎖」阻塞「更新鎖」,減少了阻塞,提高了並發性能。
5、 OLTP系統SQL語句必須採用綁定變數
select * from orderheader where changetime > 』2010-10-20 00:00:01′
select * from orderheader where changetime > 』2010-09-22 00:00:01′
以上兩句語句,查詢優化器認為是不同的SQL語句,需要解析兩次。
如果採用綁定變數
select * from orderheader where changetime > @chgtime
@chgtime變數可以傳入任何值,這樣大量的類似查詢可以重用該執行計劃了,這可以大大降低資料庫解析SQL語句的負擔。一次解析,多次重用,是提高資料庫效率的原則。
6、綁定變數窺測
Ⅸ sql 語句寫法
select u.unit,s..部門名,s.領用人,s.儀器名稱,s.型號,s.單價,s.存放地
from users u
inner join s on s.部門號= u.unit
where u.user_id='01'
Ⅹ sql中外鍵怎麼寫
1、創建測試表;
create table test_class(class_id varchar2(10), class_name varchar2(30));
create table test_student(student_id varchar2(10), student_name varchar2(30), class_id varchar2(10));