面试笔试整理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
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值