數(shù)據(jù)庫(kù)SQL實(shí)戰(zhàn)|SQL答案集合及解析(31-40)

疟约客數(shù)據(jù)庫(kù)SQL實(shí)戰(zhàn)題(31-40題)

31蜓肆、獲取select * from employees對(duì)應(yīng)的執(zhí)行計(jì)劃

牛客這個(gè)用的是SQLite舀奶,在SQLite數(shù)據(jù)庫(kù)中暑竟,可以用 "EXPLAIN" 關(guān)鍵字或 "EXPLAIN QUERY PLAN" 短語(yǔ),用于描述表的細(xì)節(jié)育勺。
參考:诺纾客討論區(qū)

explain select * from employees;

32、將employees表的所有員工的last_name和first_name拼接起來(lái)作為Name涧至,中間以一個(gè)空格區(qū)分

CREATE TABLE employees ( emp_no int(11) NOT NULL,
birth_date date NOT NULL,
first_name varchar(14) NOT NULL,
last_name varchar(16) NOT NULL,
gender char(1) NOT NULL,
hire_date date NOT NULL,
PRIMARY KEY (emp_no));

答案

不同數(shù)據(jù)庫(kù)連接字符串的方法不完全相同腹躁,MySQL、SQL Server南蓬、Oracle等數(shù)據(jù)庫(kù)支持CONCAT方法纺非,而本題所用的SQLite數(shù)據(jù)庫(kù)只支持用連接符號(hào)"||"來(lái)連接字符串。
參考:抛阜剑客討論區(qū)

select last_name||" "||first_name as Name
from employees

33铐炫、創(chuàng)建一個(gè)actor表,包含如下列信息

列表 類型 是否為NULL 含義
actor_id smallint(5) not null 主鍵id
first_name varchar(45) not null 名字
last_name varchar(45) not null 姓氏
last_update timestamp not null 最后更新時(shí)間蒜焊,默認(rèn)是系統(tǒng)的當(dāng)前時(shí)間

答案

create table if not exists actor(
actor_id smallint(5) not null primary key,
first_name varchar(45) not null,
last_name varchar(45) not null,
last_update timestamp not null default(datetime('now','localtime')));

primary key也可以寫在后面倒信,寫primary key(actor_id)。在last_update末尾加上DEFAULT設(shè)置默認(rèn)值泳梆,默認(rèn)值為(datetime('now','localtime'))鳖悠,即獲得系統(tǒng)時(shí)間。

34优妙、批量插入數(shù)據(jù)

對(duì)于表actor批量插入如下數(shù)據(jù)

CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')))
actor_id first_name last_name last_update
1 PENELOPE GUINESS 2006-02-15 12:34:33
2 NICK WAHLBERG 2006-02-15 12:34:33

答案

利用values:

insert into actor
values(1,'PENELOPE','GUINESS','2006-02-15 12:34:33'),
(2,'NICK','WAHLBERG','2006-02-15 12:34:33');

利用UNION SELECT批量插入:

insert into actor
select 1,'PENELOPE','GUINESS','2006-02-15 12:34:33'
union select 2,'NICK','WAHLBERG','2006-02-15 12:34:33';

35乘综、批量插入數(shù)據(jù),不使用replace操作

對(duì)于表actor批量插入如下數(shù)據(jù),如果數(shù)據(jù)已經(jīng)存在套硼,請(qǐng)忽略卡辰,不使用replace操作。

CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')))
actor_id first_name last_name last_update
3 'ED' 'CHASE' '2006-02-15 12:34:33'

答案

在SQLite中邪意,insert or ignore表示如果不存在則插入九妈,如果存在則忽略;insert or replace表示如果不存在則插入雾鬼,如果存在則替換萌朱。

insert or ignore into actor
values(3, 'ED', 'CHASE', '2006-02-15 12:34:33')
insert or replace into actor
values(3, 'ED', 'CHASE', '2006-02-15 12:34:33')

在MySQL中則是使用insert ingnore和insert replace。

36策菜、創(chuàng)建一個(gè)actor_name表

對(duì)于如下表actor晶疼,其對(duì)應(yīng)的數(shù)據(jù)為:

actor_id first_name last_name last_update
1 PENELOPE GUINESS 2006-02-15 12:34:33
2 NICK WAHLBERG 2006-02-15 12:34:33

創(chuàng)建一個(gè)actor_name表酒贬,將actor表中的所有first_name以及l(fā)ast_name導(dǎo)入改表。 actor_name表結(jié)構(gòu)如下:

列表 類型 是否為NULL 含義
first_name varchar(45) not null 名字
last_name varchar(45) not null 姓氏

答案

創(chuàng)建表和插入數(shù)據(jù)合并在一條語(yǔ)句中:

create table actor_name as
select first_name, last_name from actor;

先創(chuàng)建表再插入數(shù)據(jù):

create table actor_name(
first_name varchar(45) not null,
last_name varchar(45) not null
);
insert into actor_name
select first_name, last_name from actor;

