數(shù)據(jù)庫(kù)常見(jiàn)面試題補(bǔ)充
1,常用哪些數(shù)據(jù)庫(kù)說(shuō)一下?
MySQL ,SqlServer,Oracle數(shù)據(jù)庫(kù)
2,簡(jiǎn)單說(shuō)說(shuō)增刪改查語(yǔ)句
①添加數(shù)據(jù)
insert into 表名 values('p009','張三',1,'n001','2016-8-30 12:9:8') ;
給特定的列添加數(shù)據(jù)
insert into Info (code,name) values('p010','李四');
②select * from Info where code='p003'
模糊查詢 like "_"1個(gè)任意字符和"%" 0個(gè)或多個(gè)任意字符
排序查詢? order by field1 [DESC]降序/[ASC]升序 ,二級(jí)排序逗號(hào)隔開(kāi)即可
分頁(yè)查詢? limit m, n
查詢一條數(shù)據(jù)的命令? limit 1= limit 0,1 ;在SqlServer中也有top1
3、修改數(shù)據(jù)
? ?update 表名 set name='王永樂(lè)' where code='p002'
4,刪除一個(gè)表,刪除表語(yǔ)句
? ?delete from 表名 where 條件
5,刪除一個(gè)表格里面的一行記錄,只刪除表中數(shù)據(jù)的語(yǔ)句
? ?delete from 表名 where 條件
6,delete與drop與truncate的區(qū)別
相同點(diǎn):
1、都有刪除表的功能;
不同點(diǎn):
1、delete、truncate僅僅刪除表里面的數(shù)據(jù);drop會(huì)把表的結(jié)構(gòu)也刪除掉
2、delete是DML語(yǔ)句,操作完了,還可以回滾;truncate和drop是DDL語(yǔ)句,刪除之后立即生效,不能回滾;
3、在執(zhí)行速度上drop>truncate>delete;
7,操作數(shù)據(jù)的命令。
【show databases】,該命令可以查看所有的數(shù)據(jù)庫(kù)。
如果我們要查看數(shù)據(jù)庫(kù)中的表,可以使用命令【show tables】。
如果輸入了錯(cuò)誤命令,可以使用【\c】結(jié)束。
使用 use 命令可以選擇數(shù)據(jù)庫(kù) 例如 use information_schema
如果要查看表結(jié)構(gòu),可以使用命令desc? table_name;
如果要查看表狀態(tài),可以使用命令show table status from db like 條件
8、查看一個(gè)數(shù)據(jù)庫(kù)有沒(méi)有打開(kāi)使用什么命令
使用命令 # service mysqld status 命令來(lái)查看mysql 的啟動(dòng)狀態(tài),
如果出現(xiàn)mysqld is stopped 那就說(shuō)明mysql服務(wù)是停止?fàn)顟B(tài)
如果出現(xiàn)mysqld is running那就說(shuō)明mysql服務(wù)是啟動(dòng)狀態(tài)。
9,連表查詢有哪幾種?
在mysql數(shù)據(jù)庫(kù)中,主要有三種連表方式,分別是:
①外連接 outer join
②內(nèi)連接 inner join
③交叉連接 cross join??
交叉連接相當(dāng)于求左右兩表的笛卡爾積,
比如我有兩組數(shù)據(jù),a(1, 2) 與 b(4, 5),求它們的笛卡爾積的結(jié)果就是:
【(1,4),(1,5),(2,4),(2,5)】

外連接又可以細(xì)分為三種:
①左外連接 select * from 表1 left join 表2 on user.id=article.user_id;
②右外連接 無(wú)論右表在左表有無(wú)匹配,都返回右表的數(shù)據(jù),缺失的左表數(shù)據(jù)為NULL
③完全外連接? mysql并不支持full join,可以通過(guò)union all子句,將left join與right join組合在一起,達(dá)到類似full join的效果
10,sql語(yǔ)句中內(nèi)外連接的區(qū)別
內(nèi)連接相對(duì)于外鏈接,就是內(nèi)連接只要左右表都匹配的數(shù)據(jù),也就是交集
內(nèi)連接(inner join):取出連接表中匹配到的數(shù)據(jù),匹配不到的不保留
外連接(outer join):取出連接表中匹配到的數(shù)據(jù),匹配不到的也會(huì)保留,其值為NULL
10,數(shù)據(jù)庫(kù)去重?
:原表數(shù)據(jù)不會(huì)被修改,只是查詢結(jié)果去重。
去重需要使用一個(gè)關(guān)鍵字:distinct
select distinct 字段1,字段2 from emp; --注意這樣寫(xiě)是兩個(gè)字段聯(lián)合起來(lái)去重
11,數(shù)據(jù)庫(kù)10000條訂單中兩條相同,怎樣用sql語(yǔ)句找出來(lái)
select * from ord where id in (select id from people group by id having count (id) > 1)?
12,數(shù)據(jù)庫(kù)范式
要想設(shè)計(jì)—個(gè)好的關(guān)系,必須使關(guān)系滿足一定的約束條件,此約束已經(jīng)形成了規(guī)范,分成幾個(gè)等級(jí),一級(jí)比一級(jí)要求得嚴(yán)格。
關(guān)系數(shù)據(jù)庫(kù)有六種范式:
第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式)。
通常所用到的只是前三個(gè)范式,
第一范式就是屬性不可分割,每個(gè)字段都應(yīng)該是不可再拆分的。比如地址就可以拆分為省份,市,詳細(xì)地址,這樣就能避免經(jīng)常需要訪問(wèn)地址中的省份
第二范式就是主鍵約束,要求表中要有主鍵,表中其他字段都依賴于主鍵。比如學(xué)生表中的姓名就不能作為主鍵,因?yàn)榭赡芡?,不唯?/p>
第三范式就是外鍵約束,確保數(shù)據(jù)表中的每一列數(shù)據(jù)都和主鍵直接相關(guān),比如學(xué)生表,可以將班主任的主鍵編號(hào)作為一個(gè)外鍵和學(xué)生表建立相應(yīng)的關(guān)系,而不可以在學(xué)生表中添加關(guān)于班主任其它信息(比如姓名、年齡等)的字段??梢钥醋鍪窍哂?/p>
13,數(shù)據(jù)庫(kù)索引
索引是對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),使用索引可快速訪問(wèn)數(shù)據(jù)庫(kù)表中的特定信息。
如果想按特定職員的姓來(lái)查找他或她,則與在表中搜索所有的行相比,索引有助于更快地獲取信息。避免全表掃描
select * from table1 where id=10000。如果沒(méi)有索引,必須遍歷整個(gè)表,直到ID等于10000的這一行被找到為止;有了索引之后(必須是在ID這一列上建立的索引),即可在索引中查找。由于索引是經(jīng)過(guò)某種算法優(yōu)化過(guò)的,因而查找次數(shù)要少的多。
簡(jiǎn)而言之,數(shù)據(jù)庫(kù)索引是排好序的數(shù)據(jù)結(jié)構(gòu)。
索引的一個(gè)主要目的就是加快檢索表中數(shù)據(jù)
可以在數(shù)據(jù)庫(kù)設(shè)計(jì)器中創(chuàng)建三種索引:唯一索引、主鍵索引和聚集索引。
14,數(shù)據(jù)庫(kù)索引優(yōu)化?
數(shù)據(jù)庫(kù)索引優(yōu)化可以通過(guò)創(chuàng)建合適的索引、維護(hù)好索引、避免全表掃描、優(yōu)化聚簇索引和壓縮索引等方式來(lái)提高查詢效率和性能。需要根據(jù)具體的數(shù)據(jù)庫(kù)和應(yīng)用場(chǎng)景選擇合適的優(yōu)化方案。