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