SQL基础知识总结
1.database
保存有组织的数据的容器,通常就是一个文件或者一组文件
2.table
某种特定类型数据的结构化清单
一个数据库内的每个表都有唯一表名
3.column
每列存储表的某一种的特定信息
4.row
行可以称为一条数据库记录
5.primary key
一列或者一组列,其值能够唯一标识表中每一行
基础语句:
创建表
CREATE TABLE table_name(column_name datatype, colume_name2 datatype,...,colume_nameN datatype)
- table_name:是表的名称
-
column_name1, column_name2 ….:是列的名称
-
datatype:是列的数据类型,比如char、date、number等
例如创建employee表,语句可以为:
CREATE TABLE employee ( id number(5), name char(20), dept char(10), age number(2), salary number(10), location char(10));
更新表
更新表使用alter table语句
例如:
如需在表中添加列,请使用下面的语法: ALTER TABLE table_name ADD column_name datatype 如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式): ALTER TABLE table_name DROP COLUMN column_name 要改变表中列的数据类型,请使用下面的语法: ALTER TABLE table_name MODIFY COLUMN column_name datatype
重命名表
ALTER TABLE old_name TO new_name
删除表
DROP TABLE table_name
检索单个列
SELECT column_name FROM table_name;
检索多个列
SELECT column_1, column_2, column_3 FROM table_name;
检索所有列
SELETE * FROM table_name;
限制结果
如果需要限制结果输出的条数,可以使用limit<数字>来表示限制的行数
排序搜索数据
如果需要对检索出来的数据进行排序
order by <column_name> asc/desc; asc表示升序排序 desc表示降序排序
通常order by语句通常位于查询语句的最后面。
过滤数据
使用where子句来对查询出的结果进行过滤,得到我们所需要的数据
selete <column_name> from <table_name> where <过滤条件>;
汇总数据
聚合函数:用来数据汇总
- avg()
- min()
- max()
- count()
- sum()
分组数据
创建分组
select <column_name> from <table_name> where <过滤条件> group by <column_name> having <过滤条件> order by <column_name><排序方式>
where是行级过滤,having是组级过滤,where子句中不能使用聚合函数
内连接
内连接就是得出两个表的交集部分
SELECT 查询字段 FROM 表1 [as] 别名 [INNER] JOIN 表2 [as] 别名 ON 表1.关系字段 = 表2.关系字段
左连接
左连接就是左边表的记录要全部显示出来,右表只有和左表匹配到的记录才进行显示
SELECT 查询字段 FROM 表1 [as] 别名 LEFT JOIN 表2 [as] 别名 ON 表1.关系字段 = 表2.关系字段
插入数据
insert into <table_name>(column_name1,column_name2,...) values (data1...) #表名后的列名不是严格要求的,但这样会更安全
插入检索出的数据
insert into <table_name>(column_name) select <column_name> from <table_name>;
例:
#表A插入表B的语句 #若两表字段一致: insert into table_b select * from table_a #若只导入指定字段: insert into table_b(word1,word2) select word1,word2 from table_a #字段顺序必须一致
复制表
create table copytable as select * from <table_name>;
更新表
update<table_name> set<column_name> = ... where <过滤条件>;
Update 和 Alter的区别
1、Alter:修改表结构
例如:增加表的字段
Alter table test Add(id,int)
2、Update:修改表数据
例如:修改字段id列的值
update test set id=2;
删除数据
delete from <column_name> where <过滤条件>;
例子:
1.SQL查询平均工资>2000的部门名称并显示平均工资
select [department_name],avg([salary]) from [tablename] group by [department_name] having avg([salary]) >2000 [department_name] 是列名 部门名称 [salary] 是列名 工资 [tablename] 是表名 是查的那个表
2.SQL查询一个表中重名的人
selete myname, count(*) from table_name group by myname having count(*)>2 table_name 是表名 myname 是人名 若不添加having子句,则是统计各名字的数量
概念理解
什么是存储过程?有哪些优缺点?
存储过程就像我们编程语言中的函数一样,封装了我们的代码(PLSQL、T-SQL)
存储过程的优点
- 能够将代码封装起来
- 保存在数据库之中
- 让编程语言进行调用
- 存储过程是一个预编译的代码块,执行效率比较高
- 一个存储过程替代大量T_SQL语句 ,可以降低网络通信量,提高通信速率
存储过程的缺点:
- 每个数据库的存储过程语法几乎都不一样,十分难以维护(不通用)
- 业务逻辑放在数据库上,难以迭代
什么是视图?
从数据库系统内部来看,视图是由一张或多张表中的数据组成的,从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图。
例如查询,插入,修改,删除操作等,但插入、修改、删除等的操作其实对于原始数据表的操作。
视图的作用:
1、视图隐藏了底层的表结构,简化了数据访问操作,客户端不再需要知道底层表的结构及其之间的关系。
2、视图提供了一个统一访问数据的接口。(即可以允许用户通过视图访问数据的安全机制,而不授予用户直接访问底层表的权限)
3、从而加强了安全性,使用户只能看到视图所显示的数据。
4、视图还可以被嵌套,一个视图中可以嵌套另一个视图
什么是索引【Index】
- 是一种快速查询表中内容的机制,类似于新华字典的目录
- 运用在表中某个些字段上,但存储时,独立于表之外
索引优缺点:
- 索引加快数据库的检索速度
- 索引降低了插入、删除、修改等维护任务的速度(虽然索引可以提高查询速度,但是它们也会导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引)
- 唯一索引可以确保每一行数据的唯一性,通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能
- 索引需要占物理和数据空间
索引分类:
- 唯一索引:唯一索引不允许两行具有相同的索引值
- 主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的,并且不能为空
- 聚集索引(Clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个
- 非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个
超键、候选键、主键、外键分别是什么?
- 超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。
- 候选键(候选码):是最小超键,即没有冗余元素的超键。
- 主键(主码):数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。
- 外键:在一个表中存在的另一个表的主键称此表的外键。
参考
https://www.cnblogs.com/numpycomcn/p/11802714.html