sql體會
A. 急求sql資料庫的實訓總結,以及在實訓中碰到的問題和體會
都差不多吧!我也寫過一次,給你吧,希望能夠幫到你
這個星期是我們SQL Server 資料庫管理課的實訓,經過一個星期的實訓,讓我領會到了許多平時課堂上所沒有接受的課外知識,很讓人受益匪淺,懂得如何去運用,而進行的一次分析設計綜合的訓練。而本次實訓的目的是讓我們掌握資料庫系統的原理、技術。將理論與實際相結合,應用現有的資料庫管理系統軟體,規范、科學地完成一個設計與實現。
這次我們實訓的內容是從資料庫、數據表的創建和修改開始的,表是建立關系資料庫的基本結構,用來存儲數據具有已定義的屬性,在表的操作過程中,有查看錶信息、查看錶屬性、修改表中的數據、刪除表中的數據及修改表和刪除表的操作。從實訓中讓我更明白一些知識,表是數據最重要的一個數據對象,表的創建好壞直接關繫到數資料庫的成敗,表的內容是越具體越好,但是也不能太繁瑣,以後在實際應用中多使用表,對表的規劃和理解就會越深刻。我們實訓的另一個內容是資料庫的約束、視圖、查詢。從中我們了解到查詢語句的基本結構,和簡單SELECT語句的使用,多表連接查詢。而在視圖的操作中,也了解到了視圖是常見的資料庫對象,是提供查看和存取數據的另一種途徑,對查詢執行的大部分操作,使用視圖一樣可以完成。使用視圖不僅可以簡化數據操作,還可以提高資料庫的安全性,不僅可以檢索數據,也可以通過視圖向基表中添加、修改和刪除數據。存儲過程、觸發器也是我們實訓的內容之一, 在操作中有建立存儲過程,執行存儲過程,及查看和修改存儲過程,這些都是非常基礎的東西,但對用戶卻是非常重要的呢,只有熟悉了T_SQL語言,才能更好的掌握更多的東西。我們還學習了,SQL管理、數據的導入、導出、備份和還原。有SQL Server 安全訪問控制;登錄賬戶的管理;資料庫角色的管理;用戶許可權管理。維護資料庫的安全是確保資料庫正常運行的重要工作。數據的備份是對SQL Server數據事務日誌進行拷貝,資料庫備份記錄了在進行備份操作的資料庫中所有數據的狀態。而數據的備份還分為資料庫完整備份、差異備份、事務日誌備份、文件及文件組備份。做數據備份就是為了以後的資料庫恢復用。在實訓內容上我們還做了倉庫管理資料庫,其中的要求包含了許多資料庫的對象,綜合了我們所學的許多知識,讓我們更努力的把所學到的東西運用上去。
實訓課是在學習與探索中度過的,短暫的一星期實訓是結束了,但其中讓我們學到了許多知識,出現許多未知的為什麼,如倉庫管理資料庫的初步設置、數據備份與還原的步驟,如何建立視圖、觸發器等一系列的問題,正是在老師和同學的共同努力之下,我們才一步步把問題解決了,最終完成了不可能完成的任務。
B. 請教下SQL問題
所有的聚合函數都要有的,顧名思義,函數要你告訴他以哪個欄位來聚合,比如你用sum(*)來查每個班有多少人,肯定要 group by 班級的,要不函數不知道把人數按照什麼條件來加,也許把一班加到二班裡去了,好好體會一下就懂了,不過min,max不是聚合函數
C. SQL Server 相比 MySQL 有何優勢
其實兩種產品並不是一樣的類型,mysql是單純的資料庫存儲,mssql是一整套數據解決方案。如果有興趣可以去了解一下microsoft sql server business intelligence和data mining相關的產品,以及data cube,高斯分布計算等各種features,你就會改變觀念了。
mysql是互聯網公司廣泛使用的,免費的(最重要),容易使用的存儲方案,標准做法是單純的業務crud,核心任務是扛住qps和tps,沒有存儲過程,擴展函數等邏輯(從安全,性能,邏輯控制考慮)。
回到你的問題,如果要比較,那就得把sql server降級到這個角色來。單純的crud情況下,同樣的配置,它的優勢有:
1. 更好的讀寫性能,因為和windows framework綁定一起,底層操作系統級優勢。而mysql則有可能oom,被linux無差別清理掉
2. 數據可靠性更好:數據安全,一致性等
3. 存儲過程。oracle和mssql都有強大的存儲過程,銀行系統甚至有規定凡是和資金相關的邏輯必須寫在存儲過程里,禁止寫在應用程序里。而mysql的存儲過程則一直是雞肋。用c語言寫的擴展存儲過程,即運行在資料庫內存中的程序代碼,兩個都支持,這個不在討論范圍之內
4. 方便的性能監控。打開profiler,可以在生產環境中實時看各個query的執行詳情,還可以按需過濾,而且不影響系統性能
5. 方便的sql debug。這個主要用於函數和存儲過程,可以設斷點,單步,跳步等執行,就像程序debug一樣。mysql沒有ide能這樣做,調試存儲過程比較困難
6. 說到ide了,當然是出品過vs這種神器的微軟的天下了,mssql management studio各種好用,查詢管理都很方便
7. 可靠的資料庫復制。做過mysql dba的應該都有體會,主要的折騰工作就是db replication,敲得最多的就是show slave status… mssql有data mirror,log shipping等多種復制方式,且都很可靠。至少我那麼多年沒處理過主備數據不一致的修補工作。mysql主備讀寫分離曾經是mysql一個優勢,以前的mssql mirror備庫不可讀。但現在的版本已經可讀了,所以不存在這個缺陷了
其實還有很多,但那樣的話回答就成長篇大論了。總之選擇什麼資料庫並不是程序員或dba來決定的,而且行業和成本。難以想像杭州或北京一個互聯網startup會購買昂貴的資料庫licence,即便是雲計算資料庫
D. 查詢及sql語句的使用實驗總結與體會
檢查與管理的重要。
沒有範文。
以下供參考,
主要寫一下主要的工作內容,如何努力工作,取得的成績,最後提出一些合理化的建議或者新的努力方向。。。。。。。
工作總結就是讓上級知道你有什麼貢獻,體現你的工作價值所在。
所以應該寫好幾點:
1、你對崗位和工作上的認識2、具體你做了什麼事
3、你如何用心工作,哪些事情是你動腦子去解決的。就算沒什麼,也要寫一些有難度的問題,你如何通過努力解決了
4、以後工作中你還需提高哪些能力或充實哪些知識
5、上級喜歡主動工作的人。你分內的事情都要有所准備,即事前准備工作以下供你參考:
總結,就是把一個時間段的情況進行一次全面系統的總評價、總分析,分析成績、不足、經驗等。總結是應用寫作的一種,是對已經做過的工作進行理性的思考。
E. sql資料庫學了對人力資源有什麼用
提升人們的工作效率。
伴隨著計算機技術的不斷發展,有助於企業有效的管理人力資源,利用資料庫管理系統,能夠在一定程度上提升人們的工作效率,也可以大量節約使用費用,對於企業的健康發展,能夠顯示出較為重要的作用。
現在,我們可以將人力資源信息化發展史,分為工業時代、營銷時代、互聯網時代這三大時代來看待。每個時代都有各自獨特的歷史印記、衍生的具體工具。通過它們,我們也能真實地感受到人力資源管理不斷變革的腳步,更深刻地體會到信息化工具的便捷與高效性。在遙遠的工業大時代,社會需求是大於社會生產的,人成為重要的生產要素之一。這個時代下,人被當成一種資源來進行最大化的使用,鮮活的人和冰冷的機器價值之間是沒有差別的。因此,人事管理的核心是人與事務管理,所有的管理方法論都是工具的標准化、動作的標准化。
F. sql 查詢 高手的進!自連接的一點疑惑~~~~~~~~~~~~
SELECT TOP 2 student.student_id
from student
WHERE student.cid = student1.cid
ORDER BY corde DESC
這個查詢不能單獨拿出來,student1.cid 與前面的主表相關聯了。
這個查詢可以這樣分析,對主表中的每條數據進行篩選,如第一條數據(1 1 99)cid=1,通過子查詢,查詢出cid=1的課程中,成績在前兩名的學生的student_id為(2,3),那麼第一條數據的student_id=1,沒有通過篩選。依次往下篩選第二條數據,符合條件。
G. SQL中變數的種類及表現形式
MS SQL Server中的變數- -
在SQL中,我們常常使用臨時表來存儲臨時結果,對於結果是一個集合的情況,這種方法非常實用,但當結果僅僅是一個數據或者是幾個數據時,還要去建一個表,顯得就比較麻煩,另外,當一個SQL語句中的某些元素經常變化時,比如選擇條件,(至少我想)應該使用局部變數。當然MS SQL Server的全局變數也很有用。
>>>>局部變數
聲明:DECLARE @local_variable data_type
@local_variable 是變數的名稱。變數名必須以 at 符 (@) 開頭。data_type 是任何由系統提供的或用戶定義的數據類型。變數不能是 text、ntext 或 image 數據類型。
示例:
use master
declare @SEL_TYPE char(2)
declare @SEL_CUNT numeric(10)
set @SEL_TYPE = 'U'/*user table*/
set @SEL_CUNT = 10
/*返回系統中用戶表的數目*/
select @SEL_CUNT = COUNT(*)
from sysobjects
where type = @SEL_TYPE
select @SEL_CUNT as 'User table ''s count'
如果要返回系統表的數目,可以用set @SEL_TYPE = 'S'
可能這個例子並不能說明使用變數的好處,我只是想說明使用方法。當一組(幾個甚至幾十個)SQL語句都使用某個變數時,就能體會到他的好處了。
>>>>全局變數
全局變數是系統預定義的,返回一些系統信息,全局變數以兩個at(@)開頭。下面是我統計了一些較為常用的變數。
@@CONNECTIONS
返回自上次啟動以來連接或試圖連接的次數。
@@CURSOR_ROWS
返回連接上最後打開的游標中當前存在的合格行的數量。
@@DATEFIRST
返回每周第一天的數字
@@ERROR
返回最後執行的SQL 語句的錯誤代碼。
@@FETCH_STATUS
返回被 FETCH 語句執行的最後游標的狀態,而不是任何當前被連接打開的游標的狀態。
@@IDENTITY
返回最後插入的標識值
@@LANGID
返回當前所使用語言的本地語言標識符(ID)。
@@LANGUAGE
返回當前使用的語言名。
@@LOCK_TIMEOUT
返回當前會話的當前鎖超時設置,單位為毫秒。
@@PROCID
返回當前過程的存儲過程標識符 (ID) 。
@@ROWCOUNT
返回受上一語句影響的行數。
@@SERVERNAME
返回運行 的本地伺服器名稱。
@@SPID
返回當前用戶進程的伺服器進程標識符 (ID)。
@@TRANCOUNT
返回當前連接的活動事務數。
@@VERSION
返回當前安裝的日期、版本和處理器類型。
H. 初學SQL語句,不知道從何開始入手。
關於sql的學習,無法從兩頭開始:
1. 從理論開始,如果有興趣從頭學起的話,先學習一下關系代數,各個範式。 再來學習sql,按照教材逐步學習。
2. 從實踐開始,如果嫌理論學習起來麻煩,可以直接從sql查詢開始學起,先不學資料庫設計,比如oracle的emp,熟悉一下都有哪些表,欄位,然後根據要求,寫sql查詢,把自己寫的和別人寫的答案比較,體會實現的思路。 進一步再學資料庫設計
I. 如何優化SQL語句
一、問題的提出
在應用系統開發初期,由於開發資料庫數據比較少,對於查詢SQL語句,復雜視圖的的編寫等體會不出SQL語句各種寫法的性能優劣,但是如果將應用系統提交實際應用後,隨著資料庫中數據的增加,系統的響應速度就成為目前系統需要解決的最主要的問題之一。系統優化中一個很重要的方面就是SQL語句的優化。對於海量數據,劣質SQL語句和優質SQL語句之間的速度差別可以達到上百倍,可見對於一個系統不是簡單地能實現其功能就可,而是要寫出高質量的SQL語句,提高系統的可用性。
在多數情況下,Oracle使用索引來更快地遍歷表,優化器主要根據定義的索引來提高性能。但是,如果在SQL語句的where子句中寫的SQL代碼不合理,就會造成優化器刪去索引而使用全表掃描,一般就這種SQL語句就是所謂的劣質SQL語句。在編寫SQL語句時我們應清楚優化器根據何種原則來刪除索引,這有助於寫出高性能的SQL語句。
二、SQL語句編寫注意問題
下面就某些SQL語句的where子句編寫中需要注意的問題作詳細介紹。在這些where子句中,即使某些列存在索引,但是由於編寫了劣質的SQL,系統在運行該SQL語句時也不能使用該索引,而同樣使用全表掃描,這就造成了響應速度的極大降低。
1.
IS
NULL
與
IS
NOT
NULL
不能用null作索引,任何包含null值的列都將不會被包含在索引中。即使索引有多列這樣的情況下,只要這些列中有一列含有null,該列就會從索引中排除。也就是說如果某列存在空值,即使對該列建索引也不會提高性能。
任何在where子句中使用is
null或is
not
null的語句優化器是不允許使用索引的。
2.
聯接列
對於有聯接的列,即使最後的聯接值為一個靜態值,優化器是不會使用索引的。我們一起來看一個例子,假定有一個職工表(employee),對於一個職工的姓和名分成兩列存放(FIRST_NAME和LAST_NAME),現在要查詢一個叫比爾.柯林頓(Bill
Cliton)的職工。
下面是一個採用聯接查詢的SQL語句,
select
*
from
employss
where
first_name||''||last_name
='Beill
Cliton';
上面這條語句完全可以查詢出是否有Bill
Cliton這個員工,但是這里需要注意,系統優化器對基於last_name創建的索引沒有使用。
當採用下面這種SQL語句的編寫,Oracle系統就可以採用基於last_name創建的索引。
***
where
first_name
='Beill'
and
last_name
='Cliton';
.
帶通配符(%)的like語句
同樣以上面的例子來看這種情況。目前的需求是這樣的,要求在職工表中查詢名字中包含cliton的人。可以採用如下的查詢SQL語句:
select
*
from
employee
where
last_name
like
'%cliton%';
這里由於通配符(%)在搜尋詞首出現,所以Oracle系統不使用last_name的索引。在很多情況下可能無法避免這種情況,但是一定要心中有底,通配符如此使用會降低查詢速度。然而當通配符出現在字元串其他位置時,優化器就能利用索引。在下面的查詢中索引得到了使用:
select
*
from
employee
where
last_name
like
'c%';
4.
Order
by語句
ORDER
BY語句決定了Oracle如何將返回的查詢結果排序。Order
by語句對要排序的列沒有什麼特別的限制,也可以將函數加入列中(象聯接或者附加等)。任何在Order
by語句的非索引項或者有計算表達式都將降低查詢速度。
仔細檢查order
by語句以找出非索引項或者表達式,它們會降低性能。解決這個問題的辦法就是重寫order
by語句以使用索引,也可以為所使用的列建立另外一個索引,同時應絕對避免在order
by子句中使用表達式。
5.
NOT
我們在查詢時經常在where子句使用一些邏輯表達式,如大於、小於、等於以及不等於等等,也可以使用and(與)、or(或)以及not(非)。NOT可用來對任何邏輯運算符號取反。下面是一個NOT子句的例子:
...
where
not
(status
='VALID')
如果要使用NOT,則應在取反的短語前面加上括弧,並在短語前面加上NOT運算符。NOT運算符包含在另外一個邏輯運算符中,這就是不等於(<>)運算符。換句話說,即使不在查詢where子句中顯式地加入NOT詞,NOT仍在運算符中,見下例:
...
where
status
<>'INVALID';
對這個查詢,可以改寫為不使用NOT:
select
*
from
employee
where
salary<3000
or
salary>3000;
雖然這兩種查詢的結果一樣,但是第二種查詢方案會比第一種查詢方案更快些。第二種查詢允許Oracle對salary列使用索引,而第一種查詢則不能使用索引。
雖然這兩種查詢的結果一樣,但是第二種查詢方案會比第一種查詢方案更快些。第二種查詢允許Oracle對salary列使用索引,而第一種查詢則不能使用索引。