sql語句用法
having子句與where有相似之處但也有區別,都是設定條件的語句。
在查詢過程中聚合語句(sum,min,max,avg,count)要比having子句優先執行.而where子句在查詢過程中執行優先級別優先于聚合語句(sum,min,max,avg,count)
簡單說來: where子句:
select sum(num) as rmb from order where id>10 //只有先查詢出id大于10的記錄才能進行聚合語句
having子句:
select reportsto as manager, count(*) as reports from employees group by reportsto having count(*) > 4
通過使用GROUP BY 子句,可以讓SUM 和 COUNT 這些函數對屬于一組的數據起作用。
當你指定 GROUP BY region 時, 屬于同一個region(地區)的一組數據將只能返回一行值. 也就是說,表中所有除region(地區)外的字段,只能通過 SUM, COUNT等聚合函數運算后返回一個值.
HAVING子句可以讓我們篩選成組后的各組數據. HAVING子句在聚合后對組記錄進行篩選
而WHERE子句在聚合前先篩選記錄.也就是說作用在GROUP BY 子句和HAVING子句前
看下面這幾個例子吧:
顯示每個地區的總人口數和總面積.
SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region
先以region把返回記錄分成多個組,這就是GROUP BY的字面含義。分完組后,然后用聚合函數對每組中的不同字段(一或多條記錄)作運算。
-- 顯示每個地區的總人口數和總面積.僅顯示那些面積超過1000000的地區。
SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region
HAVING SUM(area)>1000000
誰能給些 常見SQL語句用法
有關數據庫的一寫操作:創建表項就不說了.CREATE TABLE Student (Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20), Ssex CHAR(1), Sage INT, Sdept CHAR(15));插入記錄:insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172'); 刪除記錄:delete from Student where Sno = 'aaa';注:只需要刪除一個主鍵就可以了。
其他的記錄會相應的刪除掉。刪除表中一個字段:ALTER TABLE Student DROP column Ssex; 列名;修改表中的那一行數據:原來的記錄:Sno Sname Ssex Sdeptaaa mary f 172update Student set Sname='mary1', Ssex='m' where Sno='aaa';修改后:Sno Sname Ssex Sdeptaaa mary1 m 172desc倒敘排列:建立索引:create unique index Sno on Student(Sno);索引的一點好處:在查詢時候比較方便,在存在的所有記錄中查找一個Sno=1的時候!建立索引的表中就直接查找Sno項比較它是否=1找到后查相關的記錄就比較快。
沒有建立索引的需要把所有信息都查找一遍,再在其中找Sno字段,再比較其值=1的相關記錄。默認是ASC。
按表中哪個字段倒敘排序:select * from Student order by Sno desc;注意:要排序的字段必須是int型。設置成自增長的字段在插入數據的時候不需要插入該字段的值:select * from Student order by Sno desc;原來沒有設置成自增長插入數據命令:insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172'); 將int型的Sno字段設置成自增長后insert into Student (Sname,Ssex,Sdept) values('mary1','f','172'); insert into Student (Sname,Ssex,Sdept) values('mar1y','f','172'); insert into Student (Sname,Ssex,Sdept) values('ma1ry','f','172'); insert into Student (Sname,Ssex,Sdept) values('m1ary','f','172'); 在表中的排序如下:Sno Sname Ssex Sdept1 mary1 f 1722 mar1y f 1723 ma1ry f 1724 m1ary f 172/*********************************************************************************2006.7.20*********************************************************************************/查詢表中記錄總數:(無字段名字)select count() from usertable;或:(userid 為字段名字,結果是字段的總行數)select count(*) userid from Student;查詢字段的平均值:selecet avg(Sno) from Student;select avg(字段名)from 表名;給出查詢的字段的平均值取別名:select avg(字段名) as (別名) from (表名);查找指定的字段的其他字段select Sdept,Ssex,Snamefrom Student where Sno=3;(where Sname='mary1';或則where Sname like 'mary1';)在between語句查詢的都是在and之間的所有值而IN語句則必須是in括號里面的值.select Sno,Ssex,Sname from Student where Sdept between 180 and 190;select Sno,Ssex,Sname from Student where Sdept in (172,190);查詢Student表中的所有的名字中的Sno和Ssex值.select Sno,Ssex from Student where Sdept >= 170 and Sname like '%%';注:%%之間是把所有的String類型的值like和where條件查詢select last_name,salsry,department_id from employees where last_name like 'G%' and salary>3000;查詢Student表中的所有的名字中間有mary的所有名字對應的的Sno和Ssex值.select Sno,Ssex from Student where Sdept >= 170 and Sname like '%mary%';注:mary1,1mary,marydsajdh,等.注意:and or not 用的時候,and是用在連接并列條件的2個不同的字段or是用在選擇的2個不同的字段之間,not一般用于not in(180,190)之間.order by 和asc|desc的一點不同:order by是按先進先排,desc是先進后排,asc和desc是排列順序不一樣.disctinct條件查詢distinct 這個關鍵字來過濾掉多余的重復記錄只保留一條,select distinct name from table 表示將返回table表中name字段不重復的所有字段的集合。
注:distinct必須放在開頭,select id distinct name from table 是錯誤的!-------------------------------------------------------------------------------------表TEST_1:id name1 name2 9 aaa 118 bbb 223 ccc 334 ccc 44 5 bbb 556 ddd 667 eee 77-------------------------------------------------------------------------------------select distinct(name1) from test_1 結果:name1aaabbbcccdddeeedistinct這個關鍵字來過濾掉多余的重復記錄只保留一條,但往往只用它來返回不重復記錄的集合,而不是用它來返回不重記錄的所有值。其原因是distinct只能返回它的目標字段,而無法返回其它字段,即上表中只能返回name1字段的所有不重復記錄集合。
-------------------------------------------------------------------------------------如果現在想查詢出表test_1中所有name1不重復的id和name1字段的記錄呢?select distinct name, id from table 結果:name1 idaaa 9 bbb 5bbb 8ccc 3ccc 4ddd 6eee 7并不是我們所想要的結果select distinct name,id from table 作用了兩個字段,也就是必須得id與name都相同的才會被排除,即返回去除table表中id和name兩個字段同時相同情況下所有集合。-------------------------------------------------------------------------------------如果現在想查詢出表test_1中所有name1不重復的所有字段的記錄呢?。
如何用SQL語句查詢表名和行數
Rudy Limeback: 是的,這相當簡單。
select 'Customers' as tablename , count(*) as row_count from Customers union all select 'Orders' as tablename , count(*) as row_count from Orders union all select 'Products' as tablename , count(*) as row_count from Products union all 。 。
。 如果你需要在你的數據庫里的所有表上做這個查詢,考試#大提示可以從INFORMATION_SCHEMA。
TABLES視圖生成表清單: select table_name from information_schema。tables where table_schema = 'mydatabase' 然后你可以利用這個查詢的結果集和一個文本編輯器生成第一個查詢。
怎么用sql語句
拼接SQL語句。假設這幾個多選的選項控件名和控件內容相同。
dim k as string
k="select * from 某"
if 新增.Value=1 then
if instr(1,k,"where")>0 then
k=k & " and 新增=True"
else
k=k & " where 新增=True"
end if
end if
if 調增.Value=1 then
if instr(1,k,"where")>0 then
k=k & " and 調增=True"
else
k=k & " where 調增=True"
end if
end if
if 取消.Value=1 then
if instr(1,k,"where")>0 then
k=k & " and 取消=True"
else
k=k & " where 取消=True"
end if
end if
* k,conn,3,3 '打開記錄集執行SQL
下面省略
【sql語句輸入到哪里】如何用sql語句把excel中的數據導入指定數據庫
在查詢分析器里,直接寫 SQL語句: 如果是導入數據到現有表,則采用 INSERT INTO 表 SELECT * FROM OPENROWSET('*.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\*',sheet1$) 的形式 如果是導入數據并新增表,則采用 SELECT * INTO 表 FROM OPENROWSET('*.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\*',sheet1$) 的形式。
以上語句是將 EXCEL文件里 SHEET1工作表中所有的列都讀進來,如果只想導部分列,可以 INSERT INTO 表 (a1,a2,a3) SELECT a1,a2,a3 FROM OPENROWSET('*.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\*',sheet1$) 其實可以將 OPENROWSET('*.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\*',sheet1$)當成一個表,例如我就寫過這樣一個句子: INSERT INTO eval_channel_employee(channel,employee_id) SELECT CASE a.渠道 WHEN 'DIY' THEN 1 WHEN 'RDC' THEN 0 WHEN 'KCM' THEN 2 ELSE 3 END ,* FROM OPENROWSET('*.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\temp\*',sheet1$) AS a,pers_employee b WHERE a.員工編碼 =* 簡單的方法: SQL2005中直接可以實現導入功能 SQL2008不知道可不可以。 操作過程如下: 第一步:登錄到 SQL Server Management Studio, 第二步:在 “對象資源管理器 ”中右鍵單擊 “管理 ”,在彈出列表中單擊 “導入數據 ” 第三步:在 “導入向導 ”對話框中單擊 “下一步 ”,進入到 “選擇數據源 ”對話框,在 “數據源 ”列表中選擇 “Microsoft Excel ”,同時選擇相應的 Excel 文檔,完成后單擊 “下一步 ”(一定要勾選該對話框中的 “首行包含列名稱 ”,因此它是將 Excel文檔中的列標題為數據庫表中的列項標題) 第四步:指定目標數據庫服務,依次單擊 “下一步 ”。
。至到 “完成 ” 第五步:重新打到 SQL Server Management Studio,進入到導入的數據庫表,可以發現所導入的 Excel文檔數據。
你試下下面的吧: 打開SQL Server Configuration Manager,啟用SQL Server Agent(實例名)。 啟動模式更改為“自動” 以上是對這個問題的回答,希望對您有幫助。
SQL語句中怎么使用聯接列
對于有聯接的列,即使最后的聯接值為一個靜態值,優化器是不會使用索引的。
我們一起來看一個例子,假定有一個職工表(employee),對于一個職工的姓和名分成兩列存放(FIRST_NAME和LAST_NAME),現在要查詢一個叫比爾。克林頓(Bill Cliton)的職工。
下面是一個采用聯接查詢的SQL語句,select * from employsswherefirst_name||''||last_name ='Beill Cliton'; 上面這條語句完全可以查詢出是否有Bill Cliton這個員工,但是這里需要注意,系統優化器對基于last_name創建的索引沒有使用。 當采用下面這種SQL語句的編寫,Oracle系統就可以采用基于last_name創建的索引。
Select * from employeewherefirst_name ='Beill' and last_name ='Cliton'; 遇到下面這種情況又如何處理呢?如果一個變量(name)中存放著Bill Cliton這個員工的姓名,對于這種情況我們又如何避免全程遍歷,使用索引呢?可以使用一個函數,將變量name中的姓和名分開就可以了,但是有一點需要注意,這個函數是不能作用在索引列上。 下面是SQL查詢腳本:select * from employeewherefirst_name = SUBSTR('&&name',1,INSTR('&&name',' ')-1)andlast_name = SUBSTR('&&name',INSTR('&&name',' ')+1)。