15. 简单查询
可以跟在 select、update、delete语句后面进行条件限定,使用where条件
15.1 where条件语法
比较操作符
SELECT * FROM emp WHERE sal >3000
BETWEEN...AND..
SELECT * FROM emp WHERE sal BETWEEN 3000 AND 3500
IN( 集合列表)
SELECT * FROM emp WHERE deptno = 10 OR deptno = 20
SELECT * FROM emp WHERE deptno IN (10,20)
LIKE % 匹配0到多个字符, _ 有且仅有一个
SELECT * FROM emp WHERE ename LIKE 'S____' SELECT * FROM emp WHERE ename LIKE 'K%'
IS NULL
SELECT * FROM emp WHERE comm IS NULL
LIKE 子句
LIKE运算符 %与_组合使用 %代表任意字符 ,_ 有且仅有一个
SELECT ename
FROM emp
WHERE ename LIKE '_L%';
如果需要将"_"或者是"%"转义,可以使用escape 指定转义字符
SELECT * FROM emp WHERE ename LIKE '@_%' ESCAPE '@';
15.2 逻辑运算
AND 逻辑与,用来连接多个条件表达式。如果每个条件表达式的结果都为TRUE,整个表达式的结果才为TRUE。
OR 逻辑或,用来连接多个条件表达式。只要有1个条件表达式的结果为TRUE,整个表达式的结果就为TRUE
NOT 逻辑非,用来对条件表达式取反。TRUE取反为FALSE,FALSE取反为TRUE。
SELECT * FROM emp WHERE ename NOT LIKE '@_%' ESCAPE '@';
15.3 条件语句练习1
-- 1.查询职位为SALESMAN的员工编号、职位、入职日期。 SELECT * FROM emp WHERE job ='SALESMAN' ;
--2.查询1985年12月31日之前入职的员工姓名及入职日期。 SELECT * FROM emp WHERE hiredate < '1985-12-21';
-- 3.查询部门编号不在10部门的员工姓名、部门编号。 SELECT ename ,deptno FROM emp WHERE deptno <> 10;
-- 4查询入职日期在82年至85年的员工姓名,入职日期。 SELECT ename,hiredate FROM emp WHERE hiredate BETWEEN '1982-01-01' AND '1985-12-31'
-- 5 查询月薪在3000到5000的员工姓名,月薪。 SELECT ename,sal FROM emp WHERE sal BETWEEN 3000 AND 5000
-- 查询部门编号为10或者20的员工姓名,部门编号。 SELECT ename ,deptno FROM emp WHERE deptno =10 OR deptno =20; SELECT ename ,deptno FROM emp WHERE deptno IN (10,20);
-- 查询经理编号为7902, 7566, 7788的员工姓名,经理编号。 SELECT ename,mgr FROM emp WHERE mgr IN (7902,7566,7788);
15.4 条件语句练习2
1.查询工资超过2000并且职位是MANAGER,或者职位是SALESMAN的员工姓名、职位、工资
2.查询工资超过2000并且职位是 MANAGER或SALESMAN的员工姓名、职位、工资。
3.查询部门在10或者20,并且工资在3000到5000之间的员工姓名、部门、工资。
4.查询入职日期在81年,并且职位不是SALES开头的员工姓名、入职日期、职位。
5.查询职位为SALESMAN或MANAGER,部门编号为10或者20,姓名包含J的员工姓名、职位、部门编号。
-- 1.查询工资超过2000并且职位是MANAGER,或者职位是SALESMAN的员工姓名、职位、工资
SELECT
ename 姓名,
job 职位,
sal 工资
FROM
emp
WHERE (
sal>2000 AND job ='MANAGER'
)
OR (job ='SALESMAN' )
-- 2.查询工资超过2000并且职位是 MANAGER或SALESMAN的员工姓名、职位、工资。
SELECT
ename 姓名,
job 职位,
sal 工资
FROM
emp
WHERE sal>2000 AND ( job ='MANAGER' OR job ='SALESMAN' );
-- 3.查询部门在10或者20,并且工资在3000到5000之间的员工姓名、部门、工资。
SELECT
ename 姓名,
deptno 部门,
sal 工资
FROM
emp
WHERE deptno IN(10,20) AND sal BETWEEN 3000 AND 5000 ;
-- 4.查询入职日期在81年,并且职位不是SALES开头的员工姓名、入职日期、职位。
SELECT
ename 姓名,
hiredate 入职日期,
job 职位
FROM
emp
WHERE (hiredate BETWEEN '1981-01-01' AND '1981-12-31' ) AND job NOT LIKE 'SALES%'
-- 5.查询 职位为SALESMAN或MANAGER,部门编号为10或者20,姓名包含J的员工姓名、职位、部门编号。
SELECT
ename 姓名,
job 职位,
deptno 部门
FROM
emp
WHERE (job IN ('SALESMAN','MANAGER'))
AND (deptno IN (10,20))
AND (ename LIKE '%J%')
15.5.排序
ORDER BY子句
SELECT [DISTINCT] { * | 列名 |表达式 [别名][,...]} FROM 表名 [WHERE 条件] [ORDER BY {列名|表达式|列别名|列序号} [ASC|DESC],…];
可以按照列名、表达式、列别名、结果集的列序号排序 ASC: 升序,默认值 DESC: 降序 ORDER BY 子句必须写在SELECT语句的最后
-- 列名
SELECT * FROM emp ORDER BY mgr
-- 列名
SELECT * FROM emp ORDER BY 2
-- 表达式
SELECT t.empno/3, t.* FROM emp t ORDER BY t.empno/3
-- 别名
SELECT empno eno FROM emp ORDER BY eno
-- asc 默认升序,desc降序 ,多个排序条件组合
SELECT mgr,sal, empno,ename,job FROM emp ORDER BY mgr,sal DESC
15.5.1 排序练习
1.查询部门在20或30的员工姓名,部门编号,并按照工资升序排序。 2.查询工资在2000-3000之间,部门不在10号的员工姓名,部门编号,工资,并按照部门升序,工资降序排序。 3.查询入职日期在82年至83年之间,职位以SALES或者MAN开头的员工姓名,入职日期,职位,并按照入职日期降序排序。
-- .查询部门在20或30的员工姓名,部门编号,并按照工资升序排序。
SELECT ename,deptno,sal FROM emp WHERE deptno IN (20,30) ORDER BY sal ASC;
-- 查询工资在2000-3000之间,部门不在10号的员工姓名,部门编号,工资,并按照部门升序,工资降序排序。
SELECT ename,deptno,sal FROM emp WHERE sal BETWEEN 2000 AND 3000 AND deptno <>10
ORDER BY deptno ASC ,sal DESC;
-- 查询入职日期在82年至83年之间,
-- 职位以SALES或者MAN开头的员工姓名,入职日期,职位,并按照入职日期降序排序。
SELECT
ename,
hiredate,
job
FROM
emp
WHERE (
hiredate BETWEEN '1981-01-01'
AND '1983-12-31'
)
AND (job LIKE 'SALES%'
OR job LIKE 'CL%')
ORDER BY hiredate DESC;
15.6 限制记录的行数
imit 语句限定查询条数, 常用语分页
使用select语句时,经常要返回前几条或者中间某几行记录,可以使用关键字limit。语法格式如下: select 字段列表 from 数据源 limit [start,]length; 说明: 1.limit接受一个或两个整数参数。start表示从第几行记录开始输出,length表示输出的记录行数。 2.表中第一行记录的start值为0(不是 1)。
-- 10
SELECT * FROM emp LIMIT 10;
SELECT * FROM emp ;
15
-- 每页显示行数 pageCount 10
-- 页号 pageNum
-- 总条数 total 15
-- 总页数 total%pageCount ==0 ? total/pageCount : (total/pageCount)+1
-- start (pageNum -1) * pageCount
-- length pageCount
/** (pageNum -1) * pageCount pageCount
pageNum start length
1 0 10
2 10 10
3 20 10
4 30 10
*/
-- 每5条显示一页
-- 第一页
SELECT * FROM emp LIMIT 0 ,5 ;
-- 第二页
SELECT * FROM emp LIMIT 5 ,5 ;
-- 第三页
SELECT * FROM emp LIMIT 10 ,5 ;
-- 第四页 没有数据
SELECT * FROM emp LIMIT 15 ,5 ;
