数据库笔记2015-8-29
2015-08-29 20:28
162 查看
1、select * 是效率最低的。采用投影操作的效率要高,
2、distinct 加在查询的列的前面用于去重复,跟多个列时,表示多有的列都一样时去重
3、between.. . and... 包括开头和结尾
4、in(..、..、..、) 在范围内,只要是括号中其中一个就行 相当于多个or连接
5、like ... eg like 'a%'以a开头的 like '%a%' 包含a的 下划线表示任意一个字符 like '_b%' 表示第二个字母是b的
查询包含%的 like '%\%%' escape '\' \表示转意 #也可以作为转意字符 like '%#%%' escape '#'
6、not in() 除了。。。
7、null 空; where name is null where name is not null
8、and 的优先级高于or where name=‘killy’ or salary>9000 and sex=‘男' 先执行后面的and
9、order by 默认升序 order by salary desc 降序 order by salary,name 先按salary排序 salary一样的按名字排 order by salary,name desc 说明:按salary升序排,salary相同的时候,按名字的降序排序,desc在哪个的后面 哪个就降序 若都想降序就都加desc
ordre by 7 表示按第七列升序排序
select name,salary from emp order by 1 表示按name排序2表示按salary排序 这时后面的数字表示的是投影顺序
order by + 别名 表示按别名排序
10、limit(0,3)从第一条开始取 取3条
11、concat(name,salary) 把两个列拼到一起
12、substr(字段名,从第几个位置开始,截几个)
13、ltrim()去左边的空格 rtrim去右边的空格 trim()去前后的空格 中间的不去
14、分组查询:相同字段的列合并即为分组
group by 出现在投影中 的列必须出现在group by 中 聚合函数的参数除外,出现在groupby中的列不一定出现在投影中 group by 必须放到where 后面
注意:group by 的sql中若果过滤条件中有组函数,则不能使用where 要用having ,且having 放在group by 的后面
select job,avg(salary) from employee
group by job having avg(salary)>8000
一、求每个工作种类的平均工资;select job,avg(salary) from emp group job,
15、表链接:内连接:inner join(简写为可简写为join) 只返回两张表匹配项
自然连接:在两张表中寻找列名和数据类型都相同的字段,然后自动的将他们连接起来,并返回所有符合条件的结果。它是内连接的一种
cross join 返回笛卡尔积
外连接(左连接:left join on 右连接:right join on 全连接:full join on 没有左连接跟右连接的并集,没有关联上的记录也显示出来)
可用(+)号表示 在哪个表 哪个就是匹配表 在右边就是左连接
自连接:只有一张表:员工表:select work.ename worker,mgr.ename manager from scott.emp work,scott.emp mgr where worker.mgr = mgr.empno orderby worker.ename
16、创建视图:先登录system授予权限grant create any view to tom(tom为数据库名)
create view emp as select eid, ename as employee_name, workyear as year from employees; (emp即视图 是个虚表)
select * from emp
修改视图:create or replace view emp as select eid, ename as employee_name,esalary, workyear as year from employees;
删除视图 drop view emp
利用视图 更新 数据表
:
通过视图, 不但可以对 基础表中的数据进行查询, 而且可以对数据表中的数据进行更新。 更新的方式非常简单 : 直接更新视图中的数据即可将 对基础表 进行相应的更新。
--当然, 并非视图中的所有列都能够 进行更新, 并反射到基础表中, 只有那些直接由基础表 获得的列可以进行更新操作。
插入视图数据
:插入以后,原表中的其他行为空,只有在视图中出现的行有数据
2、distinct 加在查询的列的前面用于去重复,跟多个列时,表示多有的列都一样时去重
3、between.. . and... 包括开头和结尾
4、in(..、..、..、) 在范围内,只要是括号中其中一个就行 相当于多个or连接
5、like ... eg like 'a%'以a开头的 like '%a%' 包含a的 下划线表示任意一个字符 like '_b%' 表示第二个字母是b的
查询包含%的 like '%\%%' escape '\' \表示转意 #也可以作为转意字符 like '%#%%' escape '#'
6、not in() 除了。。。
7、null 空; where name is null where name is not null
8、and 的优先级高于or where name=‘killy’ or salary>9000 and sex=‘男' 先执行后面的and
9、order by 默认升序 order by salary desc 降序 order by salary,name 先按salary排序 salary一样的按名字排 order by salary,name desc 说明:按salary升序排,salary相同的时候,按名字的降序排序,desc在哪个的后面 哪个就降序 若都想降序就都加desc
ordre by 7 表示按第七列升序排序
select name,salary from emp order by 1 表示按name排序2表示按salary排序 这时后面的数字表示的是投影顺序
order by + 别名 表示按别名排序
10、limit(0,3)从第一条开始取 取3条
11、concat(name,salary) 把两个列拼到一起
12、substr(字段名,从第几个位置开始,截几个)
13、ltrim()去左边的空格 rtrim去右边的空格 trim()去前后的空格 中间的不去
14、分组查询:相同字段的列合并即为分组
group by 出现在投影中 的列必须出现在group by 中 聚合函数的参数除外,出现在groupby中的列不一定出现在投影中 group by 必须放到where 后面
注意:group by 的sql中若果过滤条件中有组函数,则不能使用where 要用having ,且having 放在group by 的后面
select job,avg(salary) from employee
group by job having avg(salary)>8000
一、求每个工作种类的平均工资;select job,avg(salary) from emp group job,
15、表链接:内连接:inner join(简写为可简写为join) 只返回两张表匹配项
自然连接:在两张表中寻找列名和数据类型都相同的字段,然后自动的将他们连接起来,并返回所有符合条件的结果。它是内连接的一种
cross join 返回笛卡尔积
外连接(左连接:left join on 右连接:right join on 全连接:full join on 没有左连接跟右连接的并集,没有关联上的记录也显示出来)
可用(+)号表示 在哪个表 哪个就是匹配表 在右边就是左连接
自连接:只有一张表:员工表:select work.ename worker,mgr.ename manager from scott.emp work,scott.emp mgr where worker.mgr = mgr.empno orderby worker.ename
16、创建视图:先登录system授予权限grant create any view to tom(tom为数据库名)
create view emp as select eid, ename as employee_name, workyear as year from employees; (emp即视图 是个虚表)
select * from emp
修改视图:create or replace view emp as select eid, ename as employee_name,esalary, workyear as year from employees;
删除视图 drop view emp
利用视图 更新 数据表
:
通过视图, 不但可以对 基础表中的数据进行查询, 而且可以对数据表中的数据进行更新。 更新的方式非常简单 : 直接更新视图中的数据即可将 对基础表 进行相应的更新。
--当然, 并非视图中的所有列都能够 进行更新, 并反射到基础表中, 只有那些直接由基础表 获得的列可以进行更新操作。
插入视图数据
:插入以后,原表中的其他行为空,只有在视图中出现的行有数据
相关文章推荐
- 后IOE时代,Mysql 与 Postgre SQL的对比
- SQL Server 2008管理工具出现 远程过程调用失败0x800706be解决方法
- Hibernate执行sql语句
- Oracle Client+ PLSQL developer实现远程连接Oracle数据库
- plsql登录时报错:Initialization error orcle not properly installed
- 安装redis
- MySQL分页limit的使用方法
- C#连接数据库增删改查代码 SQL SERVER/ACCESS 通用类
- oracle dblink创建
- MYSQL的添加字段和修改字段
- MongoDB学习十--MongoDB的Replication Introduction
- Oracle 笔记之视图
- Mysql 总结
- Oracle 笔记之子查询
- Oracle 笔记之高级查询
- mongodb笔记
- 分布式中Redis实现Session终结篇
- mysql数据库密码修改
- oracle log LogMiner 日志分析
- postgresql 按日期范围查询