SQL基础--过滤和排序
為什么80%的碼農都做不了架構師?>>> ??
--=======================================
--SQL基礎-->過濾和排序
--=======================================
/*
一、使用WHERE字句實現對數據的過濾
??? 用法:SELECT *|{[DISTINCT] column|expression [alias],...}
????????? FROM table
????????? [WHERE condition(s)];
二、多條件連接
??? AND ?? 同時滿足
??? OR????? 滿足其中一個
?
三、比較符
??? >? ??? 大于
??? >= 大于等于
??? <? ??? 小于
??? <= 小于等于
??? <> 不等于
??? != ??? 不等于
??? IS NULL 是否為空值
??? IS NOT NULL 不為空值
??? NOT???????? 條件為FALSE時返回TRUE
?
??? BETWEEN x AND y?? 大于等于X,小于等于Y
??? IN (集合)? ?? ?在這個集合中,或者講在這個列表中
??? NOT IN(集合)? 不在這個集合中,或者講不在這個列表中
?
??? LIKE?? 使用LIKE操作符來執(zhí)行有效搜索字符串數值的通配符搜索
??? %? ??? 通配任意字符
??? _?? ??? 能配單個字符
???
四、日期和字符串的處理
??? 字符串和日期值使用單引號標記嵌入
??? 字符數值是大小寫有關,而日期數值是格式化的。
??? ORACLE默認顯示的日期格式為:DD-MON-RR
??? 可以用alter session set nls_date_format='yyyy-mm-dd';修改日期格式
??? 永久性修改可以用:
??? alter system set nls_date_format='yyyy-mm-dd' scope=spfile;
?
??? 日期相加減:
??? ??? 日期+(-)數字? 返回一個往前或往后的天數的日期
?????? ??? ??? +往后? -往前
?
??? ??? 日期-日期????? 得到兩個日期之間相差的天數
??????
五、order by 排序
??? 默認的排序方式:升序
??? 控制排序方式:?? ASC ?? 升序
?????????? ??????? DESC 降序
???
六、演示*/
/*使用WHERE條件查詢*/
SQL> select * from scott.emp where sal > 2000
? 2? ;
?
???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
????? 7566 JONES????? MANAGER???????? 7839 02-APR-81?????? 2975??????????????????? 20
????? 7698 BLAKE????? MANAGER???????? 7839 01-MAY-81?????? 2850??????????????????? 30
????? 7782 CLARK????? MANAGER???????? 7839 09-JUN-81?????? 2450??????????????????? 10
????? 7788 SCOTT????? ANALYST???????? 7566 19-APR-87?????? 3000??????????????????? 20
????? 7839 KING?????? PRESIDENT??????????? 17-NOV-81?????? 5000??????????????????? 10
????? 7902 FORD?????? ANALYST???????? 7566 03-DEC-81?????? 3000??????????????????? 20
?
/*多條件連接*/
SQL> select * from scott.emp where deptno = 20 and sal > 2000;
?
???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
????? 7566 JONES????? MANAGER???????? 7839 02-APR-81?????? 2975??????????????????? 20
????? 7788 SCOTT????? ANALYST???????? 7566 19-APR-87?????? 3000??????????????????? 20
????? 7902 FORD?????? ANALYST???????? 7566 03-DEC-81?????? 3000??????????????????? 20
?
/*錯誤的寫法*/
SQL> select * from scott.emp where 1000<=sal<=2000;
select * from scott.emp where 1000<=sal<=2000
?????????????????????????????????????? *
ERROR at line 1:
ORA-00933: SQL command not properly ended
?
/*正確的寫法*/
SQL> select * from scott.emp where sal >= 1000 and sal <= 2000;
?
???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
????? 7499 ALLEN????? SALESMAN??????? 7698 20-FEB-81????? ?1600??????? 300???????? 30
????? 7521 WARD?????? SALESMAN??????? 7698 22-FEB-81?????? 1250??????? 500???????? 30
????? 7654 MARTIN???? SALESMAN??????? 7698 28-SEP-81?????? 1250?????? 1400???????? 30
????? 7844 TURNER???? SALESMAN??????? 7698 08-SEP-81??? ???1500????????? ???????? 30
????? 7876 ADAMS????? CLERK?????????? 7788 23-MAY-87?????? 1100??????????????????? 20
????? 7934 MILLER???? CLERK?????????? 7782 23-JAN-82?????? 1300??????????????????? 10
?
/*BETWEEN的用法*/
SQL> select * from scott.emp where sal between 1000 and 2000;
?
???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
????? 7499 ALLEN????? SALESMAN??????? 7698 20-FEB-81?????? 1600??????? 300???????? 30
????? 7521 WARD?????? SALESMAN??????? 7698 22-FEB-81?????? 1250??????? 500???????? 30
????? 7654 MARTIN???? SALESMAN??????? 7698 28-SEP-81?????? 1250?????? 1400???????? 30
????? 7844 TURNER???? SALESMAN??????? 7698 08-SEP-81???? ??1500????????? ???????? 30
????? 7876 ADAMS????? CLERK?????????? 7788 23-MAY-87?????? 1100??????????????????? 20
????? 7934 MILLER???? CLERK?????????? 7782 23-JAN-82?????? 1300??????????????????? 10
?
/*IN的用法,以下兩條語句等同*/
SQL> select * from scott.emp where sal = 3000 or sal = 5000;
?
SQL> select * from scott.emp where sal in (3000,5000);
?
???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
????? 7788 SCOTT????? ANALYST???????? 7566 19-APR-87?????? 3000??????????????????? 20
????? 7839 KING?????? PRESIDENT??????????? 17-NOV-81?????? 5000??????????????????? 10
????? 7902 FORD?????? ANALYST???????? 7566 03-DEC-81?????? 3000??????????????????? 20
?
SQL> select * from scott.emp where sal = 3000 or sal = 5000;
?
???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
????? 7788 SCOTT??? ??ANALYST???????? 7566 19-APR-87?????? 3000??????????????????? 20
????? 7839 KING?????? PRESIDENT??????????? 17-NOV-81?????? 5000??????????????????? 10
????? 7902 FORD?????? ANALYST???????? 7566 03-DEC-81?????? 3000??????????????????? 20
?
--not in的用法
SQL> select * from scott.emp where sal not in (3000,5000);
?
???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
????? 7369 SMITH??? ??CLERK?????????? 7902 17-DEC-80??????? 800??????????????????? 20
????? 7499 ALLEN????? SALESMAN??????? 7698 20-FEB-81?????? 1600??????? 300???????? 30
????? 7521 WARD?????? SALESMAN??????? 7698 22-FEB-81?????? 1250??????? 500???????? 30
????? 7566 JONES? ????MANAGER???????? 7839 02-APR-81?????? 2975??????????????????? 20
????? 7654 MARTIN???? SALESMAN??????? 7698 28-SEP-81?????? 1250?????? 1400???????? 30
????? 7698 BLAKE????? MANAGER???????? 7839 01-MAY-81?????? 2850??????????????????? 30
????? 7782 CLARK????? MANAGER???????? 7839 09-JUN-81?????? 2450??????????????????? 10
????? 7844 TURNER???? SALESMAN??????? 7698 08-SEP-81?????? 1500????????? ???????? 30
????? 7876 ADAMS????? CLERK?????????? 7788 23-MAY-87?????? 1100??????????????????? 20
????? 7900 JAMES????? CLERK?????????? 7698 03-DEC-81??????? 950??????????????????? 30
????? 7934 MILLER???? CLERK?????????? 7782 23-JAN-82?????? 1300??????????????????? 10
?
/*LIKE、%、_ 運算符的用法*/
SQL> select * from scott.emp where ename like 'A%';
?
???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
????? 7499 ALLEN ?????SALESMAN??????? 7698 20-FEB-81?????? 1600??????? 300???????? 30
????? 7876 ADAMS????? CLERK?????????? 7788 23-MAY-87?????? 1100??????????????????? 20
?
SQL> select * from scott.emp where ename like '_L%';
?
???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
????? 7499 ALLEN????? SALESMAN??????? 7698 20-FEB-81?????? 1600??????? 300???????? 30
????? 7698 BLAKE????? MANAGER???????? 7839 01-MAY-81?????? 2850??????????????????? 30
????? 7782 CLARK????? MANAGER???????? 7839 09-JUN-81?????? 2450??????????????????? 10
?
--日期格式:未修改前
SQL> select sysdate from dual;
?
SYSDATE
---------
28-MAR-10
?
/*日期格式的修改,僅對當前會話有效*/
SQL> alter session set nls_date_format = 'yyyy-mm-dd';
?
Session altered.
?
--查看修改后的日期格式
SQL> select sysdate from dual;
?
SYSDATE
----------
2010-03-28
?
--永久性修改,將其修改寫到參數文件中。
alter system set? nls_date_format =? 'yyyy_mm_dd' scope = spfile;
?
--日期的加減
--???? 日期+(-)數字? 返回往前或往后的天數日期
--???? +往前,-往后
--???? 日期- 日期
?
SQL> select sysdate + 10 from dual;
?
SYSDATE+10
----------
2010-04-07
?
SQL> select sysdate - 10 from dual;
?
SYSDATE-10
----------
2010-03-18
?
--日期相減(為相差的天數)
SQL> select empno,ename,sysdate,sysdate - hiredate from scott.emp;
?
???? EMPNO ENAME????? SYSDATE??? SYSDATE-HIREDATE
---------- ---------- ---------- ----------------
????? 7369 SMITH????? 2010-03-28?????? 10693.4346
????? 7499 ALLEN????? 2010-03-28?????? 10628.4346
????? 7521 WARD?????? 2010-03-28?????? 10626.4346
????? 7566 JONES??? ??2010-03-28?????? 10587.4346
????? 7654 MARTIN???? 2010-03-28?????? 10408.4346
????? 7698 BLAKE????? 2010-03-28?????? 10558.4346
????? 7782 CLARK????? 2010-03-28?????? 10519.4346
????? 7788 SCOTT????? 2010-03-28?????? 8379.43456
????? 7839 KING?????? 2010-03-28?????? 10358.4346
????? 7844 TURNER???? 2010-03-28?????? 10428.4346
????? 7876 ADAMS????? 2010-03-28?????? 8345.43456
?
--使用null值過濾??
SQL> select * from scott.emp where comm is null;
?
???? EMPNO ENAME????? JOB????????????? MGR HIREDATE????????? SAL?? ????COMM???? DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
????? 7369 SMITH????? CLERK?????????? 7902 1980-12-17??????? 800??????????????????? 20
????? 7566 JONES????? MANAGER???????? 7839 1981-04-02?????? 2975??????????????????? 20
????? 7698 BLAKE????? MANAGER???????? 7839 1981-05-01?????? 2850??????????????????? 30
????? 7782 CLARK????? MANAGER???????? 7839 1981-06-09?????? 2450??????????????????? 10
????? 7788 SCOTT????? ANALYST???????? 7566 1987-04-19??? ???3000??????????????????? 20
????? 7839 KING?????? PRESIDENT??????????? 1981-11-17?????? 5000??????????????????? 10
????? 7876 ADAMS????? CLERK?????????? 7788 1987-05-23?????? 1100??????????????????? 20
????? 7900 JAMES????? CLERK?????????? 7698 1981-12-03??????? 950??????????????????? 30
????? 7902 FORD?????? ANALYST???????? 7566 1981-12-03?????? 3000??????????????????? 20
????? 7934 MILLER???? CLERK?????????? 7782 1982-01-23?????? 1300??????????????????? 10
?
/*ORDER BY排序(默認為升序)*/
SQL> select * from scott.emp where sal > 2000 order by sal;
?
???? EMPNO ENAME????? JOB????????????? MGR HIREDATE????????? SAL?????? COMM???? DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
????? 7782 CLARK????? MANAGER???????? 7839 1981-06-09?????? 2450??????????????????? 10
????? 7698 BLAKE????? MANAGER???????? 7839 1981-05-01?????? 2850??????????????????? 30
????? 7566 JONES????? MANAGER???????? 7839 1981-04-02?????? 2975??????????????????? 20
??? ??7902 FORD?????? ANALYST???????? 7566 1981-12-03?????? 3000??????????????????? 20
????? 7788 SCOTT????? ANALYST???????? 7566 1987-04-19?????? 3000??????????????????? 20
????? 7839 KING?????? PRESIDENT??????????? 1981-11-17?????? 5000??????????????????? 10
?
--多字段排序 ?
SQL> select * from scott.emp where sal > 2000 order by sal desc ,ename asc;
?
???? EMPNO ENAME????? JOB????????????? MGR HIREDATE????????? SAL?????? COMM???? DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
????? 7839 KING?????? PRESIDENT??????????? 1981-11-17?????? 5000??????????????????? 10
????? 7902 FORD?????? ANALYST???????? 7566 1981-12-03?????? 3000??????????????????? 20
????? 7788 SCOTT????? ANALYST???????? 7566 1987-04-19?????? 3000????????? ??????????20
????? 7566 JONES????? MANAGER???????? 7839 1981-04-02?????? 2975??????????????????? 20
????? 7698 BLAKE????? MANAGER???????? 7839 1981-05-01?????? 2850??????????????????? 30
????? 7782 CLARK????? MANAGER???????? 7839 1981-06-09?????? 2450??????????????????? 10
?
--按第個字段降序排列,order by 4 desc ??
SQL> select empno,ename,job,sal from scott.emp where sal > 2000 order by 4 desc ;
?
???? EMPNO ENAME????? JOB????????????? SAL
---------- ---------- --------- ----------
????? 7839 KING?? ????PRESIDENT?????? 5000
????? 7902 FORD?????? ANALYST???????? 3000
????? 7788 SCOTT????? ANALYST???????? 3000
????? 7566 JONES????? MANAGER???????? 2975
????? 7698 BLAKE????? MANAGER???????? 2850
????? 7782 CLARK????? MANAGER???????? 2450
?
七、更多
??? SQL 基礎-->SELECT 查詢
??? Sqlplus 常用命令
??? Oralce? 相關?
??? ??
?
?
原文鏈接: http://blog.csdn.net/robinson_0612/article/details/5487992
轉載于:https://my.oschina.net/dtec/blog/47476
總結
以上是生活随笔為你收集整理的SQL基础--过滤和排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RHEL6关闭IPv6
- 下一篇: php 输出true false