1、简单的查询语法
select [distinct] *| [as] [列别名],列名称 [as] [列别名]
from 表名称 [表别名]
[where 条件(s)]
[order by 排序的字段 | 列索引号 asc|desc,排序的字段2 asc|desc ...]...;
执行顺序:
1、先执行from子句,确定要检索数据的来源
2、执行where子句,使用限定符对数据进行过滤
3、执行select子句,确定要检索出的数据列
4、执行order by子句排序
distinct:去除重复的列,当查询两条记录的所有的列都相同时才会去除重复
实例:
--查询emp表中的数据
SELECT * FROM emp;
--查询出公司员工编号,姓名,工作
select empno,ename,job from emp;
--起别名
select job as jobs from emp;
--去除重复的行记录
select distinct job as jobs from emp;
--查询出年工资,每天的工资
select empno,ename,sal*12 Annual_salary,sal/30 day_salary
from emp;
2、select子句后面编写常量
1、字符串常量:使用"'"声明,如:"se"
2、数字常量:直接输出数字,如:4532
3、日期:
4、单引号:(')
实例:
--增加货币单位的常量
select empno as 雇员编号,ename as 雇员姓名,(sal+200)*12+5000 as 年薪,'¥' 货币 from emp;
--连接符||的使用
select '编号:' || empno||' 的雇员姓名是:'||ename 雇员信息 from emp;
3、限定查询
3.1常用的限定查询运算符
NO | 函数名称 | 描述 |
---|---|---|
关系运算符 |
,<,>=,<=,=,!=,<> | 进行大小或相等的比较,不等于:!=和<> |
判断null | is null,is not null | 判断某一列的内容是否为null |
逻辑运算符 | and,or,not | and:与,or:或,not:非 |
范围查询 | between最小值and最大值 | 在指定范围内查找,查找结果为:最小值<=内容<=最大值 |
列表范围查询 | in | 通过in可以指定一个范围的查询 |
模糊查询 | like | 对字段进行模糊匹配 |
3.2 限定查询的实例
--工资高于1200的所有与员工的信息
select * from emp where sal >1200;
--查询出所有业务员(CLEARK)雇员的信息
select * from emp where job='CLERK'
--查询出10部门中的激励或者20部门中业务员的信息
select * from emp
where (deptno=20 and job='CLEARK') OR (deptno=10 and job='MANAGER')
--查询出在1981年雇佣的全部雇员信息
select *
from emp
where hiredate between '01-1月-1981' and '31-12月-1981'
--查询出佣金不为空的信息
select *
from emp
where comm is not null;
select *
from emp
where not comm is null;
--in的指定范围的查询
select *
from emp
where empno in(7369,7788,7566);
--现在查询除了7369,7788,7566之外的雇员的信息
select *
from emp
where empno not in(7369,7788,7566);
4、模糊查询like,not like
百分号(%):可匹配任意类型和长度(可以匹配0位,1位或多位长度)的字符
下划线(_):匹配单个任意字符,通常来限制表达式的字符长度
实例:
--查询出雇员姓名以S开头的所有雇员的信息
select *
from emp
where ename like 'S%'
--查询出第二个字母是M的全部雇员信息
select *
from emp
where ename like '_M%'
-- 查询出姓名中任意位置包含字母F的雇员信息
select *
from emp
where ename like '%F%'
--找出10部门中所有的经理(MANAGER),部门20中所有的业务员(CLEARK),既不是经理又不是业务员但薪金大于2000元的所有员工的详细资料并且要求这些雇员的西宁中包含字母S或字母K
select * from emp
where ((deptno=10 and job='MANAGER')or (deptno=20 and job='CLERK')
or (job not in ('MANAGER','CLEARK')and sal >2000))
and(ename like '%S%' or ename like '%K%')
5、对结果进行排序
--排序的查询语句
select empno,ename,sal,job
from emp
order by 3 desc
--order by sal desc
--按照工资由高到低排序,工资相等的话按照雇佣日期由早到晚进行排序
select * from emp
order by sal desc,hiredate asc;