面試筆試整理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