主键和外键之间的区别?
答:主键用于唯一标识一个数据表里的元组(一行数据),唯一且不能为空。外键用于与其他表格建立联系用,外键是另一个表的主键。
为什么不支持外键与级联?
答:如果使用外键,在执行delete update等操作的时候,需要检查有没有外键约束,这会增加工作任务与维护的代价;此外,分库分表时,一般会不支持外键。有一个是想保持数据完整性,一个是不一定能保证数据兼容性(两个库一个是MySQL一个是Oracle)。
drop、truncate、delete之间的区别?
答:drop是把整张表删掉,truncate是清空表中的数据但表结构还在,属于数据定义语言(DDL),会马上生效,不会放入rollback segment 中。delete是带条件删除符合要求的行数据,是数据库操作语言(DML)。
SQL语法要点:不区分大小写,多条SQL语句要用:隔开;处理时,空格会被忽略。
SQL分类:
DDL:数据定义语言,负责定义数据结构,代表性的是create、drop、alter
DML:数据操作语言,用于数据库操作,主要的是select、insert、delete等,也被称为CRUD(增删改查)。
TCL:事务控制语言,控制数据库中的事务,如事务开启和回滚等,比如rollback、commit。
DCL:数据控制语言,主要是用来分配权限的。
having VS where
where:对原始数据进行过滤,通常用于groupby之前,不能对聚合函数进行过滤,如 AVG(),COUNT()等。
having:对groupby的子句进行过滤,可以对聚合函数过滤,一般在groupby句子之后。且having和where可以在一个SQL中使用。
on VS where:
表连接时,会根据连接的条件生成一张新的临时表,on就是连接条件的。而where是指在生成的临时表的基础上对数据进行过滤。就是说SQL会根据on条件生成一张临时表,然后用where对临时表上的数据进行过滤。
连接类型:
内连接(inner jion):只有两个表中都有的数据才会被返回。如果是join的话,默认就是内连接。
左外连接(left jion):返回左表中的所有数据,以及右表中与之匹配的数据。
右外连接(right jion):返回右表中的所有数据,以及左表中与之匹配的数据。
全外连接(full jion):返回两个表中的数据,如果其中一个缺失的用null来替代。
self join :自己跟自己连接做查询,其中一个肯定要取别名才能连接。
隐式内连接:没有inner join 关键字,而是用where来判断连接。
SQL面试总结:这部分在面经里面看吧。