当前位置:首页 > 数据库 > 正文

数据库查询命令


I、数据库查询查询“001”课程比“002”课程成绩高的所有学生的学号

分析如下:

--1selectSC1.S#fromSCSC1JOINSCSC2ONSC1.S#=SC2.S#

SC2.score

--2选择S#,AVG(分数)

按S#划分的SC组的平均分数

60--3selectStudent.S#,

Sname,COUNT(*)数字来自所选课程的SUM(分数)总分

来自学生JOINSConStudent.S#=SC.S#

按学生分组。 S#,Sname

附加信息:

数据库操作注意事项

1优化查询,尽量避免全表扫描首先应该考虑在涉及的列上创建索引的位置和顺序。
2尽量避免在where子句中计算字段的null值,否则引擎将停止使用索引并执行全表扫描,如:selectidfromtwherenumisnull

Best数据库中不要留NULL尽可能使用NOTNULL填充数据库。
注释、描述、注释等可以设置为NULL,而不是使用NULL。
不要以为NULL不需要空格如:char(100)类型创建字段时,无论是否输入值都是固定空格的(也包括NULL),会占用100个字符的空间,如果是像varchar这样的长字段变量,null就不占用空间。
可以给num设置默认值0,保证表中num列不存在空值,然后这样查询:selectidfromtwherenum=0

3.尽量避免在where子句中使用!=或<>运算符,否则引擎将停止使用索引并执行全表扫描。
4尽量避免在where子句中使用or来加入条件如果字段有索引而字段没有索引,会导致引擎停止使用索引and。 进行全表扫描,例如:selectidfromtwherenum=10orName='admin'

您可以这样询问:
selectidfromtwherenum=10
unionall
selectidfromtwhereName='admin'

5in和notin也要谨慎使用,否则会导致全表扫描,如:selectidfromtwherenumin(1,2,3)

对于常量值,您可以使用Between不要使用in:selectidfromtwherenumBetween1and3

很多时候这是一个不错的选择,可以使用来代替in:selectnumfromawherenumin(selectnumfromb)

替换为以下语句:selectnumfromawhereexists(select1frombwherenum=a.num)

6以下查询也将生成全表扫描:selectidfromtwherenamelike'%abc%'

为了提高效率,可以考虑全文检索。
7如果在where子句中使用该参数,也会引起全表扫描。 因为SQL仅在运行时解析局部变量,所以优化器不能延迟访问计划的选择,直到运行时它必须在编译时进行选择。 但是,如果访问计划是在编译时构建的,则变量的值仍然未知,并且不能用作索引选择的输入。

参考来源:百度百科:数据库