Skip to content

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。

sql
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的员工姓名、职位、部门编号。

sql
-- 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语句的最后

sql
-- 列名
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开头的员工姓名,入职日期,职位,并按照入职日期降序排序。

sql
-- .查询部门在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 ;

Released under the MIT License.