1、简单Select
1.1、查询所有列(不敢随便用)
--------------------------------------------------------------------------------
--Sample1:查询所有列(不敢随便用)
SELECT * FROM EMP;
SELECT * FROM Dept;
SELECT * FROM SALGRADE;
--------------------------------------------------------------------------------
1.2、查询指定列/限定列
--------------------------------------------------------------------------------
--Sample2:查询指定列/限定列
select ENAME,EMPNO from emp;
select Ename,JOB from emp;
--------------------------------------------------------------------------------
1.3、算数运算
--------------------------------------------------------------------------------
--Sample3:算数运算
select Ename,SAL,SAL * 12 from emp;
select ename ,sal ,sal /20 from emp;
select ename ,sal ,comm, sal + comm from emp;
--------------------------------------------------------------------------------
1.4、连接符
连接符--列与列连接。
--------------------------------------------------------------------------------
--Sample1:连接符--列与列连接
select EMPNO,ENAME, Empno || ename From EMP;
--Sample2:连接符--列与字符串的连接
select empno ,Ename, '职位:' || JOB from emp;
--------------------------------------------------------------------------------
1.5、DISTINCT消除重复行
--------------------------------------------------------------------------------
--Sample1--在 SELECT 子句中使用关键字‘DISTINCT’删除重复行
select DISTINCT deptno from emp;
--Sample2:查出所有当领导的职员编号
select DISTINCT mgr from emp;
--------------------------------------------------------------------------------
1.6、列别名
列别名的用途:
- 重命名一个列。
- 便于计算。
- 紧跟列名,也可以在列名和别名之间加入关键字‘AS’,以便在别名中包含空格或特殊的字符并区分大小写。
注意:
""
用于包含列名;当列名中有空格或者其它特殊字符时,必须使用""强制包含列名;
--------------------------------------------------------------------------------
--Sample1:列名 别名
select ename 员工姓名,sal 工资 ,sal /20 年薪 from emp;
--Sample2:列名 "别名" (推荐使用)
select ename "员工姓名",sal "工资" ,sal /20 "年薪" from emp;
--Sample3:列名 as 别名
select ename as 员工姓名,sal as 工资 ,sal /20 as 年薪 from emp;
----Sampl41:列名 as "别名" (推荐使用)
select ename as "员工姓名",sal as "工资" ,sal /20 as "年薪" from emp;
--------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--Sample1:列别名,自定义列,“”符号
SELECT EMPNO,
ENAME,
JOB,
MGR,
HIREDATE,
SAL "工资",
300 涨薪,
SAL + 300 AS "最新 工资"
FROM emp;
--列别名,""符号
-------------------------------------------------------------------------------
SELECT "empno" AS 员工编号 ,ename 员工姓名 FROM emp;
SELECT 'Hello' FROM emp;
SELECT 300 常量 FROM emp;
SELECT 300 AS 常量 FROM emp;
SELECT 300 AS "常 量" FROM emp;
SELECT 300 AS "常!@#$%^&量" FROM emp;
-------------------------------------------------------------------------------
2、特殊查询(此处了解即可)
2.1、查询表中行数
--------------------------------------------------------------------------------
--查询表中行数
select Count(*) from UserInfo;
--------------------------------------------------------------------------------
2.2、查询行编号和ID
--------------------------------------------------------------------------------
--查询行编号和ID
select ROWID ,UserInfoID,NickName,Sex From UserInfo;
select ROWNUM ,UserInfoID,NickName,Sex From UserInfo;
--------------------------------------------------------------------------------
2.3、查询分页数据(子查询)
--------------------------------------------------------------------------------
--查询分页数据(子查询)
SELECT *
FROM (select ROWNUM ,UserInfoID,NickName,Sex From UserInfo) tmpUserInfo;
--------------------------------------------------------------------------------
2.4、Top N查询
--------------------------------------------------------------------------------
--查询第一页,每页2条(Top N查询)
SELECT *
FROM (select ROWNUM ,UserInfoID,NickName,Sex From UserInfo) tmpUserInfo
Where Rownum > 5 ;
--------------------------------------------------------------------------------
3、WHERE过滤/条件查询
注意:
字符和日期:
字符和日期要包含在单引号中。
字符大小写敏感,日期格式敏感。
默认的日期格式是 DD-MON-RR。
-------------------------------------------------------------------------------
SELECT * FROM emp;
--Sample1:查询部门编号为30的所有员工信息
SELECT * FROM emp
WHERE deptno = 30;
--Sample1:查询员工姓名为james的员工信息
SELECT * FROM emp
Where ename = 'JAMES';
SELECT * FROM emp
Where ename = 'james';
--Sample3:查询入职日期为1980年12月17日的员工信息
SELECT * FROM emp
Where hiredate = '17-12月-80';
--Sample4:过滤条件+ 排序
SELECT * FROM emp
WHERE hiredate = '03-12月-81'
Order by sal
;
--Sample5:多条件
SELECT * FROM emp
WHERE DEPTNO = 30 or sal > 2000
ORDER BY sal
;
-------------------------------------------------------------------------------
4、ORDER BY
-------------------------------------------------------------------------------
-- 默认排序。只指定了排序列但没有明确指定排序方式,默认为升序ASC。
SELECT * FROM emp ORDER BY sal;
--降序
SELECT * FROM emp ORDER BY sal DESC;
--升序
SELECT * FROM emp ORDER BY sal ASC;
--多列排序,
SELECT * FROM emp ORDER BY deptno DESC, sal DESC;
--按照别名排序。年薪
SELECT EMPNO, ENAME, SAL * 12 Annsal
FROM emp
ORDER BY Annsal ;
--按照别名排序。日薪
SELECT empno, ename, round( sal/30 , 2 ) salofday
FROM emp
ORDER BY salofday;
-------------------------------------------------------------------------------
5、Dual表
dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。主要用来测试表达式;
-------------------------------------------------------------------------------
DESC dual;
SELECT * FROM dual;
INSERT INTO dual VALUES ('A');
INSERT INTO dual VALUES ('B');
INSERT INTO dual VALUES ('C');
COMMIT;
--1、查看当前用户,可以在 SQL Plus中执行下面语句:
SELECT USER FROM dual;
--2、用来调用系统函数
SELECT sysdate FROM dual;--获得当前系统时间
select TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM dual;--获得当前系统时间
select SYS_CONTEXT('USERENV','TERMINAL') FROM dual; --获得主机名
select SYS_CONTEXT('USERENV','language') FROM dual; --获得当前 locale
select dbms_random.random FROM dual; --获得一个随机数
--3、得到序列的下一个值或当前值,用下面语句
create sequence my_sequence ;
select my_sequence.nextval FROM dual;--获得序列my_sequence的下一个值
select my_sequence.currval FROM dual;--获得序列my_sequence的当前值
--4、可以用做计算器
SELECT 7*9 FROM dual;
--查询Dual的Object类型
SELECT owner, object_name , object_type FROM dba_objects WHERE object_name LIKE '%DUAL%' order by object_name;
SELECT owner, object_name , object_type FROM dba_objects WHERE object_name LIKE '%DUAL%';
--显示Dual表结构
DESC dual;
-------------------------------------------------------------------------------
6、DESCRIBE
-------------------------------------------------------------------------------
--显示表结构
DESCRIBE UserInfo;
--简写
DESC UserInfo;
--------------------------------------------------------------------------------
--Sample1:Desc显示表结构
DESC emp;
--Sample2:DESCRIBE显示表结构
DESCRIBE emp;
--------------------------------------------------------------------------------