SQL语言总结

           SQL语言是高级的结构化查询语言。用哈哈使用SQL语句进行数据操做时,只须要提出“作什么”而没必要指明“怎么作”,具体的执行过程有系统自动完成,大大减轻了用户的负担。SQL语言是数据库服务器和客户端之间的重要沟通手段,用于存取数据,以及查询,更新和管理关系型数据库系统。html

 SQL支持类别的命令:
          1.数据定义语言(DDL):CREATE(建立),ALTER(更改),TRUNCATE(截断)和DROP(删除)命令。mysql

          2.数据操纵语言(DML):INCERT(插入),SELECT(选择),DELETE(删除),UPDATE(更新)命令。面试

          3.事务控制语言(RCL):COMMIT(提交),SAVEPOINT(保存点)和ROLLBACK(回滚)命令。sql

          4.数据控制语言(DCL):GRANT(授予),和REVOKE('回收)命令。数据库

SQL操纵符:
         1.算数操纵符:查询语句中要执行基于数值的计算,能够在SQL命令中使用算数表达式。算数表达式由UMBER数据类型的列名,数值常量和链接它们的算术操做符组成。算术操做符包括  +(加),—(减),*(乘),/(除)。安全

         2.比较操做符:比较操做符用于比较两个表达式的值。比较操做符包括 =,!=,<,>,<=,>=,BETWEEN.....AND(检查是否在两个值之间),IN(与列表中的值相匹配),LIKE(匹配字符模式)和 IS NULL(检查是否为空)。 服务器

        3.逻辑操做符:逻辑操做符用于组合多个比较运算的结果以生成一个真或假的结果。逻辑操做符包括AND(与),OR(或),NOT(非)。网络

         4.集合操做符:集合操做符将两个查询的结果组合成一个结果集。能够在SQL中使用下面的集合操做符来组合多个查询中的行。⑴UNION(联合)⑵UNION ALL(联合全部)⑶INTERSECT(交集)⑷MINUS(减集)。   数据结构

        (注意  :使用集合操做符链接起来的SELECT语句中的列遵循如下规则1.经过集合操做符链接的各个查询具备相同的列数,并且对应列的数据类型必须兼容。2.这种查询不该该含有LONG类型的列。列标题来自第一个SELECT语句  )。并发

SQL函数:
      1.转换函数:将值从一种数据类型转换为另外一种数据类型,经常使用的转换函数有:⑴TO_CHAR转换成字符串类型⑵TO_DATE转换成日期类型⑶TO_NUMBER转换成数值类型。

        2.其余函数:字符函数,日期函数,数值函数,转换函数,单行函数。经常使用的其余函数 ⑴NVL⑵NVL2⑶DECODE。

        3.分析函数:是对一组查询结果进行运算,而后得到结果。分析函数很是相似于聚会函数,区别在于分析函数每一个组返回多行,聚合函数返回一行。

         ⑴ROW_NUMBER函数:返回一个惟一的值,当遇到相同数据时,排名按照记录集中记录的顺序依次递增。

         ⑵DENSE_RANK函数:返回一个惟一的值,当遇到相同数据时,全部相同数据排名都是一个样的。

         ⑶RANK函数:返回一个惟一的值,当遇到相同数据时,全部相同数据排名都是同样的,同时会在最后一条相同记录和下一条不一样记录的排名之间空出排名。
---------------------

SQL语言经常使用语句/关键字:
select distinct column_name,column_name from table_name;distinct 关键词用于返回惟一不一样的值。
where条件:包含的运算符where 1=1(where 1=1 是为了不where 关键字后面的第一个词直接就是 “and”而致使语法错误,为了后面的条件)和防止sql注入
算数 + - * / %
比较运算符= !=/<> > < >= <=
逻辑运算符not and or
特殊条件 name is null/is not null、age between 1500 and 3000、age in(5000,3000,1500)
name like '%M%'
高级查询
分组集 grouping sets()
rollup() group by子句的扩展
intersect 查询相似union all不重复的行  交集
minus 相似intersect 减集
all运算符用于将值与另外一个值集中的全部值进行比较。
any运算符用于根据条件将值与列表中的任何适用值进行比较。
EXISTS测试子查询是否包含任何行,返回true。 不然它返回false
order by asc/desc 排序
group by 分组
HAVING 筛选分组后的各组数据
事务控制
commit 保存更改
rollback 回滚更改
savepoint 回滚事务组建立点
set transaction 事务放置的名称
select top(10) * from user sqlserver
select * from user limit 5,10 5表明第几条数据以后开始,10表明差出几条结束。也能够直接写10显示10条 mysql
select * from (select * from test order by statedate desc ) where rownum<=10 先排序,再查询前10条 oracle
select name as Name from user SQL别名

inner join/left join(从左表返回全部行,即便右表中没有匹配)
/right join/outer join/full join/cross join(cross join子句没有链接条件)
union联合、若是容许重复的值,使用 UNION ALL

insert into table2 select * from table1 复制表数据,将数据插入到已存在的表中 mysql
select * into table2 from table1 sqlserver
create table table1 as select * from table mysql

alter约束
not null 非空约束 unique惟一约束 primary key 主键约束
foreign key 外键约束 check列中的值符合指定条件 检查约束
default 没赋值时默认值

create index 建立索引容许重复的值,通常用于较大数据量表
create unique index 惟一索引不容许重复的值
drop删除表 一次类推能够删库、索引、视图、存储过程、触发器
truncate只删除表数据
show table 查看全部表 以此类推能够查看删库、索引、视图、存储过程、触发器

alter table 用于在已有表中添加、删除、修改列。
alter table user add column state
alter table user drop column state
alter table user modify column state datetype改变表中列的数据类型 mysql

auto_increment mysql主键自增
identity(1,1)sqlserver主键自增 oracle 则是建立序列
create view 建立视图

Date函数
now()返回当前的日期和时间
getdate()返回当前的日期和时间
date类型 - 格式:YYYY-MM-DD
datetime类型 - 格式:YYYY-MM-DD HH:MM:SS
avg()平均值 count()行数 first() last()
max() min() sun()
len()返回长度 subString()截取字符,mid()截取字符mysql format()格式化

---------------------

 

SQL基础教程推荐博文:https://blog.csdn.net/w_y2010/article/details/80399708
SQL学习例题推荐博文:https://www.jianshu.com/p/476b52ee4f1b
SQL优化推荐博文:https://www.cnblogs.com/yunfeifei/p/3850440.html
SQL优化推荐博文:https://www.cnblogs.com/wind-june/p/9638356.html

面试题:
一、什么是存储过程?有哪些优缺点?

存储过程是一些预编译的SQL语句。

更加直白的理解:存储过程能够说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法同样实现一些功能(对单表或多表的增删改查),而后再给这个代码块取一个名字,在用到这个功能的时候调用他就好了。

存储过程是一个预编译的代码块,执行效率比较高
一个存储过程替代大量T_SQL语句 ,能够下降网络通讯量,提升通讯速率
能够必定程度上确保数据安全

二、索引是什么?有什么做用以及优缺点?

索引是对数据库表中一或多个列的值进行排序的结构,是帮助MySQL高效获取数据的数据结构

你也能够这样理解:索引就是加快检索表中数据的方法。数据库的索引相似于书籍的索引。在书籍中,索引容许用户没必要翻阅完整个书就能迅速地找到所须要的信息。在数据库中,索引也容许数据库程序迅速地找到表中的数据,而没必要扫描整个数据库。

MySQL数据库几个基本的索引类型:普通索引、惟一索引、主键索引、全文索引

索引加快数据库的检索速度
索引下降了插入、删除、修改等维护任务的速度
惟一索引能够确保每一行数据的惟一性
经过使用索引,能够在查询的过程当中使用优化隐藏器,提升系统的性能
索引须要占物理和数据空间

三、什么是事务?

事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操做序列,这些操做要么都执行,要么都不执行,它是一个不可分割的工做单位。事务是数据库维护数据一致性的单位,在每一个事务结束时,都能保持数据一致性。

四、数据库的乐观锁和悲观锁是什么?

乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。

悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操做
乐观锁:假设不会发生并发冲突,只在提交操做时检查是否违反数据完整性。

五、简单说一说drop、delete与truncate的区别

SQL中的drop、delete、truncate都表示删除,可是三者有一些差异

delete和truncate只删除表的数据不删除表的结构
速度,通常来讲: drop> truncate >delete
delete语句是dml,这个操做会放到rollback segement中,事务提交以后才生效;
若是有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操做当即生效,原数据不放到rollback segment中,不能回滚. 操做不触发trigger.

六、drop、delete与truncate分别在什么场景之下使用?

再也不须要一张表的时候,用drop
想删除部分数据行时候,用delete,而且带上where子句
保留表而删除全部数据的时候用truncate

七、 超键、候选键、主键、外键分别是什么?

超键:在关系中能惟一标识元组的属性集称为关系模式的超键。一个属性能够为做为一个超键,多个属性组合在一块儿也能够做为一个超键。超键包含候选键和主键。

候选键:是最小超键,即没有冗余元素的超键。

主键:数据库表中对储存数据对象予以惟一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。

外键:在一个表中存在的另外一个表的主键称此表的外键。

八、什么是视图?以及视图的使用场景有哪些?

视图是一种虚拟的表,具备和物理表相同的功能。能够对视图进行增,改,查,操做,试图一般是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得咱们获取数据更容易,相比多表查询。

九、说一说三个范式。

第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。
第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的状况),也即全部非关键字段都彻底依赖于任意一组候选关键字。
第三范式(3NF):在第二范式的基础上,数据表中若是不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如 果存在"A → B → C"的决定关系,则C传递函数依赖于A。所以,知足第三范式的数据库表应该不存在以下依赖关系: 关键字段 → 非关键字段 x → 非关键字段y

