常用数据库复习资料
mast:
數(shù)據(jù)庫控制SQL Server的所有方面。這個數(shù)據(jù)庫中包括所有的配置信息、用戶登錄信息、當(dāng)前正在服務(wù)器中運行的過程的信息。
model:數(shù)據(jù)庫是建立所有用戶數(shù)據(jù)庫時的模板。當(dāng)你建立一個新數(shù)據(jù)庫時,SQL Server會把model數(shù)據(jù)庫中的所有對象建立一份拷貝并移到新數(shù)據(jù)庫中。在模板對象被拷貝到新的用戶數(shù)據(jù)庫中之后,該數(shù)據(jù)庫的所有多余空間都將被空頁填滿。
tempdb數(shù)據(jù)庫
tempdb數(shù)據(jù)庫是一個非常特殊的數(shù)據(jù)庫,供所有來訪問你的SQL Server的用戶使用。這個庫用來保存所有的臨時表、存儲過程和其他SQL Server建立的臨時用的東西。例如,排序時要用到tempdb數(shù)據(jù)庫。數(shù)據(jù)被放進tempdb數(shù)據(jù)庫,排完序后再把結(jié)果返回給用戶。每次SQL Server重新啟動,它都會清空tempdb數(shù)據(jù)庫并重建。永遠不要在tempdb數(shù)據(jù)庫建立需要永久保存的表
msdb數(shù)據(jù)庫:
msdb數(shù)據(jù)庫是SQL Server中的一個特例。如果你查看這個數(shù)據(jù)庫的實際定義,會發(fā)現(xiàn)它其實是一個用戶數(shù)據(jù)庫。不同之處是SQL Server拿這個數(shù)據(jù)庫來做什么。所有的任務(wù)調(diào)度、報警、操作員都存儲在msdb數(shù)據(jù)庫中。該庫的另一個功能是用來存儲所有備份歷史。SQL Server Agent將會使用這個庫。
數(shù)據(jù)庫管理系統(tǒng)和數(shù)據(jù)庫系統(tǒng)的區(qū)別:
數(shù)據(jù)庫管理系統(tǒng)(DBMS):是一個系統(tǒng)軟件,比如說mysql sqlserver等。
數(shù)據(jù)庫系統(tǒng)(DBS):是一個實際可運行的系統(tǒng),可以對系統(tǒng)提供的數(shù)據(jù)進行存儲、維護和應(yīng)用。
--創(chuàng)建表
CREATE TABLE users
(
id INT ,
name VARCHAR(50),
age INT
)
--添加數(shù)據(jù)
SELECT * FROM users
INSERT INTO users VALUES(2,'張三1',13);
INSERT INTO users VALUES(4,'王五',12,'山西省呂梁市',DEFAULT); ? --默認(rèn)性別是男,年齡必須大于0小于100
--創(chuàng)建一個Student表
CREATE TABLE student
(
id INT ,
name VARCHAR(50),
age VARCHAR(50)
)
--將users表中的id name age 查詢出來之后放在student表里面,其中student已經(jīng)事先存在了
INSERT INTO student(id,name,age) SELECT id,name,age FROM users ;
SELECT * FROM student;
--將users表中的id name age address 查詢出來放在新表studentinfo中,其中studentinfo事先不存在
SELECT id,name,age,address INTO studentinfo FROM users;
SELECT * FROM studentinfo;
--給studetninfo表里面一次插入多條記錄
INSERT INTO studentinfo VALUES(5,'張無',45,'山東省濟南市'),
(6,'張無1',45,'山東省濟南市1'),
(7,'張無2',42,'山東省濟南市2'),
(9,'張無3',78,'山東省濟南市3')
SELECT * FROM studentinfo;
--修改users的信息,將張三的性別修改成女
SELECT * FROM users;
UPDATE users set sex='女' WHERE name='張三'
--刪除張三1
DELETE FROM users WHERE name='張三1'
--查詢--使用別名AS
SELECT id AS '編號',name AS '姓名',age AS '年齡' FROM users
--使用別名.
SELECT id ?'編號',name ?'姓名',age ?'年齡' FROM users
--合并兩列數(shù)據(jù)
SELECT name+'.'+address FROM studentinfo;
--查詢空行
INSERT INTO users (id,name,age) VALUES(5,'王寶寶',15);
SELECT * FROM users;
SELECT * FROM users WHERE address is null;
--查詢前3行
SELECT top 2 * FROM users;
--按照百分?jǐn)?shù)查詢
SELECT top 10 percent * FROM users;
--按年齡排序(升序),編號降序
SELECT * FROM users order by age ASc,id desc;
--查詢m在My Jbns Course里面出現(xiàn)的位置
SELECT CHARINDEX('m','My Jbns Course')
--查詢My Jbns Course的長度
SELECT len('My Jbns Course')
--把傳遞給他的字符串轉(zhuǎn)換成大寫
SELECT UPPER('my is father');
--清除字符左邊的空格
SELECT ltrim(' ? ? 你是誰 ? ? ?')
--清除字符右邊的空格
SELECT rtrim(' 你是誰 ? ? ?')
--從字符串右邊返回指定的字符,4代表截取幾個字符
SELECT RIGHT('買賣提5吐爾松',4)
--替換一個字符串中的字符:把(我)替換成(你)
SELECT replace('我是誰','我','你')
--在一個字符串中,刪除指定長度的字符,并在改位置插入一個新字符,1是從第一個開始,5是截取5個
SELECT stuff('abcdefg',1,5,'明朝的皇帝是誰?')
--日期函數(shù)--取得系統(tǒng)當(dāng)前的日期
SELECT getdate()
--將指定的數(shù)值添加到指定的日期部分后的日期(yy:年,mm:月,dd:日,5代表加的數(shù)字)
SELECT DATEADD(yy,5,'01/01/2009')
--兩個日期中指定日期的間隔(yy:年,mm:月,dd:日,輸出一個整型)
SELECT DATEDIFF(yy,'2017-05-08','2019-05-04')
--日期中指定日期部分的字符串形式(yy:年,mm:月,dd:日,輸出一個字符串:星期六)
SELECT datename(dw,'2015-05-09')
--日期中指定日期部分的整數(shù)形式
SELECT datepart(day,'2014-05-09')
--數(shù)學(xué)函數(shù)
--返回0-1之間的隨機數(shù)float值
SELECT rand()
--取大于或等于指定數(shù)值、表達式的最小整數(shù)
SELECT ceiling(45.6)
--取數(shù)值表達式的絕對值
SELECT abs(-8)
--取小于或等于指定數(shù)值、表達式的最大整數(shù)
SELECT floor(32.8)
--取數(shù)值表達式的冪值(5的2次方)
SELECT power(5,2)
--取數(shù)值表達式四舍五入為指定的精度(2代表保留2位,其余的都是0)
SELECT round(3.1415926,2)
--對于正數(shù)返回+1,對于負(fù)數(shù)返回-1,對于0則返回0
SELECT sign(-1)
--取浮點表達式的平方根
SELECT sqrt(9)
--系統(tǒng)函數(shù)
--用來轉(zhuǎn)變數(shù)據(jù)類型
SELECT CONVERT (VARCHAR (5),12345)
--返回當(dāng)前用戶的名字
SELECT CURRENT_USER
--返回用于指定表達式的字節(jié)數(shù)
SELECT DATALENGTH ('中國A聯(lián)盟')
--返回當(dāng)前用戶所登錄的計算機名字
SELECT HOST_NAME()
--返回當(dāng)前所登錄的用戶名稱
SELECT SYSTEM_USER
--從給定的用戶ID返回用戶名
SELECT USER_NAME(1)
--案例--某公司印了一批充值卡,卡的密碼是隨機生成的,現(xiàn)在出現(xiàn)這個問題:--卡里面的字母“O和數(shù)字0”、“字母i和數(shù)字1”,用戶反映說看不清楚,--公司決定,把存儲在數(shù)據(jù)庫中的密碼中所有的“O”都改成“0”,把所有的“i”都改成“1”;
UPDATE Card SET PassWord = REPLACE(PassWord ,'O','0')
UPDATE Card SET PassWord = REPLACE(PassWord ,'i','1')
--使用函數(shù)更加簡便
UPDATE ?Card?
SET PassWord = REPLACE(REPLACE(PassWord ,'O','0'),'i','1')
--在數(shù)據(jù)庫表中有以下字符數(shù)據(jù),如:-- 13-1、13-2、13-3、13-10、13-100、13-108、13-18、13-11、13-15、14-1、14-2--現(xiàn)在希望通過SQL語句進行排序,并且首先要按照前半部分的數(shù)字進行排序,然后再按照后半部分的數(shù)字進行排序,輸出要排成這樣:-- 13-1、13-2、13-3、13-10、13-11、13-15、13-18、13-100、13-108、14-1、14-2
SELECT ListNumber
FROM ? ?SellRecord
ORDER BY?
CONVERT(int, LEFT(ListNumber, CHARINDEX('-', ListNumber)-1)),
CONVERT(int, STUFF(ListNumber,1, CHARINDEX('-', ListNumber), ''))
--年滿20周歲的條件
DATEDIFF(DD,BornDate, GETDATE())>=365*20?
--獲取Email的域名
RIGHT(Email, LEN(Email) - CHARINDEX('@',Email) )
--獲取當(dāng)前日期的年、月、日
CONVERT(VARCHAR(4), DATEPART(YYYY,GETDATE()))
--獲取4位隨機數(shù)
RIGHT(RAND(),4)?
select * from students
select * from score
select * from course
--按年級查詢學(xué)生人數(shù)
select count(*) 人數(shù),sgrade 年級 from students group by sgrade
--多列分組,統(tǒng)計每學(xué)期男女學(xué)生的人數(shù)
select count(*) 人數(shù),sgrade,ssex from students group by sgrade,ssex?
--查詢總?cè)藬?shù)超過15的年級
select count(*) 人數(shù) ,sgrade 年級 from students group by sgrade having count(*)>=2
---連接查詢
select * from Students a join score b on a.SCode = b.Score join ?course c on b.CourseID = c.CourseID
--左外鏈接查詢
SELECT S.SName,C.CourseID,C.Score?
FROM Students AS S
LEFT JOIN Score AS C
ON C.StudentID = S.SCode
--右外鏈接查詢--左外聯(lián)接是以左表為基礎(chǔ)的,左表的記錄將會全部表示出來,--而右表只會顯示符合搜索條件的記錄。右表記錄不足的地方均為NULL
SELECT S.SName,C.CourseID,C.Score?
FROM Students AS S
right JOIN Score AS C
ON C.StudentID = S.SCode
感謝您抽出??·?來閱讀此文
更多精彩請點擊【閱讀原文】哦
↓↓↓
長按二維碼關(guān)注我們,
1111的博客,一個有用
的公眾號
總結(jié)
 
                            
                        - 上一篇: 企鹅变声器玩法?
- 下一篇: Eleven2对HostGator-20
