查看databases,tables,use
mysql:
select version();
show databases;
show tables;
use username
可以使用 desc t_user 来查看表结构、表中列的声明顺序
oracle:
select * from all_users;
select * from user_tables;
select table_name from user_tables; //当前用户的表
select table_name from all_tables; //所有用户的表
select table_name from dba_tables; //包括系统表
select table_name from dba_tables where owner=‘zfxfzb’
conn username;
对于null的处理:
mysql:
计算每个员工的年薪?
select ename,(sal+comm)*12 as yearsal from emp;
重点:所有数据库都是这样规定的,只要有NULL参与的运算结果一定是NULL。
使用ifnull函数:
select ename,(sal+ifnull(comm,0))*12 as yearsal from emp;ifnull() 空处理函数?
ifnull(可能为NULL的数据,被当做什么处理) : 属于单行处理函数。
oracle:
使用nvl函数可以将null进行替换
group by
记住一个规则:当一条语句中有group by的话,select后面只能跟分组函数和参与分组的字段。
distinct
1、关于查询结果集的去重?
mysql> select distinct job from emp; // distinct关键字去除重复记录。
mysql> select ename,distinct job from emp;
以上的sql语句是错误的。
记住:distinct只能出现在所有字段的最前面。
案例:统计岗位的数量?
select count(distinct job) from emp;
format
column name format a15;
只有Oracle中有用
笛卡儿积
笛卡尔积现象:当两张表进行连接查询的时候,没有任何条件进行限制,最终的查询结果条数是两张表记录条数的乘积。
多表连接查询
根据表的连接方式来划分,包括:
内连接:
等值连接
非等值连接
自连接
外连接:
左外连接(左连接)
右外连接(右连接)
全连接
内连接之非等值连接:最大的特点是:连接条件中的关系是非等量关系
select
e.ename,e.sal,s.grade
from
emp e
join
salgrade s
on
e.sal between s.losal and s.hisal;
外连接:
当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。
外连接最重要的特点是:主表的数据无条件的全部查询出来。
全连接:
全外连接,即无论on中的条件满不满足,都保留所有表所有数据
由于mysql不支持全外连接,所以此条语句只能在其他数据库中执行
select s.name,t.name from student s full outer join teacher t on s.tId = t.id;
子查询
案例:找出高于平均薪资的员工信息。
select * from emp where sal > avg(sal); //错误的写法,where后面不能直接使用分组函数。正确写法:select * from emp where sal > (select avg(sal) from emp);
案例:找出每个部门平均薪水的等级
第一步:找出每个部门平均薪水(按照部门编号分组,求sal的平均值)
select deptno,avg(sal) as avgsal from emp group by deptno;第二步:将以上的查询结果当做临时表t,让t表和salgrade s表连接,条件是:t.avgsal between s.losal and s.hisal
操作结果集
-
Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
-
Union All,对两个结果集进行并集操作,包括重复行,不进行排序;
-
Intersect,对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
-
Minus,对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
可以在最后一个结果集中指定Order by子句改变排序方式。
分页查询(five stars)
mysql:
limit是mysql特有的,