笔试SQL语句——学习笔记

定义:
create table 表名(列名1 类型 [not null] [,列名2 类型] [not null],···) [其他参数]

 

 

修改:
alter table 表名 add 列名 类型

alter table 表名 rename column 原列名 to 新列名

alter table 表名 alter column 列名 类型 [(宽度) [,小数位]]

alter table 表名 drop column 列名

 

 

删除:
drop table 表名

 

 

建立列的索引:
create [unique] index 索引名 on 基本表名(列名 [次序] [,列名 [次序]] ···) [其他参数]
其中的次序,ASC(升序,缺省) DESC(降序)
drop index

select 目标列 from 表(视图) [where 条件表达式] [group by 列名1] [having 内部函数表达式] [order by 列名 [ASC|DESC]]
若不同表中的列同名,则写为“表名.列名”
其中的目标列可使用以下函数:
count(列名|*),sum(列名),avg(列名),max(列名),min(列名)

记录唯一:distinct 列名1 [,列名2···]

“*”表示任意字符串 “?”表示任意字符

 

 

几个例子:
从学生表中查询班级:select distinct 班级 from 学生

先按班级,再按学号排序:select * from 学生 order by 班级,学号、

select * from 学生 where 条件1 and 条件2 and sth IS [NOT] NULL

where 班级 [NOT] in (’0001‘,’0002‘)等价于 where 班级 =’200101‘ or 班级 =’200202‘

where 出生年份 between 1982 and 1990

查询2001级的学生:
select * from 学生 where 班级 like ’2001%‘
_(下横线)表示任意单个字符
%表示任意字符串

查询课程超过三门的学生:
select 学号 from 成绩单 group by 学号 having count(*)>3

 

 

自动连接:
select 学生.*,成绩.* from 学生,成绩 where 学生.学号=成绩.学号 order by 课程号,分数 DESC
等价于 select 学生.*,课程号,分数 order by 课程号,分数 DESC

 

 

嵌套查询:
select 姓名 from 学生 where 学号 in (select 学号 from 成绩 where 课程号=’C1‘)

求两表的交集或差集(字段相同):
select * from 成绩1 where 学号 [NOT] in (select 学号 from 成绩2 where 成绩1.课程号=成绩2.课程号 and 成绩1.分数=成绩2.分数)

 

 

UNION连接:
select 列名1 from 表1 where 条件1 UNION select 列名2 from 表2 where 条件2
其中列名1和列名2不要求一样,但对应类型和宽度须相同。

 

 

关系除法:
求课程号为C1的学生
select 姓名 from 学生 where exists(select * from 成绩 where 成绩.学号=学生.学号 and 课程号=’C1‘)

 

 

存储过程:
定义总是很抽象。存储过程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL Server)。如果我们通过创建存储过程以及在ASP中调用存储过程,就可以避免将SQL语句同ASP代码混杂在一起

。这样做的好处至少有三个:
    第一、大大提高效率。存储过程本身的执行速度非常快,而且,调用存储过程可以大大减少同数据库的交互次数。
    第二、提高安全性。假如将SQL语句混合在ASP代码中,一旦代码失密,同时也就意味着库结构失密。
    第三、有利于SQL语句的重用。

 

以下定义来自wiki:

预存程序 (Stored Procedure),又可称存储过程,是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象,它可以视为数据库中的一种函数或子程序。
预存程序具有下列的好处:
预存程序可封装,并隐藏复杂的商业逻辑。
预存程序可以回传值,并可以接受参数。
预存程序无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
预存程序可以用在数据检验,强制实行商业逻辑等。

 

以下示例,以Microsoft的SQL Server所以采用的T-SQL语法表示。
CREATE PROCEDURE usp_AddProduct
(
   @Barcode varchar(13),
   @Caption nvarchar(50)
)
AS
BEGIN
   IF LEN(@Barcode) < 13
      RAISERROR('Barcode length is too short.')
   INSERT INTO MyProducts (Barcode, Caption) VALUES (@Barcode, @Caption)
END

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值