SELECT是从数据库中提取数据!结果被存储在一个结果表中,称为结果集。
一FROM子句 ——9个点
- 如何从表中查询一个字段对应的内容
SELECT 字段名 FROM 表名;
——从 emp 表中 查询 sal 对应的内容
SELECT SAL FROM EMP;
select sal from emp;
SELECT sal FROM emp;
- 如何从表中查询多个字段对应的内容
SELECT 字段名1,字段名2,字段名3 FROM 表名;
—— 字段名 使用 英文逗号 隔开查询emp 表中 empno ename sal 对应的内容
select empno,ename,sal from emp;
- 查询表中所有的字段对应的数据
select empno,ename,sal,hirdate,comm,deptno
FROM emp;
SELECT empon,
ename,
job,
mgr,
hiredate,
sal,
comm,
depton on
FROM emp;
—— * 号可以代表所有的字段名 , * 号的写法没有上面的效率高,但可读性差。
select * from emp;
—— 如果sql出错,可以使用[edit]编辑[.sql]文件,保存退出之后,再使用斜杠(SQL>/)执行 。
sql 中的数学运算操作符
+加 -减 *乘 / [除] 例如:
select sal,sal+1000 from emp;
能不能显示 每个员工的月薪 和 每个员工的年薪
select sal,sal*12 from emp;
一个月按照22 天计算,算算一天多少钱(注:sql语句中没有取整特性)
select sal,sal/22 from emp;
- 字段/表达式的别名
—— 在字段/表达式之后 可以设置一个名字 这个名字可以代表这个字段/表达式
select ename name,sal salary,sal*12 yearsal from emp;
—— 每个字段/表达式 只能有一个别名,并且别名默认会变成大写
select ename name,sal salary,sal*12 year sal from emp;
—— 如何解决上面的错误?(使用双引号可以原样显示数据和处理特殊字符)
select ename name,sal salary,sal*12 "year sal" from emp;
+ sql中如何表达字符串——使用单引号
'' 、 ' ' 、 'a' 、'&' 、 'hello world'
字符串 拼接
——||字符串拼接符号 只适合于oracle 其它数据思想是使用相应的函数
select empno||ename myname from emp;
—— 在 empno 和 ename 之间 拼接一个下划线字符串
select empno||'_'||ename from emp;
——在 empno 和 ename 之间 拼接一个单引号字符串需要使用两个单引号表达一个单引号
select empno||''''||ename from emp;
- 空值的处理
—— NULL 值和任何值做运算都是NULL,显示每个员工的员工编号和这个员工编号和直接领导编号mgr的和
select empno,empno+mgr from emp;
—— Oecale中引入了一个函数nvl用来处理 NULL 值
nvl(par1,par2)当par1值为NULL时就返回par2对应的值当par1不为NULL 则直接返回 par1的值
select empno,empno+nvl(mgr,empno) from emp;
数据排重——distinct
select mgr from emp;
select distinct mgr from emp;
——联合排重
select distinct empno,mgr from emp;
id name 1 a 1 b 1 a
WHERE 子句
1.作用
限制表中的行数据 返回的
符合where条件的数据 被选中 不符合的数据被过滤掉
2.两个极限条件
where 1=1; 恒等 永真
where 1=2; 恒不等 永假
select empno ,ename from emp;
select empno ,ename from emp where 1=1;
select empno ,ename from emp where 1=2;
no rows selected
3.Number 类型的条件表达
查询一个员工 empno 等于 7839 显示 empno 和 ename
select empno,ename from emp where empno=7839;
查询一个员工 empno 不等于 7839 显示 empno 和 ename
select empno,ename from emp where empno!=7839;
select empno,ename from emp where empno <> 7839;
= <=
4.字符串类型条件的表达
找一个员工 名字 叫 SCOTT 显示他的empno ename sal
select empno,ename,sal from emp where ename=’SCOTT’;
sql语句大小写不区分
字符串的值大小区分
注意字符串的值 需要使用单引号
5.SQL运算符
- 常见的运算符
= != <> >= <= > < 表达一个闭区间 [a,b]
where 字段名 between a and b;
——找员工 编号在 [7839,7850] 之间的员工 显示 empno ename
select empno,ename from emp where empno between 7839 and 7850;
表达一个字段的值出现在一个列表范围内
where f in (a,b,c);
f 等于其中任何一个
——找出工资 是 2000 或者是 3000 或者是 5000 的人
select empno,ename,sal from emp where sal in (2000,3000,5000);
NULL值的判断——f is null;
——判断f的值是不是NULL,是NULL数据则条件成立,否则条件返回假select distinct mgr from emp; select distinct mgr from emp where mgr = 7839; select distinct mgr from emp where mgr != 7839;
—— 基本运算符对NULL判断无效
select distinct mgr from emp where mgr is null;
模糊查询——关键字like
实例:
——找出所有姓李的人?李靖 李奎 李广 李世民 李小龙 找出所有以 txt 结尾的
找所有带龙的昵称成龙 李小龙 七龙珠 小龙女 龙腾青云 ——语法格式:
where like '模糊查询字符串';
模糊查询通配符[ _ ] 代表一个任意字符,[ % ]代表0-n个任意字符where f like '李%';
where f like '%txt';
where f like '%龙%';
——查询emp 表中所有带A的ename
select ename from emp where ename like '%A%';
——查询emp 表中 所有第二个字符是 A的ename
select ename from emp where ename like '_A%';
——找出 user_tables 表中有一个table_name 代表表名,找出表名中带有 _S 的表(转义问题,这个转义需要使用 escape 关键字,说明那个字符后的字符需要需要)
select table_name from user_tables where table_name like '%\_S%' escape '\';
逻辑条件运算符
在高级语言中——&& || !
在SQL中————and or not[2000,5000] where s between 2000 and 5000;
where s>=2000 and s <=5000;
f in (30,40,20); where f=30 or f=40 or f=20;对立面问题 注意NULL
= != <> > <= < >= between and --- ---not between and in --- ---not in like --- ---not like is null --- ---is not null
优先级问题
——数据库() 随便用
12*sal + 100 12*(sal+100)