sql相關
1. sql相關查詢
首先了解SQL Select語句的功能和語法:
SELECT 語句用於從表中選取數據。
結果被存儲在一個結果表中(稱為結果集)。
語法:
SELECT 列名稱 FROM 表名稱 或者 SELECT * FROM 表名稱
上面是一個SQL的嵌套查詢,就像抽絲剝繭一樣,我們首先從最裡面的查詢入手。
1、SELECT *FROM SC WHERE Sno=Student.Sno AND Cno=Course.Cno --查詢選修表中選課的所有學生信息
2、SELECT * FROM Course --查詢課程表中課程的所有信息
3、SELECT Sname FROM Student --查詢學生表中學生姓名
在上面三個查詢中,第3個查詢是主查詢,也是這個嵌套查詢的關鍵,查詢滿足條件的學生姓名。
結合2,3兩個查詢和他門中間的連接條件,我們不難發現:
4、SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno=Course.Cno)); --查詢不在選修表中的課程信息即沒有學生選修的課程信息
再結合第4,1查詢條件和連接條件,得出最終所要查詢的結果:
5、SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno=Course.Cno)); --查詢所有沒有未選擇課程的學生。
當然,聽起來比較繞,其實就是查詢選擇了所有課程的學員名稱。希望你能理解!
2. SQL語句相關的非常難的問題,請各位幫幫忙
這個問題不太好解決,大致可以循兩個方向去解決:
1)需要資料庫支持。看看資料庫有沒有儲存運行SQL查詢記錄的機制,或者自建機制將資料庫每次運行查詢過的源表名存儲起來(操作查詢比較容易,可以使用觸發器,選擇查詢不好辦)。如果有這類記錄的話,那麼查詢這些記錄就可以得到查詢過哪些源表?;
2)用編程的方法,對已經運行的SQL語句進行分析,根據SQL語言的編寫規律,編寫相應的演算法,從中檢索出這些字元串中查詢過的源表名,具體的演算法代碼視不同編程語言和資料庫SQL方言而有所不同。大致上是找關鍵字 「From」 或「UPDATE」或「DELETE」後面到關鍵字「WHERE」或「GROUP'或「ORDER」或結尾之間,首個無空格的字元串、或逗號後面無空格的字元串、或[]方括弧里的字元串等
例如:SQL查詢字元串「select a.*, b.name,c.Qty from table1 a, [table 2] b,(select item,Sum(*) as Qty from table3 group by item) c where a.id=b.id and a.item =c.item"
用演算法取出裡面的 table1、table 2、table3,當然取出來的表名還要排除其中的虛擬表(如果存在的話,例如查詢、視圖、存儲過程、臨時表等) 。
只要演算法合適取出來源表名完全是能做的到得,只不過設計這個演算法絕對不是一件輕松事,需要對SQL查詢有很深入細致的了解!
哦!對了,如果資料庫的所有源表名都帶一個可唯一標識的「字元串」前綴或者後綴,那麼取源表名演算法可能會大大簡化。
3. 資料庫,sql、mysql,的相關軟體有哪些管理工具盒開發工具
資料庫,從某種意上講,就像一個盤符下的根目錄,如:C盤代表mysql,那麼C:/A目錄就代表名為A的資料庫,所以它就像一個較大的集合;當然sqlserver資料庫不是這樣的表示,但其核心思路也相同,只是形式所表現不同罷了,ORACLE就表現形式來講就更復雜一點;ACCESS資料庫就是以一個文件形式存在的桌面資料庫。
sql,其實是操作各種資料庫的命令,也可以叫做語法集合什麼,用它來控制和操作資料庫的表,記錄,欄位和資料庫有關的一切信息,只要你願意,你就可以用SQL它控制資料庫的一切。
mysql,目前比較流行於WEB界的小型資料庫,與php完美結合,是互聯網開的完美組合,目前互聯網上站點使用最多的資料庫就是它了,所以它的人氣相當高,操作也比較容易,靈巧,部屬和安裝都相對簡單,是一個很好資料庫;
相關軟體,有ACCESS+asp,sqlserver+asp.net,jsp+oracle/mysql/mssql,黃金搭檔就要屬PHP+MYSQL,這種類型目前互聯網上的資源最多,也相對全面點。具體到資料庫的相關軟體有:ACCESS,SQLserver,Mysql,Oracle,每種資料庫都有不同層次或領域的應用,則其選用。
管理工具盒,其實是指某個軟體內部自帶的工具,如網站開發工具DW就自帶了各種資料庫的工具盒,但都不太完美,正所謂什麼都會,就肯定什麼都不太精通只是免強滿足一定的需求。
開發工具,這個就比較多了,如access就自帶了資料庫管理開發工具,mysql也有phpMyAdmin,Navicat Premium,SQLyog等工具,sqlserver是微軟家,自帶開發工具,oracle是一個高級的資料庫軟體,自帶強大的全方位的管理開發工具,是非常全面的資料庫,但由於部屬較麻煩,所以一般來講,大型項目才部屬。這里值得推薦的管理開發工具要屬Navicat Premium,它幾乎所有資料庫,操作也簡單明了,所以推薦樓主使用。
以上一些希望幫得到樓主,一切順意,望採納!
4. 學習資料庫和 SQL 相關的知識有哪些可以推薦的書籍
學習一下ACCESS或者是Foxpro就可以了。如果想深入學習,要先學習<<離散數學>>中的關系代數部分,再學習資料庫原理與優化,再學習TranSQL-92標准,再學習SQLSERVER、MYSQL、ORACLE中的一種就可以了。還用要了解ODBC、OLEDB、ADO、RDO等數據訪問介面方法。學習SQL語句可以用ACCESS做入門程序,因為ACCESS中的可視化查詢非常好用,可以製作完查詢後再翻譯成SQL語句。
5. sql語句相關知識,求大神解答啊!
"delete from " + Request["tablename"].ToString().Trim() + " where pid=" + int.Parse(Request["delid"].ToString().Trim()) + ""
拼成SQL就是:
delete from 表名tablename where pid = delid值
就是刪除掉表中pid的值是 頁面獲取的delid的值的 數據
6. SQL里,什麼叫相關子查詢
你這樣寫
1.
sc表中如果s#與c#是一對多or多對多的關系,可能會報錯
2.
從你的語句來看,你現在查詢的是已經選課的學生。因為你最後的查詢條件是sc.c#
is
not
null
3.
為什麼會是多條數據。原因大概是這樣的。你這里寫的語句,用了sql查詢中一個很高級的概念。關聯子查詢。它的執行順序是
a.從student表中查詢一條數據m
b.將m放到sc表中根據where
s.s#=sc.s#尋找滿足的數據n,然後再在n中根據sc.c#
is
not
null查找滿足的數據k
c.將k的結果再與主查詢中where
s#=相匹配
d.如果k的結果是〉1的,那麼你的語句就會報錯。就算k每次只返回一條數據,也有可能返回重復的數據(因為sc中s#與c#只要不是一對一,就有可能返回重復的數據)
修改代碼如下
--如果一個學生有任何一門課沒選課,就返回他的名字
select distinct a.sname from student as a
inner join sc as b on a.s#=b.s#
where b.c# is null
7. SQL查詢相關
像你這個語句SQL會優化執行,不會再檢索一次。
當然如果多次使用到檢索的中間結果,最好是把中間結果存入臨時表。
8. SQL 相關問題
select 號碼,類型,時間
from (
select 號碼,類型,時間,row_number() over (partition by 號碼 order by 時間) rn
from table_name
where 時間 is not null
) a
where rn=1
9. SQL 搜索結果相關性排序問題
如果先按標題中同時出現"資料庫"和"Sql"
>>
內容中同時出現"資料庫"和"Sql"
>>
標題中出現"資料庫"或"Sql"
>>內容中出現"資料庫"或"Sql"
再按時間降序只能用添加輔助列的方法實現:
Select
Title,Content,case
when
Title
like
'%資料庫%'
and
Title
like
'%Sql%'
then
1
when
Content
like
'%資料庫%'
and
Content
like
'%Sql%'
then
2
when
Title
like
'%資料庫%'
or
Title
like
'%Sql%'
then
3
when
Content
like
'%資料庫%'
or
Content
like
'%Sql%'
then
4
end
as
priority
from
Article
order
by
priority,tTime
desc
10. SQL語法相關
表連接的話應該指定連接條件,對於你的表結構,連接條件應該為
A.deptid=B.deptid
完整語句可以寫作:
select A.workerid,A.workername,B.deptid,B.deptname
from worker as A,dept as B
where A.deptid=B.deptid and B.deptid='101' and A.workerid='1001'