数据表的查询原理:
从源表中根据需要查询的列和条件逐行对数据进行判断并将满足条件的行重新放入一张新表中,这张新表就是我们看到的查询结果表格。
查询的结果称为结果表,查询的结果集是数据库中的虚拟表,将数据文件的内容以表格的方式进行呈现的结果。
1、查询语法
select * from 表名
* 是SQL中的通配符,用来匹配表中的所有数据列。
select * from users
select 列名,列名 from 表名 where 条件
--查询users所有的人的姓名
select userName from users
--查询user表中所有人的姓名和他的邮箱
select userName,email from users
--查询没有填写邮箱的用户姓名,年龄和生日
select userName,age,birthday from users where email is null
2、指定列名查询
select 列 as 显示列名 from 表名
或者select 列 显示列名 from 表名
第二种相对于第一种少个as,但第一种比较直观,所以尽量使用前者。
--查询员工的姓名和对应的薪水
select first_name||last_name as empName,salary from emp
select first_name||last_name empName,salary from emp
3、为表起别名
select * from 表名 新表名
注意:这里没有as,不同于为列起别名
--为表起别名
select * from users u
4、常量列的查询
源表中没有的列作为常量进行查询, 如下num列下 都是10
--常量列的查询
select first_name||last_name as empName,salary,sysdate as oprate_time,10 as num from emp
5、排序查询
select 列名 from 表名 where 条件
order by
列
升序排列
asc (默认值)
降序排列
desc
--查询员工的姓名和薪资,并按照由低到高的方式进行呈现
--asc表示升序,默认排序就是升序的方式,desc表示降序
select first_name||last_name as empName,salary from emp order by salary asc
--由高到底显示工资
select rownum,first_name,salary from emp order by salary desc
1)order by 通常对列进行排序,同时也可以对表达式的结果进行排序呢
select * from emp order by salary+500
2)也可以对数字、日期、字母进行排序
select * from emp order by first_name
3)可以对多个列进行排序,
多个列的排列原则,优先排序第一个列,当第一个列的值存在重复的情况,才会对第二个列进行排序,并且每个排序列需要单独设置排序策略
--要求入职时间升序排列,薪资降序排列
select * from emp order by hire_date asc,salary desc
6、rowid 和 rownum
rowid
select rowid from emp
结果如下:
rownum
rownum在结果集生成后由Oracle自动分配,且必须从1开始,所有基于rownum的查询也必须从1开始。