笑话大全网 - 爆笑笑话 - SQL数据库 请高手解答一下问题 实在不会做。本人初学者

SQL数据库 请高手解答一下问题 实在不会做。本人初学者

基本都是很基础的语句,最后的区别,网上好多专门介绍这些的文章。

1. select a.userid, a.username, isnull(b.warename, '无物品') as warename

from u_user a left join u_ware b on a.userid = b.userid

2. select b.warename, isnull(a.username, '无人认领') as username

from u_user a right join u_ware b on a.userid = b.userid

3. select isnull(a.sex, '未知'), sum(b.amt) as sum_amt

from u_user a right join u_ware b on a.userid = b.userid

group by isnull(a.sex, '未知')

4. insert into u_user values ('105', '小张', '男')

重复上面三个步骤,直接使用上面三个的语句查询。

5. 1) delete from u_ware where warename = '杯子'

2) update u_ware set warename = '组合床' where warename = '床'

6. select warename, amt * 0.1 as keep_amt

from u_ware

union all

select '合计', sum(amt * 0.1) from u_ware

7. select substring(convert(varchar(10),getdate(),120),1,4) + '年' + substring(convert(varchar(10),getdate(),120),6,2) + '月' + substring(convert(varchar(10),getdate(),120),9,2) + '日'

8. 利用rand()函数,这个函数随机生成0到1的浮点数,那么一周7天,乘以7,就取出1到7之间的浮点数了。如果是一周两天,可以把一周7天分为两部分,前4天一部分,后三天一部分,那么这个随机函数乘以的乘数,就分别有两个,一个是4,一个是3.

select cast(ceiling(rand() * 4) as int) as num1, 4 + cast(ceiling(rand() * 3) as int) as num2

9. 假设某人生日是1989-12-10

select datediff(d, convert(datetime, '1989-12-10', 120), getdate())

10.

CHAR/VARCHAR:这个两个都是字符类型,不同的是,CHAR类型是定长的,而VARCHAR类型是变长的。CHAR(10)和VARCHAR(10),这样的字段存储数据,CHAR(10)的字段,长度是固定的10,而VARCHAR(10),实际长度根据数据来确定,是10只是规定了最长只能是10.

CHAR/NCHAR CHAR类型是按照字节储存,而NCHAR类型是按照字符存储。比如对于中文,CHAR(10),最多只能存储5个汉字,而NCHAR(10),最多可以 存储10个汉字。

LEN/DATALENGTH :这个看看数据库中对二者就解释就知道了。

LEN:返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。

DATALENGTH :返回任何表达式所占用的字节数。

表/视图: 数据库中的数据都是存储在表中的,而视图是基于表的数据创建出来的一个集合,视图的创建来源于表和视图,其实就是把SELECT语句查询固化了。

触发器/存储过程:

触发器是自动的:它们在对表的数据作了任何修改之后立即被激活。

存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数来执行它,存储过程并不是自动的,需要用户调用。

存储过程/函数:

函数有限制只能返回一个标量,而存储过程可以返回多个。并且函数是可以嵌入在SQL中使用的,可以在SELECT等SQL语句中调用,而存储过程不行。

LEFT JOIN/OUT JOIN

LEFT JOIN/INNER JOIN :left join是左外连接,以连接左边的表为主表,语句查询的结果,主表的结果都会显示,而右边连接的表的数据,连接条件不成立,会补空。参照上面1,2,3的语句。

inner join,是全连接,只能查询连接条件成立的所有数据。

UNION/UNION ALL:UNION ALL只实现两个查询的联合,而UNION在UNION ALL的基础上,会去掉重复数据。UNION的查询效率要低。

SUM/COUNT:而者都是聚合函数,SUM的是求和,而COUNT是求符合条件的总行数

IN/EXISTS :二者好多时候可以实现相同的结果。在语句中,IN前边应该是一个字段,后边要求是一个和前边字段或变量相同类型的数据集合,这个集合可以通过SELECT得到,而EXISTS后边是一个SELECT语句,而这个语句的WHERE条件是传入外部主查询的字段作为连接,如果连接成立,那么就是符合条件。否则不符合条件。

比如 SELECT * FROM STUDENT WHERE ID IN (SELECT ID FROM SCORE)

等同: SELECT * FROM STUDENT WHERE EXISTS (SELECT 1 FROM SCORE WHERE SCORE.ID = STUDENT.ID)

执行时,IN如果后边是查询,需要执行完查询,而EXISTS,则遇到第一个符合查询条件的结果就会自动退出查询,所以效率要高很多。