简单的查询

来源:互联网 发布:mac dns地址修改了 编辑:程序博客网 时间:2024/06/12 01:08

1、select语句执行步骤

  1. from子句。根据from子句创建工作表,如果from子句中有多个表,则进行多个表的连接
  2. where子句。在步骤1 的结果基础上,删除不满足where条件的行
  3. group子句。对步骤2的结果进行分组,每个组的group by字段有相同的值
  4. having 子句。将步骤3的结果作为基础,进一步删除不满足having子句的记
  5. select子句。在步骤4的执行结果基础上,删除不在select子句中的列
  6. order by子句。对5的结果进行排序
  7. 对于交互式的select语句,在屏幕上显示结果,对于嵌入式的sql,使用游标将结果传递到宿主程序中

2、基本表(teacher)

 

3、使用distinct关键字去除重复信息

eg1:

 

结果:

使用distinct关键字查询:

 

结果:

 

  • 比较上述两个查询可以看出:使用distinct关键字对查询的结果进行了排序,实际上它的的执行过程就是首先对查询结果进行排序,再去除重复值。也就是说使用distinct是要付出代价的,排序再去重的过程甚至比查询本身更加费时。
  • 另外使用distinct关键字进行去重时,如果select后面有多个字段,则只有多个字段都相同时才算作重复的列进行去除。

4、排序查询的结果

 

上除查询可以改成:

 

其中的4和2代表order by中的列在select语句中出现的次序。这种用法只能用于order by子句中的排序列刚好出现在select子句中的情况。

查询结果:

 

由查询结果可知:

  • 系统根据order by后面的列表col1,col2,col3顺序进行排序。先按col1的顺序进行排序,如果col1相同时候 ,这些相同信息再按照col2的的顺序进行排序
  • 某些情况可以采用序号替代列名
  • NULL值被看成最小,如上述在sex为女的一组内,按照sal排序时候,sal为NULL的值行排在这一组的最上方

5、where子句

(1)比较运算符用于数值

eg:where sal<>1200

 

(2)比较运算符用于字符串

eg: where dname>='计算机'

 

(3)between用于数值和字符串

eg:where dname between '计算机'and '生物'(包括dname为’计算机‘和’生物‘的记录在内)

 

(4)对NULL值的判断

null参与算术运算,则该算术运算的结果为null;

参与比较运算,结果为false;

参与聚集函数运算,则除了count(*)外,其他聚集函数都忽略null

如果要查询某列为null或者不为null的记录,应该用is null或者is not null

eg:要从teacher表中查询工资不为空的教师姓名,工资,年龄,性别信息

 

结果为:

 

而不要写成

 

这种写法,将null用于比较运算符,结果为false,即null<>null结果为false,且null=null结果还是false

则查询的结果只有列名,没有数据,如下图:

原创粉丝点击