sql數據查詢
SELECT語句的基本形式為
SELECT [ALL|DISTINCT]<目標列表達式>[,<目標列表達式>···]
FROM <表名或視圖名>[,<表名或視圖名>···]
[WHERE <條件表達式>]
語句的功能是根據WHERE子句中的條件表達式,從基本表(或視圖)中找出滿足條件的元組,按SELECT子句中的目標列,選出元組中的目標列形成結果表。
SQL語句對資料庫的操作十分靈活方便,原因在於SELECT語句中的成分豐富多樣,有許多可選形式,尤其是目標列和目標表達式,下面用例子來詳細說明,例子涉及的是"學生-課程"資料庫,其關系模式集如下:
學生信息表Student(SNO,SNAME,SSEX,SBIRTHDAY CLASS)
教師信息表Teacher(TNO,TNAME,TSEX,TBIRTHDAY,DEPART)
課程信息表Course(CNO,CNAME,TNO)
成績表Grade(SNO,CNO,DEGREE)
例題:查詢Student表所有學生信息。
SELECT * FROM Student;/*選擇操作*/
例題:查詢Student表中所有學生的學號和姓名。
SELECT SNO,SNAME FROM Student;/*投影操作*/
例題:查詢Grade表中成績在60到80之間的所有記錄。
SELECT * FROM Grade WHERE degree BETWEEN 60 AND 80;/*選擇操作*/
例題:查詢Grade表中成績為85、86、88的記錄。
SELECT * FROM Grade WHERE degree IN(85,86,88);/*選擇操作*/
例題:查詢所有學生的SNAME,CNAME和DEGREE。
SELECT Student.SNAME,Course.CNAME,Grade.DEGREE
FROM Student,Course,Grade
WHERE Student.SNO = Grade.SNO,Grade.CNO = Course.CNO;/*連接操作*/
例題:查詢"張旭"教師任課的學生成績。
SELECT CNO,SNO,DEGREE FROM Grade
WHERE CNO=(SELECT Course.CNO FROM Course,Teacher
WHERE Course.TNO=Teacher.TNO and Teacher.TNAME="張旭")
此查詢操作為嵌套查詢。子查詢在上一級查詢處理之前求解,即嵌套查詢是從里向外處理的,這樣,外層查詢可以利用內層查詢的結果,在此例中首先執行子查詢:
SELECT Course.CNO FROM Course,Teacher
WHERE Course.TNO=Teacher.TNO and Teacher.TNAME="張旭"
獲得張旭老師講授課程的課程號(801003),然後執行外查詢:
SELECT CNO,SNO,DEGREE FROM Grade
WHERE CNO="801003"
獲得"張旭"教師任課的學生成績。
❷ SQL數據查詢
--createtable
createtable#price_table(IDint,AddTimedatetime,Pricedecimal);
--insertdata
insertinto#price_tablevalues(1,'2015-03-0100:00:00',256);
insertinto#price_tablevalues(2,'2015-02-0800:00:00',333);
insertinto#price_tablevalues(3,'2014-04-0200:00:00',444);
insertinto#price_tablevalues(4,'2015-03-1811:12:06',777);
--selecttable
select*from#price_table;
DECLARE@StartDateDATETIME='2015-03-01'
DECLARE@EndDateDATETIME,
@LastMonStartDateDATETIME,
@LastYearStartDateDATETIME,
@LastYearEndDateDATETIME
SELECT@EndDate=CONVERT(VARCHAR(10),DATEADD(mm,1,@StartDate)),
@LastMonStartDate=CONVERT(VARCHAR(10),DATEADD(mm,-1,@StartDate)),
@LastYearStartDate=CONVERT(VARCHAR(10),DATEADD(yy,-1,@StartDate)),
@LastYearEndDate=CONVERT(VARCHAR(10),DATEADD(mm,1,@LastYearStartDate))
SELECTISNULL(a.currentmonth,0)AScurrentmonth,ISNULL(b.lastmonth,0)ASlastmonth,ISNULL(c.lastyear,0)ASlastyear
FROM(selectSUM(price)AScurrentmonthFROM#price_tablea WHEREa.AddTime>[email protected]<@EndDate)a,
(selectSUM(price)ASlastmonthFROM#price_tablea WHEREa.AddTime>[email protected]<@StartDate)b,
(selectSUM(price)ASlastyearFROM#price_tablea WHEREa.AddTime>[email protected]<@LastYearEndDate)c
看下直接建個存儲過程來解決羅,參數就@StartDate 如果你方便的話傳當月1號,不然你堅持要 2015-03 這種,手工處理一下也可以
❸ sql資料庫中檢索數據
這個可能復雜點,我有一個方案,
首先做一個自定義方法,然後進行查詢
-----自定義方法------
CREATE FUNCTION SplitStr (@splitString varchar(8000), @separate varchar(10))
RETURNS @returnTable table(col_Value varchar(20))
AS
BEGIN
declare @thisSplitStr varchar(20)
declare @thisSepIndex int
declare @lastSepIndex int
set @lastSepIndex = 0
if Right(@splitString ,len(@separate)) <> @separate set @splitString = @splitString + @separate
set @thisSepIndex = CharIndex(@separate,@splitString ,@lastSepIndex)
while @lastSepIndex <= @thisSepIndex
begin
set @thisSplitStr = SubString(@splitString ,@lastSepIndex,@thisSepIndex-@lastSepIndex)
set @lastSepIndex = @thisSepIndex + 1
set @thisSepIndex = CharIndex(@separate,@splitString ,@lastSepIndex)
insert into @returnTable values(@thisSplitStr)
end
return
END
---------測試語句--------
select * from
(
select 'a,b,c,a,d' as b
union all
select 'c,f,d,e,t'
union
select 'd,d,f,g,h'
) as a
where
(select COUNT(1)
from
dbo.SplitStr(b,',')
group by col_Value
having COUNT(1)>1)>0
--------查詢結果--------
a,b,c,a,d
d,d,f,g,h
❹ sql資料庫查詢語句
表結構如何?
❺ sql數據查詢
第一種寫法,比較好理解:
declare
@numint
set@num=0
selectcase
whenrowindexin(1,2)
then@num=@num+score
else@num=@num/2+scoreend
from(
selectrow_number()over(orderbyid)rowindex,*from表名
)t
select@num--得到結果
第二種寫法,把算式拆分,可以發現規律,第一條記錄後面(包含自己)還有4條記錄,除以2的3次方,這條記錄除外,其他的記錄都是後面有記錄(包含自己),就除以2的幾次方,假設以id的升序為計算數列,則計算如下:
declare
@numint
select@num=count(*)from表名
selectsum(
casewhenrowindex=@num
thenscore/power(2,rowindex-1)
elsescore/power(2,rowindex)end
)
from(
selectrow_number()over(orderbyiddesc)rowindex,*from表名--降序查詢
)t
❻ SQL數據查詢功能
多表查詢才會使用join進行表的連接,on關鍵字用來描述連接條件;
如果只是單表的查詢,自然就不需要連接多表了
特殊情況下會進行表的自身連接,這時可以將一個表看作兩個虛擬表
❼ SQL資料庫查詢
有很多解決辦法
直接用a.表001 join b.表002
或者,把a庫中的表001導入到b庫中,然後在一個庫中來查詢。
❽ 如何根據sql資料庫表中數據進行查詢
sql server 查詢一個表的所有信息:查詢語法為:select * from 表名 語法中的」*「代表所有。
實際操作舉例:某數據中有一表叫」user_user「,表中存儲了一些用戶信息;
1、查詢」user_user「表中所有人員信息且所有欄位,sql語句:select * from user_user
2、查詢」user_use「表中所有人員信息且部分欄位。sql語句:select user_show_id,user_name,pinyin,password from user_user
3、條件查詢」user_user「表,以user_name為查詢條件查詢所有信息。sql語句:select * from user_user where user_name='李丹'
4、模糊查詢」user_user「表,以user_name為模糊查詢條件查詢所有信息。sql語句:select * from user_user where user_name like '%張%'
❾ SQL 資料庫查詢
不需要這么麻煩的。運行下面的語句即可:
declare @str varchar(100)
set @str='xxxxx' --這地方放你所查詢的關鍵字;
declare @s varchar(8000)
declare tb cursor local for
select s='if exists(select 1 from ['+b.name+'] where ['+a.name+'] like ''%'+@str+'%'')
print ''所在的表及欄位: ['+b.name+'].['+a.name+']'''
from syscolumns a join sysobjects b on a.id=b.id
where b.xtype='U' and a.status>=0
and a.xusertype in(175,239,231,167)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb