日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

牛客网SQL篇刷题篇(38-47)

發布時間:2024/9/27 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客网SQL篇刷题篇(38-47) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.視圖:視圖是可視化的表。

視圖的作用:

第一點:使用視圖,可以定制用戶數據,聚焦特定的數據。

解釋:

在實際過程中,公司有不同角色的工作人員,我們以銷售公司為例的話,

采購人員,可以需要一些與其有關的數據,而與他無關的數據,對他沒

有任何意義,我們可以根據這一實際情況,專門為采購人員創建一個視

圖,以后他在查詢數據時,只需select * from view_caigou 就

可以啦。

第二點:使用視圖,可以簡化數據操作。

解釋:我們在使用查詢時,在很多時候我們要使用聚合函數,同時還要

顯示其它字段的信息,可能還會需要關聯到其它表,這時寫的語句可能

會很長,如果這個動作頻繁發生的話,我們可以創建視圖,這以后,我

們只需要select * from view1就可以啦~,是不是很方便呀~

第三點:使用視圖,基表中的數據就有了一定的安全性

解釋:

因為視圖是虛擬的,物理上是不存在的,只是存儲了數據的集合,我們可以

將基表中重要的字段信息,可以不通過視圖給用戶,視圖是動態的數據的集

合,數據是隨著基表的更新而更新。同時,用戶對視圖,不可以隨意的更改

和刪除,可以保證數據的安全性。

第四點:可以合并分離的數據,創建分區視圖

解釋:

隨著社會的發展,公司的業務量的不斷的擴大,一個大公司,下屬都設有很

多的分公司,為了管理方便,我們需要統一表的結構,定期查看各公司業務

情況,而分別看各個公司的數據很不方便,沒有很好的可比性,如果將這些

數據合并為一個表格里,就方便多啦,這時我們就可以使用union關鍵字,

將各分公司的數據合并為一個視圖。

創建視圖:

CREATE VIEW view_name

AS SELECT column_name(s) FROM table_name WHERE condition

2.強制索引

MYSQL中強制索引查詢使用:FORCE INDEX(indexname);

SQLite中強制索引查詢使用:INDEXED BY indexname;

題目:針對salaries表emp_no字段創建索引idx_emp_no,查詢emp_no為10005,使用強制索引。

在SQLite中:

1

SELECT?*?FROM?salaries?INDEXED?BY?idx_emp_no?WHERE?emp_no?=?10005

在Mysql中:

1

2

create?index?idx_emp_no?on?salaries(emp_no);

select?*?from?salaries?FORCE?INDEX?(idx_emp_no)?where?emp_no?=?10005;

2.ALTER TABLE 語句

ALTER TABLE 語句用于在已有的表中添加、修改或刪除列。

如需在表中添加列,請使用下列語法:

ALTER TABLE table_name ADD column_name datatype

要刪除表中的列,請使用下列語法:

ALTER TABLE table_name DROP COLUMN column_name

要改變表中列的數據類型,請使用下列語法:

ALTER TABLE table_name ALTER COLUMN column_name datatype

題目:在last_update后面新增加一列名字為create_date, 類型為datetime, NOT NULL,默認值為'2020-10-01 00:00:00'

ALTER TABLE actor

ADD create_date datetime NOT NULL default '2020-10-01 00:00:00'

3.刪除重復記錄

題目描述:刪除emp_no重復的記錄,只保留最小的id對應的記錄。

?

討論中答案:

題目描述:刪除emp_no重復的記錄,只保留最小的id對應的記錄。

思路:1.找出每個emp_no里對應的最小id。2.刪除除1里記錄的所有數據。

1

2

3

4

5

6

7

delete from titles_test

where id not in

(

????select min(id)

????from titles_test

????group by emp_no

)

遭遇問題:you can't specify target table 'titles_test' for update in FROM clause

網查原因:在MYSQL里,不能先select一個表的記錄,在按此條件進行更新和刪除同一個表的記錄,

解決辦法:將select得到的結果,再通過中間表select一遍,這樣就規避了錯誤,這個問題只出現于mysql,mssql和oracle不會出現此問題。

復制代碼

1

2

3

4

5

6

7

8

9

10

delete from titles_test

where id not in

(

????select * from

????(

????????select min(id)

????????from titles_test

????????group by emp_no

????) as T1

)

4.replace函數

描述

將id=5以及emp_no=10001的行數據替換成id=5以及emp_no=10005,其他數據保持不變,使用replace實現,直接使用update會報錯。

CREATE?TABLE?titles_test?( ???id?int(11)?not?null?primary?key, ???emp_no??int(11)?NOT?NULL, ???title??varchar(50)?NOT?NULL, ???from_date??date?NOT?NULL, ???to_date??date?DEFAULT?NULL); insert?into?titles_test?values ('1',?'10001',?'Senior?Engineer',?'1986-06-26',?'9999-01-01'), ('2',?'10002',?'Staff',?'1996-08-03',?'9999-01-01'), ('3',?'10003',?'Senior?Engineer',?'1995-12-03',?'9999-01-01'), ('4',?'10004',?'Senior?Engineer',?'1995-12-03',?'9999-01-01'), ('5',?'10001',?'Senior?Engineer',?'1986-06-26',?'9999-01-01'), ('6',?'10002',?'Staff',?'1996-08-03',?'9999-01-01'), ('7',?'10003',?'Senior?Engineer',?'1995-12-03',?'9999-01-01');

題解

update titles_test set emp_no=replace(emp_no,"10001","10005")

where id=5

http://https://blog.csdn.net/bingguang1993/article/details/80592579/(SQL中的替換函數replace()使用)

5.修改表名

題目:將titles_test表名修改為titles_2017

題解:

RENAME TABLE titles_test to titles_2017;

ALTER TABLE titles_test RENAME TO titles_2017;

6.ADD CONSTRAINT FOREIGN KEY 創建外鍵約束

創建外鍵語句結構:

ALTER TABLE <表名>

ADD CONSTRAINT FOREIGN KEY?(<列名>)

REFERENCES <關聯表>(關聯列)

eg:alter table audit

add constraint FK_ID foreign key (emp_no)

REFERENCES employees_test(id)

總結

以上是生活随笔為你收集整理的牛客网SQL篇刷题篇(38-47)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。