目录
员工表 emp
部门表 dept
SQL 语句书写规范
SQL可以写成一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进,关键字
不能被缩写也不能分行,句子以分号(;)结尾;
大小写不敏感,不区分关键字的大小写;【注意】插入到表中的数据是区分大小写的,
如“HI”、“Hi”和“hi”都不同。
单词使用半角空格或换行符隔开
常数的书写方式:
字符串、日期:用单引号括起来(''),如'Hello','yyyy-mm-dd'。
数字:直接书写,不用加单引号,如:5。
☆必须保证所有的()、单引号、双引号成对结束
☆必须使用英文状态下的半角输入方式
注释
单行注释:--注释文字
多行注释:/* 注释文字*/
(注释是为了便于维护和管理,一般用中文对语句进行说明,用了注释符号的标注不
会对语句有任何影响)
简单过滤查询
select 查询语句
SELECT 子句用于指定需要查询的字段,可以包含表达式、函数值等
SELECT语句是SQL语言从数据库中获取信息的一个基本语句。
该语句可以实现从一个或多个数据库中的一个或多个表中查询信息,并将结果显示为另
外一个二维表的形式,称之为结果集(result set)。
select col_name1,col_name2.... from tablename;
select:搜索的关键字
from:后面跟表名
col_name:列名
tablename:表名
“*”代表所有的列
select * from emp; *使用要慎重,实际工作中数据量大的时候禁用
查询表中的指定列
select empno,ename from emp; 查询出来的列数决定于select后面跟的列
select empno,ename from emp where ename='SMITH';
--查询员工编号、员工姓名,员工的部门编号,在后面加上一列9999
select empno,ename,deptno,9999 from emp;
过滤查询
select col_name1,col_name2 ..... from tablename where (case)
where :过滤的关键字
case:加的过滤条件
别名
为列取别名
为查询显示的每个输出字段或表达式取一个别名,以增加结果集的可读性,易于理解列
的含义!相当于起个外号一样,别名的效果范围仅在该SQL语句范围内,别名并不会改
变本名
--别名
select empno as 员工编号,ename as 员工姓名,sal as 员工工资 from emp;
select empno 员工编号,ename 员工姓名,sal 员工工资 from emp;
---表起别名
select * from emp;
select * from dept;
select d.* ,rownum from dept d;
select ename,dname,dept.deptno from emp,dept where emp.deptno=dept.deptno;
select e.ename,e.deptno, d.dname from emp e,dept d where e.deptno=d.deptno;
select empno 员工编号,ename 员工姓名,job 工作,mgr 上级领导编号,hiredate 入职日期,
sal 工资,comm 提成,deptno 部门编号 from emp;
去重
关键字:distinct
如果希望一个列表没有重复值,可以利用distinct子句从结果集中除去重复的行。
格式:SELECT DISTINCT 列名称 FROM 表名;
distinct 它只能放在所有列的最前面(它的前面不能写任何列)
distinct 单列:对单列进行去重
distinct 多列:当且仅当所有列的值同时相等时,才是重复数据
select distinct deptno from emp
连接符号“||”
1.将两个字段的字符串连接在一起
2.还可以在结果集中加入字符串
select * from emp;
select empno||ename,ename from emp;
select '员工编号是'||empno||',员工姓名是'||ename||9999 from emp;
--查询员工的姓名和工资,按这种格式显示:SMITH的工资是800块
select ename||'的工资是'||sal||'块' 工资信息 from emp ;
单引号:
在ORACLE中,单引号有两个作用:
1:字符串是由单引号引用
2:转义:单引号的使用是就近配对,即就近原则
--单引号
select 3,'haha', 'hello''' result from dual;
双引号:
1.包含特定字符或者空格或数字的列别名用双引号括起来(””),比如”a b”,”0~1000”
2.一般来说,字符串中的双引号仅仅被当作一个普通字符进行处理。
3.当出现在to_char的格式字符串中时,去掉双引号和其包含的字符后,剩下的应该是一
个合法的格式串。
select 'hello""' results from dual;
select sysdate "88" from dual;
select sysdate,'24"小时"30"分"7"秒"' results from dual;
select to_char(sysdate,'hh"小时"mi"分"ss"秒"') results from dual;
dual
dual是个虚拟表,只有一行一列,基本上oracle引入dual为的就是符合语法!
因为在oracle当中查询语句必须要有关键字 select ....from tablename; 只有这样语句才完
整,要是没有表名就无法查询,而时间,日期等不存在于任何表,这个时候就引入了
dual 虚表的概念。
select * from dual;
Select 1+2 from dual;
select sysdate from dual;
select 1 from dual where 1=0;
伪列
rownum:不是在物理上真实存在的列,它是对查询结果给了一个从一开始的排列数据,
获取到结果集之后再加上去的一个列
select * from emp;
select ename,sal,deptno,rownum,rowid from emp;
select ename,sal,deptno,rownum from emp where rownum<3;
select ename from emp where rownum>=3; ---伪列不能大于等于一个比一大的正整数
ROWNUM与ROWID不同,ROWID是插入记录时生成,ROWNUM是查询数据时生成。
ROWID标识的是行的物理地址。ROWNUM标识的是查询结果中的行的次序。
通过ROWNUM伪列可以限制查询结果集中返回的行数
作业
-
--为了方便查看而获取一份emp总表
select * from emp;
--1. 查询emp表中员工的名字和工资
select ename,sal from emp;
--2. 查询emp表中员工的编号,名字,奖金
select empno,ename,comm from emp;
--为了方便查看而获取一份dept总表
select * from dept;
--3. 查询部门编号和部门名称
select deptno from dept;
--4. 查询员工名字和入职日期(列名中文显示 名字, 入职日期)
select ename as 姓名,hiredate as 入职日期 from emp;
--5. 查询员工编号,名字,经理编号
select empno,ename,mgr from emp;
--6. 查询公司里的所有部门的部门编号(去重)
select distinct deptno from dept;
--7. 查询员工的姓名和工资,按这种格式显示:simth的工资是800块
select ename || '的工资是' || sal || '块' from emp;
--8. 使用虚拟表来查看系统日期
select sysdate from dual;
--9. 查看员工表的前五条数据
select rownum,emp.* from emp where rownum<='5';
--10. 查看员工表的rowid
select emp.*,rowid from emp;