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运算找出来部门编号为90和100的人员
SELECT *
FROM employees
WHERE department_id IN (90,100);
LIKE命令使用的时候, %代表通配符,_代表单字符通配符。
使用LIKE找到lastname是K开头,firstname为g结尾的人员。
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;
逻辑运算符操作
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,column_name ASC|DESC;
使用ORDER BY对工资进行降序排序。
SELECT first_name || ‘.‘ ||last_name 姓名, salary 工资
FROM employees
ORDER BY salary DESC;
使用列别名同样可以排序。
SELECT first_name || ‘.‘ ||last_name 姓名, salary 工资
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行的数据。
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行数据。
SELECT last_name, department_id, salary
FROM employees
ORDER BY salary
OFFSET 2 ROWS FETCH NEXT 5 ROWS ONLY;
替代变量
在SQL语句中,可以使用& 或者&&定义变量。
一个&的变量,每次遇到都要求进行赋值, 即使是同一句语句的同名变量,都要每次赋值。
SELECT &A FROM dual; --这里输入102
SELECT last_name, salary
FROM employees
WHERE employee_id = &A; --这里仍然提示输入值
两个&&的变量相当于全局变量,全局变量在给定一次值以后,运行所有的语句都不会再要求输入值。
SELECT &&A FROM dual; --这里输入102
SELECT last_name, salary
FROM employees
WHERE employee_id = &&A; --这里直接以102代入
如果是字符的变量,必须将变量名放到单引号之间。
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 employee_num = 200 声明一个变量并赋值。
UNDEFINE employee_num 删除变量
DEFINE employee_name = ‘King‘ SELECT * FROM employees WHERE last_name = ‘&employee_name‘ --要用&来引用变量,字符串变量用单引号包围。 ORDER BY last_name ASC; UNDEFINE employee_name;
SET VERIFY ON 验证变量的值
在SQLPLUS和SQLDeveloper中可以用来显示变量新旧值的变化。
SQL> SET VERIFY ON; SQL> SELECT * FROM employees 2 WHERE employee_id = &emp_id; Enter value for emp_id: 102 old 2: WHERE employee_id = &emp_id new 2: WHERE employee_id = 102 EMPLOYEE_ID FIRST_NAME LAST_NAME ----------- -------------------- ------------------------- EMAIL PHONE_NUMBER HIRE_DATE JOB_ID ------------------------- -------------------- ------------------- ---------- SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID ---------- -------------- ---------- ------------- 102 Lex De Haan LDEHAAN 515.123.4569 2001-01-13 00:00:00 AD_VP 17000 100 90
在SQLDeveloper中要把SET VERIFY ON;与其他的语句一起选择起来执行才能看到效果。