select语句的基本使用
可以查询需要的列,行,可以进行多表链接,连接查询。
select e.*,e.sal/30 from p_emp e
select 后面跟的是要显示的结果,可以是通过运算或者连接符号得出的伪列
null 空值
在数据库中不确定的值,未定义的值叫做空值
空值不能引入到运算中,+ - * / 和空值的结果都是空
注意:在查询中可以给表定义一个别名以便于多个表的区分
|| 链接运算符
|| 运算符可以链接列或者字符串到另一个列,生成的字符串表达式作为一个目标列
--将姓名和职位显示到一起 select e.ename||e.job from p_emp e ; --更有好的显示方法 select e.ename||' 的职务是 '||e.job from p_emp e ;
|| 操作符也可以用于批量操作
--生成批量删除表命令 select 'drop table '|| tname || ';' from tab
distinct 查询去重复
--去重复 select distinct e.job from p_emp e;
限制数据的返回
where 关键字
where 后面跟判断语句 只有表中结果为 true 结果会显示
注意:如果用字符作条件,需要注意大小写
查询Student表中“95031”班 select s.* from student s where s.class= '95031'
and:连接条件, 与
or: 或
not: 非
in:属于
后面可以是多个数据,但数据类型需要一致
查找空值
不能用 = , 因为在 select 中 = 是比较大小,但是 null 空值 没有大小
注意: 在 update 中, = 是赋值, = 后面可以跟 null。
应使用 is not null
--去空值 select e.job from p_emp e where e.mgr is not null;
like 模糊匹配
exits:exists其实等同于表关联后,只取主表部分内容而已,用exists时 小表在前大表在后
connect by
一般用来查找存在父子关系的数据,也就是树形结构的数据;其返还的数据也能够明确的区分出每一层的数据。
select * from table [start with condition1] connect by [prior] id=parentid
--这种用法就表示从下往上查找数据,可以理解为从叶子节点往上查找父级几点,用第一层数据的parentid去跟表记录里面的id进行匹配,匹配成功那么查找出来的就是第二层数据;
--上面的那种就是从父级节点往下查找叶子节点。 select * from table [start with condition1] connect by id= [prior] parentid
--第一种,修改prior关键字位置 select t.*, level, CONNECT_BY_ROOT(id) from tab_test t start with t.id = 4 connect by t.id = prior t.fid; --第二种,prior关键字不动 调换后面的id=fid逻辑关系的顺序 select t.*, level, CONNECT_BY_ROOT(id) from tab_test t start with t.id = 4 connect by prior t.fid = t.id;