varchar与char的区别
char是一种固定长度的类型,varchar则是一种可变长度的类型

十、什么是内联接、左外联接、右外联接?

l 内联接(Inner Join):匹配2张表中相关联的记录。
l 左外联接(Left Outer Join):除了匹配2张表中相关联的记录外,还会匹配左表中剩余的记录,右表中未匹配到的字段用NULL表示。
l 右外联接(Right Outer Join):除了匹配2张表中相关联的记录外,还会匹配右表中剩余的记录,左表中未匹配到的字段用NULL表示。
在断定左表和右表时,要根据表名出如今Outer Join的左右位置关系。

十一、什么是游标?

游标其实是一种能从包括多条数据记录的结果集中每次提取一条记录进行处理的机制。
游标的使用步骤:

定义游标:declare cursor 游标名称 for select查询语句 [for {readonly|update}]
打开游标:open cursor
从游标中操做数据:fetch… … current of cursor
关闭游标:close cursor
十二、触发器的做用?

答:触发器是一中特殊的存储过程,主要是经过事件来触发而被执行的。它能够强化约束,来维护数据的完整性和一致性,能够跟踪数据库内的操做从而不容许未经许可的更新和变化。能够联级运算。如,某表上的触发器上包含对另外一个表的数据操做,而该操做又会致使该表触发器被触发。--------------------- 原文:https://blog.csdn.net/qq_38977097/article/details/88532746

相关文章
相关标签/搜索