相关子查询和非相关子查询
1.相关子查询:在主查询中,每查询一条记录,需要重新做一次子查询
2.非相关子查询:在主查询中,子查询只需要执行一次,子查询结果不再变化,供主查询使用
CSDN博客:http://blog.csdn.net/mascf/article/details/50288199
对于SQL语句任何输入输出都是一个关系(表),也就是说任何一个SQL语句的输出都可以作为灵另一个SQL语句的输入
查询的关键词的运算顺序:from > where > group by> having > select > order by
NULL表示不存在的值,因此一个值加上NULL还会是NULL,但是有些实际的情况希望能够把NULL当做0处理,因此会使用isnull函数,查询列名为NULL直接置为0
某一项不为空的写法:is not null
表示区间是可以写为between A and B,即在[A,B]区间
字符串模式匹配 like 'J%',查询以J开头的结果
查询第几个字母是什么的,得使用下划线,一个为一个字母
当想要查询有下划线或者百分号的行时,需要使用转义字符,用escape指定哪个(不可以是下划线和百分号)为转义字符
例:select empno,ename,sal,comm,sal+100,sal+isnull(comm,0)astotalincome
from emp
where ename like '_L%' escape 'M';
where是一个类似筛选的
where deptno in(10,20)
in后面是一个集合,此时查找的是deptno为集合中的元素的行数
聚集函数:以值得一个集合(集或多重集)为输入、返回单个值的函数。例如avg,min,max,sum,count
where的输出力度小于group by,group by是对where的同类行的分组
having是在分组之后再挑选指定的行,如果在select对该列重命名,having里用该列名会提示列名无效,因为运算的顺序having>select
select中如果想查询什么,此东西必须原封不动的写在group by中
order by按照某种顺序进行排列,默认是升序排列,加上DESC是降序排列
distinct去掉重复行,比如查找有员工的部门编号可以用distinct去除重复的部门的编号
集合运算:并(union),交(intersect),差(except)
并(union):自动去处重复,可使用union all加上重复
交(intersect):自动去处重复,可使用intersect all加上重复
差(except):自动去处重复,可使用except all加上重复
连接(join):SQL为把常规连接和外连接区分开,因此常把常规连接称作内连接(包括相等连接和自然连接)。(natural join = natural inner join)
自然连接(natural join):运算作用于两个关系,并产生一个关系作为结果。其将第一个关系的每个元组与第二个关系的所有元组都进行连接,自然连接只考虑那些在两个关系模式中都出现的属性上
取值相同的元组对。
外连接:
左外连接:左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列
表列均为空值;
右外连接:右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值;
全外连接:完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
子查询:
with语句用于在查询执行过程中临时生成一个表,后面可以直接使用。若想形成多个,不能使用多个with,可以直接用逗号加上另外的名字即可。
用with定义的临时视图必须要在后面用到,如果未使用有些数据库会报错。
case某一列,对其分类处理用when(类似于switch),最后加上end结束。
用case表达式找不到要返回的数值时,需要返回NULL。
selectempno,ename,deptno,case
when deptno=10 then'好'
when deptno=20 then'一般'
when deptno=30 then'穷'
else'穷'
end as level
fromemp;
数据库修改语句:
1.删除(delete):删除操作只能删除整个元组而不能只删除,而不能只删除某些属性上的值。语句如下:delete from r where P;
2.插入(insert):a.向表中插入一个行(可指定列),格式为insert into r(列名,列名…) values('…','…',…)
b.insert语句允许吧一个或多个表中的多个行复制到另一个表,格式为insert into r(列名,列名…)select… 其中select子句可以是任何有效的语句,插入给定表中的行就是来自于子查
询所生成的查询结果表。
3.更新(update):update语句允许改变给定表中已存在的行的内容,格式为update r set columnName1=dataValue1… where … r是基表或可更新视图的名字。set子句指定需要更新的一个或多个列的名字,同时set可更新多个列。where子句是可选择的,如果省略则对给定列的所有行进行更新。如果给出了where子句,则仅对满足的行进行更新。