数据库知识点整理一

来源:互联网 发布:志强软件 编辑:程序博客网 时间:2024/04/29 01:20

1、sql left join right join inner join full join的使用情况,以及连接查询的注意点?

其实就是一个外连接的问题。

leftjoin返回的是左表中的所有记录以及右表中的连接词相等的例子

          A 表         B表


右表中不存在相关记录时返回的为NULL


同理rightjoin 返回的差不多也是这个意思就不举demo了。。。。

Ineerjoin 只返回连接词相等的记录行数也就是

full join是把两张表完全连接起来查询


    这些都是很简单的概念,但是当时我被问到平时都用什么的时候我完全就懵逼了。。。当时被套住了一下就被看出了我没有什么实际经验(其实是蠢)这种问题很明显应该回答根据实际情况来用,然后和面试官说一下这几个连接的具体使用例子。


    顺便在提一下连接查询的注意点:

                1、连接查询时,大表在前,小表在后

                2、不使用表别名,通过字段前缀区分不同表中的字段查询条件中的限制条件要写在表连接条件前

                3、尽量使用索引的字段做为查询条件

2、设计表时,如何选择char、nvarchar、varchar 谈谈你的理解?

三者都是字符型

     char是定长的,比如说一个字段char(5),存了2个字符,但是它还是占5个字符的空间,它会自动用空格填充,因此比较适合固定长度的字段。

     varchar是可变长度的非Unicode字符,不支持汉字一个字符一个字节,nvarchar是可变长度的Unicide字符,支持汉字,一个字符两个字节,最大字节数都是8000

     与char相比varchar以及nvarchar,varchar、nvarchar更加精准不会有填充的空格,但是速度比char慢,因此设计表时,根据字段实际情况来进行选择。

顺便提一下text、ntext 前面带n的都表示支持Unicode字符,text主要用来存储大批的文本数据,不过推荐使用varchar来存储,如果超过长度在考虑text,因为效率低,未来和image类型一样可能会在未来版本被删除掉,尽量避免使用。

3、谈一下用户临时表和系统临时表的区别,什么时候需要使用临时表?

     用户临时表:create table #xx(ID int, IDValues int)
    系统临时表:create table ##xx(ID int, IDValues int)

     区别在于用户临时表只针对表用户,进程消失就销毁,系统临时表针对所有连接的用户,所有连接用户都断开才销毁。

     临时表主要用于在存储过程中,对select到的数据进行一个临时的存储,可以给多个存储过程使用,也可以替代游标的作用,因为游标实在效率太低了。。。

4、分享下一个用的挺多的SQL查询行转列,列转行,就直接开门了。。

SQL行转列DEMO ——点这里


1 0