1. 程式人生 > >面試筆試整理7:SQL問題整理

面試筆試整理7:SQL問題整理

SQL的問題就是四大類:增、刪、改、查。要使用到的命令通常有:SELECT、UPDATE、DELETE、INSERT INTO、ALTER、DROP、IN、BETWEEN、DISTINCT、UNION、HAVING、WHERE、ON、EXISTS等等。
下面主要按照上面說的從建立表開始、到四大類、以及常用的結構和命令解釋幾個部分。這裡語句都是基於SQL Server的。

一、建立資料表
1、從已知表建立

SELECT vale1, value2 into Table2 from Table1

這個要求目標表Table2不存在
2、建立空表
(1) 普通空表

CREATE
TABLE Persons ( Id_P int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) )

(2)帶有主鍵約束的空表

CREATE TABLE Persons
(
Id_P int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

(3)帶有外來鍵約束的空表

CREATE
TABLE Orders ( Id_O int NOT NULL PRIMARY KEY, OrderNo int NOT NULL UNIQUE, Id_P int FOREIGN KEY REFERENCES Persons(Id_P) )

3、表已經存在情況下建立約束
首先要知道SQL的常用約束:NOT NULL約束、DEFAULT約束(預設值)、UNIQUE約束(不重複)、主鍵約束(資料表唯一標識 PRIMARY KEY)、外來鍵約束(唯一標識其它資料表 FOREIGN KEY)、索引約束、CHECK約束(用於限制列中的值)。
(1)建立索引
索引的作用:用來加速SELECT和WHERE的速度,但是同時降低了UPDATE和INSERT資料的速度。

設定一列為索引
CREATE INDEX index_name ON Tabel_name(col_name)
建立唯一索引
CREATE UNIQUE INDEX index_name ON table_name (column_name)

(2)建立col_name為主鍵

ALTER TABLE Person ADD PRIMARY KEY (col_name)

(3)建立外來鍵

ALTER TABLE Person ADD FOREIGN KEY (col_name1) REFERENCES Persons(col_name2)

二、增加資料
1、手動新增資料

INSERT INTO Customes(value1, value2.....) VALUES(v1, v2 ......)

2、從其他表中新增資料(沒有values了)

INSERT INTO table2 SELECT * FROM table1

3、增加列

ALTER TABLE table_name ADD column_name datatype

三、刪除表、資料和索引等
刪除常用的命令就是DELETE、DROP和ALTER
1、刪除行

DELETE FROM Person WHERE LastName = 'Wilson' 

刪除所有行

DELETE FROM table_name

2、刪除資料庫

DROP DATEBASE db1

3、刪除表

DROP TABLE tb1

4、刪除索引

DROP INDEX table_name.index_name

5、刪除列
注意:刪除列之前該列所有的索引和約束必須首先刪除

ALTER TABLE table1 DROP COLUMN col1

6、刪除各種約束

ALTER TABLE Persons DROP CONSTRAINT uc_PersonID

三、修改表
修改表中的資料

UPDATE Table1 SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'

四、查詢常用
查詢說簡單也簡單,但是有的時候比較需要思維,一定記住WHERE中不能用函式,只可以在SELECT中或者是HAVING中使用函式。

查詢中經常會用到COUNT(*),MAX(),MIN(),IN,EXISTS,LIKE,BETWEEN..AND、IS NULL、case 等關鍵字和函式。

五、問題
1、UNION和UNION ALL和 JOIN區別
UNION是兩張表的記錄資料(要求欄位一致)縱向合併形成新的記錄集,但是對於重複資料只記錄一個
UNION ALL 忽略重複資料
JOIN是指將兩個表進行橫向的連線。
2、為什麼索引能夠加速
3、檢視VIEW的作用
首先建立檢視的方式是

CREAE VIEW view_name AS SELECT ...

好處是用起來簡單,相當於一個虛擬化的表,不需要實際儲存資料。

六、例子:
1、求百分比的問題:leecode 262
這個遇到了好幾次

SELECT Request_at as Day, 
round(sum(case when t.Status like 'cancelled_%' then 1 else 0 end) / count(*),2) 'cancellation Rate'
from Trips t join Users u On t.Client_Id = u.Users_Id 
where t.Request_at between '2013-10-01' and '2013-10-03' and u.Banned='No'
group by t.Request_at