SQL语言总结

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

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

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

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

          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

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

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

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

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

2、索引是什么?有什么作用以及优缺点?

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

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

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

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

3、什么是事务?

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

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

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

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

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

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

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

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

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

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

超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。

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

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

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

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

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

9、说一说三个范式。

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

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

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

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

11、什么是游标?

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

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

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

原文地址:https://www.cnblogs.com/Bkxk/p/11050358.html