面试必知的SQL数据库命令
Posted 城子特讯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试必知的SQL数据库命令相关的知识,希望对你有一定的参考价值。
1、登录数据库
普通用户登陆
sqlplus 用户名/密码
sqlplus scot/ti
以管理员身份登陆
sqlplus / as sysdba
sqlplus sys/sys as sysdba
修改用户密码
alter user scot identified by 密码
2、select语句注意事项
select col1, col2…from table_name where condition group by col…
having condtion order by col…、
SELECT *|[DISTINCT] column|expression [alias],... from table;
例子:
查询所有员工的所有记录
select * from emp;
select empno, ename, job,sal, comm, deptno from emp;
注:尽量使用列名,用列名代替
别名的使用:
查询员工号,姓名,月薪,年薪
select empno as "员工号", ename "姓名", sal 月薪, sal*12 年薪 from emp;
1、SQL 语言大小写不敏感; 2、 SQL可以写在一行或者多行
3、关键字不能被缩写也不能分行;4、各子句一般要分行写。
3、NULL值
NULL不等于NULL
select * from emp where NULL=NULL; 查不到任何记录
滤空函数:nvl(a, b) 如果a为NULL,返回b;
在SQL中, 判断一值是否等于NULL不用“=” 和“!=”而使用is和is not
查询奖金为NULL的员工信息
select * from emp where comm is NULL;
查询奖金不为NULL的员工信息
select * from emp where comm is not NULL;
4、过滤和排序数据
查询薪水不等于10000的员工信息
select * from emp where sal != 10000;
between…and:介于两值之间,包含两边的值
查询工资在10-15之间的员工
select * from emp where sal >=10 and sal<=15;
select * from emp where sal between 10 and 15;
in:在集合中, not in 不在集合中
例子:
查询部门号为10和20的员工信息
select * from emp where deptno=10 or deptno=20;
select * from emp where deptno in (10, 20);
查询部门号不是10和20的员工
select * from emp where deptno not in (10, 20);
模糊查询
like:模糊查询
%匹配任意多个字符, _匹配一个字符
例子:
查询名字以S开头的员工
select * from emp where ename like 'S% ';
注意:SQL在解析where的时候,是从右至左解析的。故,and应该将易假的值放在右侧; or时应该将易真的值放在右侧。
order by 排序与分组函数
order by 子句排序
ASC(ascend): 升序
DESC(descend): 降序
例:查询员工信息, 按月薪排序
select * from emp order by sal; 从小到大排序,默认
select * from emp order by sal desc; 从大到小排序
按照工资进行排序--使用序号进行排序的情况
select ename, sal, sal*12, from emp order by 3 desc;按照select后面列名出现的先后顺序, ename→1, sal→2, sal*12→3
按照部门和工资进行排序
select * from emp order by deptno, sal;
desc只作用于最近的一列, 两列都要降序排, 则需要两个desc
select * from emp order by deptno desc, sal desc;
分组函数作用于一组数据,并对一组数据返回一个值。分组数据使用group by关键字,按照group by 后给定的表达式,将from后面的table进行分组。
查询“部门”的平均工资
select deptno, avg(sal) from emp group by deptno;
查询部门内部不同职位的平均工资
select deptno, job, avg(sal) from emp group by deptno, job order by 1;
在select列表中所有没有包含在组函数中的列, 都必须在group by的后面出现。
Having 过滤分组:1、行已经被过滤;2、使用了组函数
语法:SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression]
[HAVINGgroup_condition] [ORDER BY column];
查询平均薪水大于1000的部门
select deptno, avg(sal) from emp group by deptno having avg(sal)>1000;
注:where和having都是将满足条件的结果进行过滤。但是差别是where子句中不能使用组函数。
求1号部门的平均工资
select deptno, avg(sal) from emp group by deptno having deptno=1;、
或者使用where
select deptno, avg(sal) from emp where deptno=1 group by deptno;
笛卡尔集:笛卡尔集的行数 = table1的行数 x table2的行数;笛卡尔集的列数 = table1的列数 + table2的列数。
查询员工信息:员工号 姓名 月薪和部门名称
select e.empno, e.ename, e.sal, d.dname from emp e, dept d where e.deptno=d.deptno;
按部门统计员工人数,显示:部门号 部门名称 人数
select d.deptno 部门号, d.dname 部门名称, count(e.empno) 人数 from emp e, dept d where e.deptno=d.deptno
group by d.deptno, d.dname;
5、CURD
使用 INSERT 语句向表中插入数据。其语法为:
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
注:values的值覆盖了所有列,则table的列可以省略
如果:插入的时候没有插入所有的列, 就必须显式的写出这些列的名字
(注意:字符串和日期都应该使用 ' '号引用起来)
insert into emp(empno, ename, sal, deptno) values(10, 'chales', 55000, 20);
一次性将emp表中的指定列插入到表emp10中
insert into emp10(empno, ename, sal, deptno)
select empno, ename, sal, deptno from emp where deptno=10;
创建表
create table test1 (tid number, tname varchar2(20), hiredate date default sysdate);
create table emp1 as select * from emp where 1=2;
“where 1=2”一定为假。所以是不能select到结果的,但是将这条子查询放到Create语句中,可以完成拷贝表结构的效果。
约束:
1. Not Null 非空约束
2. Unique 唯一性约束
3. Primary Key 主键约束
主键约束隐含Not null + Unique
4. Foreign Key 外键约束
update更新数据
格式: update 表名 set col=值 where condtion
update emp set sal=5000, comm=500 where ename = 'charles';
delete删除数据
格式: delete from 表名 where condtion
delete from emp where empno=07;
delete 和 truncate的区别
1. delete 逐条删除表“内容”,truncate 先摧毁表再重建。
2. delete 是DML语句,truncate 是DDL语句。DML语句可以闪回(flashback),DDL语句不可以闪回。
3. 由于delete是逐条操作数据,所以delete会产生碎片,truncate不会产生碎片。
4. delete不会释放空间,truncate 会释放空间
用delete删除一张10M的表,空间不会释放。而truncate会。所以当确定表不再使用,应truncate
5. delete可以回滚rollback, truncate不可以回滚rollback。
另外,经常使用的数据库对象有表、视图、索引、序列、同义词等,博主后续也将对其进行详细解释,特别索引这一功能。如果觉得文章还不错的话,请多多关注。
以上是关于面试必知的SQL数据库命令的主要内容,如果未能解决你的问题,请参考以下文章