面试题: 数据库 真实面试题已看1 操作语句 存储过程 挺好 sql语句练习 有用
今天到某公司筆試,數(shù)據(jù)庫(kù)考的比較多,但是說(shuō)老實(shí)話,考的也比較基礎(chǔ)。現(xiàn)在趁回憶得起來(lái),將數(shù)據(jù)庫(kù)知識(shí)簡(jiǎn)單整理如下:
?一、建表指令
?
比如創(chuàng)建一個(gè)學(xué)生表student,它由學(xué)號(hào)Sno,姓名Sname,性別Ssex,年齡Sage,所在系Sdept五個(gè)屬性組成。其中學(xué)號(hào)不能為空,值是唯一的,并且姓名取值也唯一。
?
CREATE TABLE Student
?
(Sno????CHAR(10) NOT NULL UNIQUE,
?
?Sname??CHAR(20) UNIQUE,
?
?Ssex????char(2),
?
Sage????INT,
?
Sdept??char(15)
?
)
?
?
?
二、增加列、刪除列、修改列
?
1、增加列Stel
?
Alter?table Student?ADD?Stel Char(12)
?
2、刪除列Stel
?
Alter?Table Student?DROP COLUMN?Stel
?
3、修改列Sdept
?
?
?
?
三、建立與刪除索引
?
1、在表Student中建立按年齡Sage升序建立索引
?
建立索引:Create??INDEX??S_INDEX??ON??Student(Sage)
?
2、刪除索引
? ? ? ? ? ? ?
DROP??INDEX??Student??S_INDEX
?
?
?
四、連接查詢。
?
在對(duì)表進(jìn)行連接時(shí),最常用的連接條件是等值連接,也就是使兩個(gè)表中對(duì)應(yīng)列相等所進(jìn)行的連接,通常一個(gè)列是所在表的主鍵,另一個(gè)列是所在表的主鍵或外鍵,只有這樣的等值連接才有意義。(隱式內(nèi)連接)
?
比如說(shuō)有兩張表分別為courses表(cno,cname,credit)和enrolls表(sno,cno,grade)。
?
查詢所有學(xué)生所選的課程名稱:
?
Select??sno,??enrolls.cno, cname, grade??from??enrolls, courses WHERE enrolls.cno = courses.cno
?
?
?
五、單表查詢時(shí),去掉重復(fù)行
?
比如查詢Student表中所有系的名稱,去掉重復(fù)行
?
Select??distinct??age??From??student
?
?
?
六、常用條件表達(dá)式運(yùn)算符IN,NOT IN;between,and,not like.
?
在上面的Student表和enrolls表中,查詢成績(jī)?cè)?strong>80分以上的的學(xué)號(hào)和姓名。 ? 成績(jī)?cè)?0分以上的為子查詢 ?然后讓學(xué)生的學(xué)號(hào)在子查詢的結(jié)果中
?
Select??sno,??sname??From??Student WHERE??sno??IN (select sno FROM enrolls Where grade > 80)
?
上面的SQL語(yǔ)句也是嵌套查詢。
?
?
?
七、有個(gè)需用到having字句的,具體題目忘了。
?
Having子句,篩選出只滿足指定條件的組。注意的是,該子句只能同GROUP BY子句配合使用,篩選出符合條件的分組信息。
?
類似題目如下:查詢Student表中每個(gè)系有三個(gè)以上的學(xué)生的所在系。
?
Select??department??From??Student??Group??BY?department??Having??COUNT(*) >= 3。 ?這個(gè)好像不對(duì)
?
?
?
八、插入數(shù)據(jù)
?
1、單行插入,比如在上面的Student表中插入學(xué)生王強(qiáng)的信息。
?
Insert??into??Student(Sno,Sname,Ssex,Sage,Sdept)
?
Values(‘2005012’,’王強(qiáng)’,’男’,18,’計(jì)算機(jī)’)
? insert ?多個(gè)value ?這樣執(zhí)行效率要 小于 values()
2、多行插入,比如每個(gè)學(xué)生都要修操作系統(tǒng)c2這門課,將選課信息加入表enrolls中。
?
INSERT??INTTO??enrolls(sno,cno)
?
SELECT??Sno, ‘c2’??FROM??Student
?
?
?
九、修改數(shù)據(jù)
?
比如給enrolls這個(gè)表中選修了操作系統(tǒng)這門課的學(xué)生的成績(jī)修改為60分。
?
UPDATE enrolls
?
SET grade = 60
?
WHER cno IN
?
(SELECT??cno??FROM??courses??WHERE??cname??= ‘操作系統(tǒng)’)
?
?
?
十、刪除數(shù)據(jù)
?
比如刪除Student表中年齡在20歲以上的學(xué)生
?
Delete???from??Student???where??Sage > 20
?
刪除整張表的數(shù)據(jù)?delete from Student
?
?
?
十一、存儲(chǔ)過(guò)程(兩個(gè)參數(shù),根據(jù)輸入的參數(shù)查詢好數(shù)據(jù)后返回給輸出的參數(shù))
?存儲(chǔ)過(guò)程案例:
比如創(chuàng)建一個(gè)存儲(chǔ)過(guò)程procGetDepName,它帶有1個(gè)輸入?yún)?shù)@sno,還帶有1個(gè)輸出參數(shù)@DepartmentName,功能:根據(jù)輸入的學(xué)號(hào),找到該生所在的院系,輸出院系名稱。
?
create procedure?procGetDepName
?
@sno nvarchar(10),
?
@DepartmentName nvarchar(20)?output
?
as
?
begin
?
select @DepartmentName = DepartmentName
?
from Department d, Student s
?
where d.DepartmentID = s.DepartmentID and
?
s.sno = @sno
?
end
?
?
十二、數(shù)據(jù)庫(kù)常用數(shù)據(jù)類型和作用。
?
第一大類:整數(shù)數(shù)據(jù)
?
bit:bit數(shù)據(jù)類型代表0,1或NULL,就是表示true,false.占用1byte.
?
int:以4個(gè)字節(jié)來(lái)存儲(chǔ)正負(fù)數(shù)。可存儲(chǔ)范圍為:-2^31至2^31-1。
?
smallint:以2個(gè)字節(jié)來(lái)存儲(chǔ)正負(fù)數(shù)。存儲(chǔ)范圍為:-2^15至2^15-1。
?
tinyint:?是最小的整數(shù)類型,僅用1字節(jié),范圍:0至此^8-1。
?
?
?
第二大類:精確數(shù)值數(shù)據(jù)
?
numeric:表示的數(shù)字可以達(dá)到38位,存儲(chǔ)數(shù)據(jù)時(shí)所用的字節(jié)數(shù)目會(huì)隨著使用權(quán)用位數(shù)的多少變化。
?
decimal:和numeric差不多。
?
?
?
第三大類:近似浮點(diǎn)數(shù)值數(shù)據(jù)
?
float:用8個(gè)字節(jié)來(lái)存儲(chǔ)數(shù)據(jù).最多可為53位。范圍為:-1.79E+308至1.79E+308。
?
real:位數(shù)為24,用4個(gè)字節(jié),數(shù)字范圍:-3.04E+38至3.04E+38。
?
?
?
第四大類:日期時(shí)間數(shù)據(jù)
?
datatime:表示時(shí)間范圍可以表示從1753/1/1至9999/12/31,時(shí)間可以表示到3.33/1000秒.使用8個(gè)字節(jié)。
?
smalldatetime:表示時(shí)間范圍可以表示從1900/1/1至2079/12/31,使用4個(gè)字節(jié)。
?
?
?
第五大類:字符串?dāng)?shù)據(jù)
?
char:長(zhǎng)度是設(shè)定的,不可變的。最短為1字節(jié),最長(zhǎng)為8000個(gè)字節(jié).不足的長(zhǎng)度會(huì)用空白補(bǔ)上。
?
varchar:長(zhǎng)度是可變的。最短為1字節(jié),最長(zhǎng)為8000個(gè)字節(jié),尾部的空白會(huì)去掉。
?
text:長(zhǎng)寬也是設(shè)定的,最長(zhǎng)可以存放2G的數(shù)據(jù)。
?
?
?
第六大類:Unincode字符串?dāng)?shù)據(jù)
?
nchar:長(zhǎng)度是設(shè)定的,最短為1字節(jié),最長(zhǎng)為4000個(gè)字節(jié)。不足的長(zhǎng)度會(huì)用空白補(bǔ)上,儲(chǔ)存一個(gè)字符需要2個(gè)字節(jié)。
?
nvarchar:長(zhǎng)度是設(shè)定的,可變的。最短為1字節(jié),最長(zhǎng)為4000個(gè)字節(jié).尾部的空白會(huì)去掉。儲(chǔ)存一個(gè)字符需要2個(gè)字節(jié)。
?
ntext:長(zhǎng)度是設(shè)定的,最短為1字節(jié),最長(zhǎng)為2G.尾部的空白會(huì)去掉,儲(chǔ)存一個(gè)字符需要2個(gè)字節(jié)。
?
?
?
第七大類:貨幣數(shù)據(jù)類型
?
money:記錄金額范圍為:-92233720368577.5808至92233720368577.5807.需要8?個(gè)字節(jié)。
?
smallmoney:記錄金額范圍為:-214748.3648至214748.36487.需要4個(gè)字節(jié)。
?
?
?
第八大類:標(biāo)記數(shù)據(jù)
?
timestamp:該數(shù)據(jù)類型在每一個(gè)表中是唯一的!當(dāng)表中的一個(gè)記錄更改時(shí),該記錄的timestamp字段會(huì)自動(dòng)更新.
?
uniqueidentifier:用于識(shí)別數(shù)據(jù)庫(kù)里面許多個(gè)表的唯一一個(gè)記錄.
?
?
?
第九大類:二進(jìn)制碼字符串?dāng)?shù)據(jù)
?
binary:固定長(zhǎng)度的二進(jìn)制碼字符串字段,最短為1,最長(zhǎng)為8000。
?
varbinary:與binary差異為數(shù)據(jù)尾部是00時(shí),varbinary會(huì)將其去掉。
?
image:為可變長(zhǎng)度的二進(jìn)制碼字符串,最長(zhǎng)2G。
十三、C的內(nèi)容
主要考C的內(nèi)存分配,for循環(huán)的局部性等基礎(chǔ)知識(shí),主要是林銳那本高質(zhì)量C/C++里面后面的習(xí)題。
十四、C++
基本不會(huì),因?yàn)閼?yīng)聘的是C++,也因?yàn)檫@個(gè),被筆試給鄙視掉了
轉(zhuǎn)載于:https://www.cnblogs.com/shan1393/p/9117775.html
總結(jié)
以上是生活随笔為你收集整理的面试题: 数据库 真实面试题已看1 操作语句 存储过程 挺好 sql语句练习 有用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 用中文传话游戏理解 RNN
- 下一篇: mysql进阶练习