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