5、 两个之间的值(BETWEEN···AND···)
如:
SELECT *
FROM EMPWHERE AGE BETWEEN 15 AND 20
6、 等于值中的任意一个(in(set,set,set))
如:
SELECT *
FROM EMPWHERE AGE in(15,18,20)
7、 模糊查询(LIKE)
注:在LIKE中模糊查询‘_’表示一个字符,‘%’表示零个或者多个字符。当遇到特殊字符的时候使用‘ESCAPE’关键字
如:模糊查询拥有‘IT\’的信息
SELECT EMP_ID
FROM EMP
WHERE EMP_ID LIKE ‘%IT\%’ESCAPE ‘\’;
8、 空值(IS NULL)、否(NOT)、并且(AND)、或者(OR)
如:查询 EMP中不为空的信息
SELECT *
FROM EMP
WHERE SEX IS (NOT) NULL --(不)为空
例如:查询已经达到结婚年龄的男生
select *
from students
where SAGE >= 23 AND SSEX = '男'
查询已经达到结婚年龄的男生或女生
select *
from students
where SAGE >=23AND SSEX = '男' OR SAGE >=21 AND SSEX = '女' 在比较运算中每个运算符号都有一个优先顺序的等级说法,等级越在前优先级越高(使用括号可以改变优先顺序)
a. 算术运算符
b. 连接符
c. 比较符
d. IS [NOT] NULL, LIKE, [NOT] IN
e. [NOT] BETWEEN
f. NOT
g. AND
h. OR
9、 排序(ORDER BY)
ORDER BY子句用于SELECT语句的结尾
排序又分为升序(ASC)与降序(DESC)这两种
如:select *
from students
ORDER BY ID ASC
10、 多表查询
使用连接多个表中对应的数据进行连接
SELECT a.column, b.column
FROM table1 a, table2 b
WHERE a.column1 = b.column2; 连接N个表就至少需要N-1个连接条件。
在多表查询中有种连接方式 (1) 等值连接:等值数据连接
如:查询当前员工所在的部门
SELECT e.Employee_Id,e.First_Name,d.DEPARTMENT_NAME
FROM employees e,departments d
where e.department_id = d.department_id
(2) 非等值连接:
如:查询工资所在等级
SELECT e.last_name, e.salary, j.grade_level
FROM employees e, job_grades j
WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;
(3) 外连接
在外连接中又分为左连接和右连接以及满外连接
外连接可以查询不满足连接条件的数据
左外连接意思是查询左侧数据不满足条件的行
右外连接意思是查询右侧数据不满足条件的行
满外连接意思是返回两个表中不满足条件的行
如:左外连接
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column = table2.column(+);
+------------+----------+-----+
| ID | NAME | AGE |
+------------+----------+-----+
| 1 | | |
+------------+----------+-----+
右外连接
SELECT table1.column, table2.column
WHERE table1.column(+) = table2.column;
FROM table1, table2
+------------+----------+-----+
| ID | NAME | AGE |
+------------+----------+-----+
| | 张三 | 18 |
+------------+----------+-----+
满外连接
SELECT table1.column, table2.column
FROM table1 a
FULL OUTER JOIN table2 b
ON (a.ID = b.ID);
+------------+----------+-----+
| ID | NAME | AGE |
+------------+----------+-----+
| 1 | | |
| | 张三 | 18 |
+------------+----------+-----+
(4) 自连接
自连接就是连接自身的表数据。
例如:查询员工的上级经理是谁
SELECT a.LAST_NAME ||’的上级领导是’b.LAST_NAME
FROM employees a,employees b
Where a.manager_id = b.manager_id
(6) USING子句
自然匹配可能会会匹配到多个列,所以USING子句是在自然连接的等值连接中作为指定等值连接所需要用的列。
例如:查询学生的各科成绩并且其老师的姓名
select SNO,SNAME AS "学生",SSEX,DEGREE,CNAME,TNAME,PROF,DEPARY
from Student JOIN Score USING(SNO)
JOIN Course USING(CNO)
JOIN Teacher USING(TNO)
(7) ON子句
ON子句也是自然连接中是以具有相同名字的列为连接的条件,ON子句也是语句更具有易读性
例如:查询学生的各科成绩并且其老师的姓名
select a.SNO,a.SNAME AS "学生",a.SSEX,b.DEGREE,c.CNAME,d.TNAME,d.PROF,d.DEPARY
from Student a JOIN Score b ON (a.SNO = b.SNO)
JOIN Course c ON(b.CNO = c.CNO)
JOIN Teacher d ON(c.TNO = d.TNO) 五、函数 (1) 单行函数 1) 字符函数 1.大小写控制函数 大小写控制函数顾名思义就是控制大小写的作用 转换小写-------LOWER("SQL Course") 转换大写-------UPPER("SQL Course") 转换首字母大写-INITCAP("SQL Course") 如:select LOWER(FIRST_NAME), UPPER(LAST_NAME), INITCAP(EMAIL) from employees +------------------+----------------+--------------+ |LOWER(FIRST_NAME) |UPPER(LAST_NAME)|INITCAP(EMAIL)| +------------------+----------------+--------------+ | steven | KING | Sking | +------------------+----------------+--------------+ 2.字符控制函数 a. 拼接:CONCAT('Hello', 'World')------------HelloWorld b. 间值:SUBSTR('HelloWorld',1,5)------------Hello c. 总数:LENGTH('HelloWorld')----------------10 d. 位置:INSTR('HelloWorld', 'W')------------6 e. 左补齐:LPAD(salary,10,'*')---------------*****24000 f. 右补齐:RPAD(salary,10,'*')---------------24000***** g. 去除:TRIM('H' FROM 'HelloWorld')---------------elloWorld h. 替换:REPLACE('abcd','b','m')-------amcd
六、子查询
允许把一个查询嵌套在另一个查询当中
子查询会返回一个标量(就一个值)、一个行、一个列或一个表
子查询常出现在FROM语句、WHERE语句以及HAVING语句中
SELECT select_list
FROM table a,(SELECT select_list
FROM table) b
WHERE select_list = (SELECT select_list
FROM table)
HAVING MIN(select_list) < (SELECT MIN(select_list)
FROM employees); 多行子查询
多行比较操作符IN
等于列表中的任意一个
ANY和操作符返回的某个值比较
ALL和子查询返回的所有值比较
ANY和ALL之间的区别是任意一值与所有值得差别
七、SET运算符
SET操作符用于两个或者多个表的对比查询
并集:UNION/UNION ALL
交集:INTERSECT
差距:MINUS
a. UNION 操作符返回两个查询的结果集的并集
例如:SELECT 1,2,3,4,5,7
FROM DUAL
UNION
SELECT 1,2,3,4,6
FROM DUAL
得到的结果是1,2,3,4,5,6,7
b. UNION ALL 操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。
例如:SELECT 1,2,3,4,5,7
FROM DUAL
UNION ALL
SELECT 1,2,3,4,6
FROM DUAL
得到的结果是1,1,2,2,3,3,4,4,5,6,7
c. INTERSECT 操作符返回两个结果集的交集
例如:SELECT 1,2,3,4,5,7
FROM DUAL
INTERSECT
SELECT 1,2,3,4,6
FROM DUAL
得到的结果是5,6,7
d. MINUS操作符:返回两个结果集的差集
例如:SELECT 1,2,3,4,5,7
FROM DUAL
MINUS
SELECT 1,2,3,4,6
FROM DUAL
得到的结果是5,7
a. 创建视图
创建视图使用 CREATE VIEW ···AS···语句插入子查询
子查询可以使复杂的SELECT语句
创建视图时可以在子查询中给列定义别名或者视图名后面定义别名
如:CREATE VIEW viwe_name
AS SELECT column ,column,column
FROM table
或者
CREATE VIEW viwe_name(name,sex,age)
AS SELECT column ,column,column
FROM table
或者
CREATE VIEW viwe_name
AS SELECT column name,column sex,column age
b. 修改视图
使用CREATE OR REPLACE VIEW ··· AS···子句修改视图
如:CREATE OR REPLACE VIEW 即可创建又可修改
CREATE OR REPLACE VIEW viwe_name
AS SELECT column ,column,column
FROM table
c. 屏蔽操作视图
使用 WITH READ ONLY 选项屏蔽对视图的DML 操作,这样避免了用户误改视图导致视图出错的情况,但是,使用了WITH READ ONLY 也会到时视图无法更改
如:CREATE OR REPLACE VIEW 即可创建又可修改
CREATE OR REPLACE VIEW viwe_name
AS SELECT column ,column,column
FROM tableWITH READ ONLY
d. 删除视图
删除视图只是删除视图的定义,并不会删除基表的数据
DROP VIEW view_name;
e. TOP-N分析
Top-N 分析查询一个列中最大或最小的 n 个值
这个时候我们要用到伪类:ROWNUM
在ROWNUM的条件查询中,我们只能使用<(小于)或者<=(小于等于),不能使用=(等于),>(大于),>=(大于等于)
SELECT [column_list], ROWNUM
FROM (SELECT [column_list]
FROM table
ORDER BY Top-N_column)
WHERE ROWNUM <= N;
如:查询员工表中,工资排名在10-20之间的员工信息。
select *
from(select rownum rn,employee_id,salary
from(select employee_id,salary
from employeesorder by salary desc))
where rn <=20 and rn >10