(九)逻辑运算,order by,desc
逻辑运算
AND,OR,NOT
......where 表达式1 and 表达式2;
......where 表达式2 and 表达式1;
SQL优化:
SQL在解析where时是从右向左解析的。所以:and 时应该将易假的放在右侧,or时应该将易真的值放在右侧
order by
order by 之后可以跟哪些内容呢?
order by + 列名,表达式 ,别名,序号
SQL> select ename,sal,sal*12 "年薪",sal+nvl(comm,0) from emp order by 2; ENAME SAL 年薪 SAL+NVL(COMM,0)
---------- ---------- ---------- ---------------
SMITH 800 9600 800
JAMES 950 11400 950
ADAMS 1100 13200 1100
WARD 1250 15000 1750
MARTIN 1250 15000 2650
MILLER 1300 15600 1300
TURNER 1500 18000 1500
ALLEN 1600 19200 1900
CLARK 2450 29400 2450
BLAKE 2850 34200 2850
JONES 2975 35700 2975 ENAME SAL 年薪 SAL+NVL(COMM,0)
---------- ---------- ---------- ---------------
SCOTT 3000 36000 3000
FORD 3000 36000 3000
KING 5000 60000 5000 已选择14行。 SQL> set pagesize 100;
SQL> set timing on;
SQL> ed
已写入 file afiedt.buf 1* select ename,sal,sal*12 "年薪",sal+nvl(comm,0) from emp order by "年薪"
SQL> / ENAME SAL 年薪 SAL+NVL(COMM,0)
---------- ---------- ---------- ---------------
SMITH 800 9600 800
JAMES 950 11400 950
ADAMS 1100 13200 1100
WARD 1250 15000 1750
MARTIN 1250 15000 2650
MILLER 1300 15600 1300
TURNER 1500 18000 1500
ALLEN 1600 19200 1900
CLARK 2450 29400 2450
BLAKE 2850 34200 2850
JONES 2975 35700 2975
SCOTT 3000 36000 3000
FORD 3000 36000 3000
KING 5000 60000 5000 已选择14行。 已用时间: 00: 00: 00.08
SQL> ed
已写入 file afiedt.buf 1* select ename,sal,sal*12 "年薪",sal+nvl(comm,0) from emp order by sal+nvl(comm,0) desc
SQL> / ENAME SAL 年薪 SAL+NVL(COMM,0)
---------- ---------- ---------- ---------------
KING 5000 60000 5000
FORD 3000 36000 3000
SCOTT 3000 36000 3000
JONES 2975 35700 2975
BLAKE 2850 34200 2850
MARTIN 1250 15000 2650
CLARK 2450 29400 2450
ALLEN 1600 19200 1900
WARD 1250 15000 1750
TURNER 1500 18000 1500
MILLER 1300 15600 1300
ADAMS 1100 13200 1100
JAMES 950 11400 950
SMITH 800 9600 800 已选择14行。 已用时间: 00: 00: 00.13
SQL>
order 后有多列时,列名之间用逗号隔开,order by 会同时作用于多列,如下例:会在同一部门内升序,部门间再升序
SQL> set linesize 140;
SQL> select * from emp order by deptno,sal; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7839 KING PRESIDENT 17-11月-81 5000 10
7369 SMITH CLERK 7902 17-12月-80 800 20
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7902 FORD ANALYST 7566 03-12月-81 3000 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 已选择14行。 已用时间: 00: 00: 00.14
SQL>
desc 只作用于最近的一列,两列都降序,需要两个desc
SQL> select * from emp order by deptno,sal desc;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7839 KING PRESIDENT 17-11月-81 5000 10
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7902 FORD ANALYST 7566 03-12月-81 3000 20
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7369 SMITH CLERK 7902 17-12月-80 800 20
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7900 JAMES CLERK 7698 03-12月-81 950 30
已选择14行。
已用时间: 00: 00: 00.12
SQL> select * from emp order by deptno desc,sal desc;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7369 SMITH CLERK 7902 17-12月-80 800 20
7839 KING PRESIDENT 17-11月-81 5000 10
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7934 MILLER CLERK 7782 23-1月 -82 1300 10
已选择14行。
已用时间: 00: 00: 00.14
SQL>
按奖金由高到低
select * from emp order by comm desc,结果前面的值为NULL,数据在后面,应该将NULL放在后面,即:select * from emp order by comm desc nulls last;
已用时间: 00: 00: 00.14
SQL> select * from emp order by comm; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7369 SMITH CLERK 7902 17-12月-80 800 20
7782 CLARK MANAGER 7839 09-6月 -81 2450 10 已选择14行。 已用时间: 00: 00: 00.13
SQL> select * from emp order by comm desc; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7902 FORD ANALYST 7566 03-12月-81 3000 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 已选择14行。 已用时间: 00: 00: 00.11
SQL> ed
已写入 file afiedt.buf 1* select * from emp order by comm desc
SQL> select * from emp order by comm desc nulls last; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7369 SMITH CLERK 7902 17-12月-80 800 20
7782 CLARK MANAGER 7839 09-6月 -81 2450 10 已选择14行。 已用时间: 00: 00: 00.14
SQL>
(九)逻辑运算,order by,desc的更多相关文章
- SQL注入之Sqli-labs系列第四十七关,第四十八关,第四十九关(ORDER BY注入)
0x1 源码区别点 将id变为字符型:$sql = "SELECT * FROM users ORDER BY '$id'"; 0x2实例测试 (1)and rand相结合的方式 ...
- hive 分组排序函数 row_number() over(partition by " " order by " "desc
语法:row_number() over (partition by 字段a order by 计算项b desc ) rank --这里rank是别名 partition by:类似hive的建表, ...
- 《MySQL必知必会》检索数据,排序检索数据(select ,* ,distinct ,limit , . , order by ,desc)
<MySQL必知必会>检索数据,排序检索数据 1.检索数据 1.1 select 语句 为了使用SELECT检索表数据,必须至少给出两条信息一想选择什 么,以及从什么地方选择. 1.2 检 ...
- ThinkPHP CURD方法盘点:order方法
order方法属于模型的连贯操作方法之一,用于对操作的结果排序. 用法 $Model->where('status=1')->order('id desc')->limit(5)-& ...
- order by group by
order by 后 group by连用, mysql好像 >5.4不起作用 通过 explain 查看执行计划,可以看到没有 limit 的时候,少了一个 DERIVED 操作 估计是内部优 ...
- Oracle(order by)
传统数据查询只会按照设置的主键排列.如果现在对制定的列进行排序的操作,那么就必须通过 ORDER BY 子句控制. 排序语法: SELECT [DISTINCT] * | 列名称 [AS] 列别名, ...
- thinkphp中order方法
order方法属于模型的连贯操作方法之一,用于对操作的结果排序. 用法 $Model->where('status=1')->order('id desc')->limit(5)-& ...
- oracle 之分析函数 over (partition by ...order by ...)
一:分析函数overOracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行. 1.分析函数和聚合函数的 ...
- Mysql order by 排序 varchar 类型数据
Mysql order by 排序 varchar 类型数据 varchar 类型字段排序, 会將数字当成字符串来处理. 排序规则一般是从左到右一位位来比较. +0之后 就转化成INT 类型排序 ...
- SQL ORDER BY 关键字
SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集进行排序. SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序. ORDER BY ...
随机推荐
- 【纪录】Proxychain4 使用部署以及利用 ss 加速下载操作
我觉得这个方案用来解决 linux 机器上面 apt-get 和 yum 国外源拉去取过慢的问题还是还不错的. 参看下面两个教程. Reference: https://brickyang.githu ...
- GlusterFS 安装配置
1.磁盘格式化 mkfs.xfs -i size=512 /dev/vdb1 mkdir -p /data/brick1 cat > /etc/fstab <<EOF /dev/vd ...
- SQL Server2012中时间字段为DateTime和VarChar的区别
在设计数据库的时候varchar类型是一个非常常见的类型,很多字段都可以使用这个类型,所以有时候在设计数据库的时候就很容易习惯性设计该类型,比如说时间类型,我们既可以DateTime类型,又可以使用v ...
- WPF 如何创建自己的WPF自定义控件库
在我们平时的项目中,我们经常需要一套自己的自定义控件库,这个特别是在Prism这种框架下面进行开发的时候,每个人都使用一套统一的控件,这样才不会每个人由于界面不统一而造成的整个软件系统千差万别,所以我 ...
- Flask从入门到精通
1. flask的下载和安装 在windows下安装flask flask依赖于两个库, 即werkzeug 和jinja2 , werkzeug负责服务器的部署, jinja2负责模板引擎,管理安装 ...
- Fiddler 学习笔记---命令、断点
输入命令框: 1 输入 ?51testing 高亮显示对应记录 2 >10 选择body大于10的记录 3 <10 选择body<10的记录 4 =200 选择result=200 ...
- Windows7 (Win7) 配置Windows Update 时失败 正在还原更改
用WinPE启动后,进入Windows\WinSxS目录,想办法删掉pending.xml和reboot.xml
- HTML 中的 href\src\url
1. 2. -------from Stack Overflow <a><link>使用 href; <img><script>使用 src;
- Real-time chart using ASP.NET Core and WebSocket
Solution in glance The following diagram illustrates our solution where IoT device reports readings ...
- Nginx 假如reload或reopen时发生错误如何解决
配置Nginx 如果reload 或 quit发生不存在文件的时候 重新编译下即可 ./nginx -c /usr/local/webserver/nginx/conf/nginx.conf //重 ...