Oracle 19C学习 - 03. 使用where进行条件查询和数据排序
(本博文采用的数据库是Oracle自带的hr用户范本数据库)
WHERE命令进行搜索结果的限制
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
WHERE子句位于FROM命令之后。
SELECT * FROM EMPLOYEES WHERE department_id = 100;
作为常量的字符串和日期都要用单引号引起来,字符串要区分大小写。
日期 常量按照‘DD-MMM-YY’来写,中文系统的月份用中文写,英文系统的月份用OCT, AUG这样的缩写来写。
SELECT * FROM employees WHERE last_name = 'Popp';
SELECT * FROM employees WHERE hire_date='07-12月-07'
比较运算符操作
SELECT last_name 名字, salary 工资 FROM employees WHERE salary <> 3000; --不等于还可以写为 !=
SELECT last_name 名字, salary 工资 FROM employees WHERE salary BETWEEN 2500 AND 3000 --工资在2500 -3000的人
-- IN运算符查找department_id为90 或 100的人 SELECT * FROM employees WHERE department_id IN (90,100);
-- LIKE命令使用的时候, %代表通配符,_代表单字符通配符。 SELECT * FROM employees WHERE last_name LIKE 'K%' AND first_name LIKE '%g';
-- 使用LIKE找到姓的第二个字母是a,倒数第二个字母也是a的人。 SELECT * FROM employees WHERE last_name LIKE '_a%' AND last_name LIKE '%a_';
-- IS NULL 查找含有空值的记录。 SELECT last_name, salary, commission_pct FROM employees WHERE commission_pct IS NULL; -- IS NOT NULL 查找不为空值的记录。 SELECT last_name, salary, commission_pct FROM employees WHERE commission_pct IS NOT NULL;
逻辑运算符操作
-- AND: 找出来工资大于1000并且名字带man的人 SELECT last_name, first_name, salary FROM employees WHERE salary > 1000 AND last_name LIKE '%man%' -- OR: 找出来工资大于1000,或者名字带man的人 SELECT last_name, first_name, salary FROM employees WHERE salary > 1000 OR last_name LIKE '%man%' -- NOT: 找出来所有职位不是'IT_PROG', 'ST_CLERK', 'SA_REP'的人 SELECT last_name, salary FROM employees WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP')
使用ORDER BY子句对结果进行排序
SELECT column_name,column_name
FROM table_name
ORDER BY column_name ASC|DESC ,column_name ASC|DESC;
--使用ORDER BY对工资进行降序排序。 SELECT first_name || '.' ||last_name 姓名, salary 工资 FROM employees ORDER BY salary DESC; --使用列别名同样可以排序。 SELECT first_name || '.' ||last_name as 姓名, salary as 工资 FROM employees ORDER BY 姓名; --按照列号也能够排序。 SELECT first_name ,last_name 姓名, salary 工资 --按照last_name进行排序 FROM employees ORDER BY 2; --按照多列进行排序。比如先按照部门进行升序排序,然后再在本部门内,进行工资的降序排序。 SELECT last_name, department_id, salary FROM employees ORDER BY department_id ASC, salary DESC;
SQL行限制子句
FETCH FIRST n ROWS ONLY:取出前n行的数据。
-- Fetch FIRST n ROWS ONLY 取出前5行数据 SELECT last_name, department_id, salary FROM employees ORDER BY salary FETCH FIRST 5 ROWS ONLY;
OFFSET n ROWS FETCH NEXT n ROWS ONLY : 跳过某些行以后再往后取n行数据。
-- OFFSET n ROWS FETCH NEXT n ROWS ONLY 跳过两行,取5行数据。 SELECT last_name, department_id, salary FROM employees ORDER BY salary OFFSET 2 ROWS FETCH NEXT 5 ROWS ONLY;
替代变量
在SQL语句中,可以使用& 或者&&定义变量。
一个&的变量,每次遇到都要求进行赋值, 即使是同一句语句的同名变量,都要每次赋值。
SELECT last_name, salary FROM employees WHERE employee_id = '&JOBID'; --&JOBID为变量名
SELECT last_name, salary
FROM employees
WHERE employee_id = '&JOBID'; --再执行这个语句时,仍然要求输入&JOBID的值
两个&&的变量相当于全局变量,全局变量在给定一次值以后,运行所有的语句都不会再要求输入值。
SELECT last_name, salary FROM employees WHERE employee_id = '&&EMP_ID'; --这里直接以102代入
SELECT last_name, salary
FROM employees
WHERE employee_id = '&&EMP_ID'; --这里直接以102代入,不再提示输入EMP_ID的值了
如果是字符的变量,必须将变量名放到单引号之间。
SELECT last_name, salary, job_id FROM employees WHERE last_name = '&emp_name' --输入king可以查询 last_name是King的人员。 SELECT last_name, salary FROM employees WHERE hire_date = '&hiredate' --输入30-1月-04
用变量替代列名。
SELECT last_name, department_id, job_id, &&column
FROM employees
ORDER BY &&column
DEFINE和UNDEFINE进行变量操作
DEFINE var_name = value 声明一个变量并赋值。
UNDEFINE var_name 删除变量
&var_name 引用变量
DEFINE employee_name = 'King' SELECT * FROM employees WHERE last_name = '&employee_name' --要用&来引用变量,字符串变量用单引号包围。 ORDER BY last_name ASC; UNDEFINE employee_name;
SET VERIFY ON 验证变量的值
在SQLPLUS中使用这个命令,可以用来显示变量新旧值的变化。
默认SET VERIFY ON的。
#默认VERIFY是ON的,会提示新旧值。
SQL> select first_name, last_name from employees 2 where first_name like '&emp'; Enter value for emp: L% old 2: where first_name like '&emp' new 2: where first_name like 'L%' FIRST_NAME LAST_NAME -------------------- ------------------------- Laura Bissot Lex De Haan #这里设置为OFF,不再提示新旧值。 SQL> set verify off; SQL> select first_name, last_name from employees 2 where first_name like '&emp'; Enter value for emp: L% FIRST_NAME LAST_NAME -------------------- ------------------------- Laura Bissot Lex De Haan
在SQLDeveloper中要把SET VERIFY ON;与其他的语句一起选择起来执行才能看到效果。
posted on 2021-05-02 14:46 LeoZhangJing 阅读(355) 评论(0) 编辑 收藏 举报