订单表 tblOrder
create table tblOrder( F_OrderID int primary key, F_CategoryID int, F_OrderName varchar(50) ); 订单类别表 tblCategory create table tblCategory( F_CategoryID int primary key, F_CategoryName Varchar(50) );有两表结构图
(1) F_OrderID 字段后面的PK是代表什么?Varchar(50)与Char(50)、Nvarchar(50)有什么区别? PK 意思是 主键. 也就是 一个 主键,在这个表里面, 最多只能找到 一行数据. Varchar(50) 可变长字符串, 长度为 50字节。 Char(50) 固定长度字符串, 长度为 50字节。 假如内容不足50,会自动补空格 Nvarchar(50) 可变长字符串, 长度为 50字 == 100字节。 (2) 请编写一条Sql语句,列出所有F_OrderName以abc开头的并且F_CategoryName以xyz结尾的所有订单,并以F_CategoryName升序F_OrderName降序排列。select * from tblOrder
where F_OrderName like 'abc%' and F_OrderName like '%xyz' order by F_CategoryName ASC, F_OrderName DESC ;在这两个字段上建立索引是不是会加快查询速度?
对于 普通的索引,在 F_OrderName 上面建索引,可加快。
在 F_CategoryName 上面建, 无效果。 (Oracle 的一种特殊的反向索引,可以加快) (3) 请编写一条Sql语句,列出tblOrder表第31到第40条记录,F_OrderID为主键,注:F_OrderID可能是不连续的。写出两种以上你认为性能最好的sql语句。 SELECT TOP 10 * FROM ( SELECT TOP 40 * FROM tblOrder ORDER BY F_OrderID ) subQuery ORDER BY F_OrderID DESCSELECT
* FROM ( SELECT TOP 40 * , ROW_NUMBER() OVER(ORDER BY F_OrderID ) AS no ) FROM tblOrder ORDER BY F_OrderID ) subQuery WHERE no between 31 and 40 (4) sql语句里inner join,left join,right join的区别 A inner join B 意思是, A 与 B 表, 大家都有的数据, 才检索出来。 A left join B 意思是, A 与 B 表, 大家都有的数据, 以及 A 有 B没有的, 都检索出来。 A right join B 意思是, A 与 B 表, 大家都有的数据, 以及 A没有 B有的, 都检索出来。A full join B 意思是, A 与 B 表, 大家都有的数据, 以及 A 有 B没有的,A没有 B有的, 都检索出来。