数据库索引和SQL语句

    xiaoxiao2022-07-14  157

    索引

    索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。 在表Student上按Sno降序建唯一索引

    create unique index Stusno on Student (Sno desc);

    删除Student表的Stusno索引

    alter table Student drop index Stusno;

    那么数据库中的索引作用是什么?什么情况下适合建索引什么情况下不适合? 1.通过创建唯一性索引,可以保证表中每一行数据的唯一性 2.可以加快数据的检索速度 3.可以加速表与表之间的链接,在实现数据完整性方面有意义。 4.在使用分组(group by)和排序(Order by)子句进行检索时,同样可以显著减少查询中分组和排序的时间。 当然索引也有不利的方面 1.耗费时间,随着数据量的增加而增加。 2.占据物理空间。 3.对表中数据进行增删改的时候,索引也要动态的维护,降低了数据的维护速度。

    哪些列上适合创建索引呢? 1.经常需要搜索的列 2.经常用在连接的列上,这些列主要是一些外键,可以加快连接速度。 3.在经常需要根据范围进行搜索的列上,因为索引已经排序,其指定的范围是连续的。 4.在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询的速度。 5.在经常使用where子句的列上,加快条件的判断速度

    哪些地方不适合建索引呢? 1.那些在查询中很少使用的列 2.那些数据量很少的列 3.当修改操作远远大于检索操作时

    视图

    视图是从一个或几个基本表中导出的表,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,数据仍然放在基本表里。视图就像一个窗口。

    下面举例一些SQL语句 修改基本表:

    alter table <表名> [ add <新列名> <数据类型> [完整性约束] ] [ drop <完整性约束名> ] [ modify column <列名> <数据类型>]

    向Student表添加入学时间列

    alter table Student add S_entrance DATE;

    数据查询

    select [ all | distinct } <目标列表达式> from <表名> [ where < 条件表达式 > ] [ group by <列名> [ having <条件表达式> ] ] [ order by <列名> [ asc | desc ] ]

    查询Student表中具有相同年龄的每个组的人数

    select Sage ,count(*) from Student group by Sage;

    如果分组后还要按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则使用having。例如对上例筛选

    select Sage ,count(*) from Student group by Sage having count(*) > 1;

    若查询涉及多个表,使用连接查询。 若有表Student、SC(选课表),要求查询每个学生及其选修课程的情况:

    select Student.* , SC.* from Student,SC where Student.Sno=SC.Sno;

    这种称自然连接或内连接。若有学生没有选课,则在SC表里没有相应的元组,造成最终结果舍掉这些学生的信息。

    如果想把没有选课的学生也保留在结果中,可以使用外连接。 下面用左外连接(左外连接列出左边表(本例为Student表)中的所有元组)

    select Student.*,SC.* from Student left join SC on (Student.Sno=SC.Sno);
    最新回复(0)