37翠霍、對(duì)first_name創(chuàng)建唯一索引uniq_idx_firstname

針對(duì)如下表actor結(jié)構(gòu)創(chuàng)建索引:

CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')))

對(duì)first_name創(chuàng)建唯一索引uniq_idx_firstname锭吨,對(duì)last_name創(chuàng)建普通索引idx_lastname

答案

create unique index uniq_idx_firstname on actor(first_name);
create index idx_lastname on actor(last_name);

38、針對(duì)actor表創(chuàng)建視圖actor_name_view

只包含first_name以及l(fā)ast_name兩列寒匙,并對(duì)這兩列重新命名零如,first_name為first_name_v,last_name修改為last_name_v:

CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')))

答案

create view actor_name_view as
select first_name as first_name_v, last_name as last_name_v
from actor;
create view actor_name_view (first_name_v, last_name_v) as
select first_name, last_name
from actor;

create view ... as ...創(chuàng)建視圖蒋情。

39埠况、針對(duì)上面的salaries表emp_no字段創(chuàng)建索引idx_emp_no

針對(duì)salaries表emp_no字段創(chuàng)建索引idx_emp_no耸携,查詢emp_no為10005, 使用強(qiáng)制索引棵癣。

CREATE TABLE salaries (
emp_no int(11) NOT NULL,
salary int(11) NOT NULL,
from_date date NOT NULL,
to_date date NOT NULL,
PRIMARY KEY (emp_no,from_date));

答案

select * from salaries indexed by idx_emp_no where emp_no=10005

參考:索引
數(shù)據(jù)庫(kù)的索引問(wèn)題就是查找問(wèn)題。數(shù)據(jù)庫(kù)索引夺衍,是數(shù)據(jù)庫(kù)管理系統(tǒng)中一個(gè)排序的數(shù)據(jù)結(jié)構(gòu)狈谊,以協(xié)助快速查詢、更新數(shù)據(jù)庫(kù)中表的數(shù)據(jù)沟沙。索引的實(shí)現(xiàn)通常使用B樹和變種的B+樹(mysql常用的索引就是B+樹)河劝。
除了數(shù)據(jù)之外,數(shù)據(jù)庫(kù)系統(tǒng)還維護(hù)為滿足特定查找算法的數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)以某種方式引用數(shù)據(jù).這種數(shù)據(jù)結(jié)構(gòu)就是索引。
在MySQL中為force index:

select * from salaries force index (idx_emp_no) where emp_no = 10005

40矛紫、在last_update后面新增加一列名字為create_date

存在actor表赎瞎,包含如下列信息:

CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')));

現(xiàn)在在last_update后面新增加一列名字為create_date, 類型為datetime, NOT NULL,默認(rèn)值為'0000 00:00:00'颊咬。(這里的默認(rèn)值寫的有問(wèn)題务甥,默認(rèn)值為'0000-00-00 00:00;00'才能通過(guò))

答案

alter table actor 
add column create_date datetime not null default '0000-00-00 00:00:00'

其中的column可以省略,not null 和default可以交換位置喳篇,default值可以加括號(hào)敞临。

結(jié)尾

如果您發(fā)現(xiàn)我的文章有任何錯(cuò)誤,或?qū)ξ业奈恼掠惺裁春玫慕ㄗh麸澜,請(qǐng)聯(lián)系我挺尿!如果您喜歡我的文章,請(qǐng)點(diǎn)喜歡~*我是藍(lán)白絳炊邦,感謝你的閱讀编矾!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市馁害,隨后出現(xiàn)的幾起案子洽沟,更是在濱河造成了極大的恐慌,老刑警劉巖蜗细,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裆操,死亡現(xiàn)場(chǎng)離奇詭異怒详,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)踪区,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門昆烁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人缎岗,你說(shuō)我怎么就攤上這事静尼。” “怎么了传泊?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵鼠渺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我眷细,道長(zhǎng)拦盹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任溪椎,我火速辦了婚禮普舆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘校读。我一直安慰自己沼侣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布歉秫。 她就那樣靜靜地躺著蛾洛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雁芙。 梳的紋絲不亂的頭發(fā)上轧膘,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音却特,去河邊找鬼扶供。 笑死,一個(gè)胖子當(dāng)著我的面吹牛裂明,可吹牛的內(nèi)容都是我干的椿浓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼闽晦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扳碍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起仙蛉,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤笋敞,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后荠瘪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夯巷,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赛惩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了趁餐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喷兼。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖后雷,靈堂內(nèi)的尸體忽然破棺而出季惯,到底是詐尸還是另有隱情,我是刑警寧澤臀突,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站候学,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏盒齿。R本人自食惡果不足惜困食,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一边翁、第九天 我趴在偏房一處隱蔽的房頂上張望硕盹。 院中可真熱鬧,春花似錦瘩例、人聲如沸啊胶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)聘惦。三九已至,卻和暖如春善绎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背禀酱。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剂跟,地道東北人减途。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓酣藻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鳍置。 傳聞我的和親對(duì)象是個(gè)殘疾皇子臊恋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容