sql小知识

来源:互联网 发布:宏业超市软件 编辑:程序博客网 时间:2024/05/18 18:00

1、在一条 INSERTSELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT SELECT INTO 语句失败或大容量复制失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。

在返回插入到表的 @@IDENTITY 列的最后一个值方面,@@IDENTITYSCOPE_IDENTITY IDENT_CURRENT 函数类似。  

@@IDENTITY SCOPE_IDENTITY 将返回在当前会话的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。

2、去掉重得记录

你的表中有唯一的ID吗?

如果有就可以这样实现。

 

select * from where id in (select min(id) from group by titlename)

 

这样就可以实现了!!!

3、查询数据库中的随机有限条记录

随机取5:

access:

SELECT TOP 5 * FROM tablename ORDER BY rnd(id)

 

sql:

 

SELECT TOP 5 * FROM tablename ORDER BY newid()


4、

一、表结构定义:CREATE TABLE student(sno C(8),sname C(10),birthday D,age I,merried L)

  2.表结构修改:

    增加字段:ALTER TABLE student ADD COLUMN telphone C(20)

    修改字段类型:ALTER TABLE student ALTER COLUMN name c(20)

  3.创建视图:CREATE VIEW s_view AS SELECT student.sno,sname,cname,grade FROM student,sc,course

    WHERE student.sno=sc.sno AND sc.cno=course.cno

二、数据操纵(p70)

  1.数据插入:INSERT INTO student(sno,sname,sex,age) VALUES(S01,’张三’,’男’,20)

  2.数据删除:DELETE FROM student WHERE sex=’男’

  3.数据修改:UPDATE student SET age=21 WHERE sno=S01

三、权限与角色

    授予GRANT,收回REVOKE

四、查询

    连表、选取、投影

    集函数:MINMAXAVGSUMCOUNT

    分组GROUP BY  分组条件HAVING

    子查询:普通子查询、相关子查询

五、例子

  1.查询成绩在85分以上的学生的学号和姓名

    SELECT 学号,姓名 FROM student WHERE 学号 NOT IN(SELECT 学号 FROM sc WHERE 成绩<85)

  2.查询成绩最高的学生

    SELECT * FROM student WHERE 成绩>=ALL(SELECT 成绩 FROM sc)

    SELECT * FROM student WHERE 成绩=ALL(SELECT MAX(成绩) FROM sc)

  3.查询同时向工程号为J1J2的工程提供零件的供应商号

    SELECT DISTINCT 供应商号 FROM SPJ

    WHERE 工程号=J1 AND 供应商号 IN

    (SELECT 供应商号 FROM SPJ WHERE 工程号=J2)

  4.检索至少选修了学号是S3的学生选修的全部课程相同的学生学号和姓名

    SELECT 学号,姓名 FROM student

    WHERE NOT EXISTS

    (SELECT * FROM sc scx

    WHERE scx.学号=S3 AND NOT EXISTS

    (SELECT * FROM sc scy

    WHERE scy.学号=student.学号 AND scy.课程号=scx.课程号))

 

IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回任何会话和任何作用域中为特定表生成的标识值。