【oracle】sql查询2

sql操作符

1. LIKE:检查列值是否匹配指定的模式;模式字符串中可以使用普通字符以及两个通配符: _和%。_ 代表任意单个字符;% 代表任意长度(长度可以为0)的字符串。

因为_和%在模式字符串中具有特殊含义,因此如果要匹配这两个字符,可使用escape选项来标识这些字符。
 

-- 检索promotions表中, name列的值包含%字符的行
select * from promotions t where name like '%\%%' escape '\ '

注: NOT LIKE表示不匹配指定的模式。当列值为空时,永远返回false。

2. 确定取值的集合:IN (…,…,…) 圆括号中是用逗号分隔的一组取值。等同于 = any()
NOT IN (…,…,…) 和IN操作结果相反。等同于 != all()
注意:如果值列表中含有null,则not in的运算结果永远为false,那么一条记录也不会被检索出来。

select product_id,name,product_type_id
from products
where  product_type_id not in(1,2,null);

3. BETWEEN … AND …
NOT BETWEEN … AND …
用于确定取值范围(闭区间)。

4. IS NULL 涉及空值的查询
“IS NULL” 不能用 “= NULL” 代替
IS NOT NULL

多重条件查询
运算符优先级
比较运算符 > NOT > AND > OR
对查询结果排序
使用ORDER BY子句:

--对查询结果排序
--控制空值位置
select * 
from employees
order by salary desc nulls last,employee_id asc;

注:当排序列含空值时,ASC:排序列为空值的元组最后显示;DESC:排序列为空值的元组最先显示。可以使用nulls last或nulls first改变空值显示顺序。
多表连接查询
1. 用来连接两个表的条件称为连接条件,连接条件中的连接字段类型必须是可比的,但不必是相同的;连接条件可分为两类:等连接和不等连接。
 

--查询编号为3的产品的名称和它的类型名称
select prd.name, tps.name from products prd, product_types tps
where product_id = 3 and prd.product_type_id != tps.product_type_id;

2. 笛卡尔积
如果在多表查询中不指定连接条件,就会导致将一个表中的所有行都连接到另一个表中的所有行,这种情况称为笛卡尔积。返回的结果记录总数是两个表中记录数的乘积。
3. 左外连接:将左表中多余的项目也添加到结果记录集中。

--左外连接
--查询产品名和类型名,某些产品暂时还没有类型,也要求输出产品名。
select prd.name,tps.name
from products prd,product_types tps
where prd.product_type_id=tps.product_type_id(+);


右外连接:将右表中多余的项目也添加到结果记录集中。

--右外连接
--查询产品名和类型名,某些产品类型暂时还没有对应的产品,也要求输出类型名。
select prd.name,tps.name
from products prd,product_types tps
where prd.product_type_id(+)=tps.product_type_id;


自连接:同一个表连接到自身。

--自连接
--检索员工的姓名和他的上司的姓名。
select emp1.first_name||' '||emp1.last_name emp_name,
       emp2.first_name||' '||emp2.last_name mag_name
from employees emp1,employees emp2
where emp1.manager_id=emp2.employee_id(+);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章