常用SQL语句总结
2016-09-25 12:45
267 查看
最近面试,遇到一些面试官问了一些数据库的知识,大部分是让你写SQL语句。笔试也有很多考SQL语句。我总结了一些常用的SQL语句。
1.E-R图模型:
实体(矩形),属性(椭圆),联系(菱形)。
2.范式:
第一范式:数据库表中的列都是单一属性,不可再分。
第二范式:数据库表中的不存在非关键字列对任一关键字的部分函数依赖。也即所有非关键列都完全依赖于任意一个关键字。
如:一张学生选课表的结构设计为(学号,姓名,年龄,所选课程,课程学分)。该表中存在如下依赖关系:(学号)->(姓名,年龄)和(所选课程)->(课程学分)。这两种依赖方式均为非关键列对关键字的部分函数依赖。会造成如下问题:大量的数据冗(rong)余,更新异常,删除异常,插入异常。解决方法是拆分数据表。
第三范式:数据库表中的不存在非关键字列对任一关键字的传递函数依赖。
如:一张学生表为(学号,姓名,年龄,学院,学院电话,学院地址)。其依赖关系:(学院)->(学院电话,学院地址),还有(学号)->(学院),这样就产生了传递依赖:(学号)->(学院)->(学院电话,学院地址)。违反第三范式。
3.select:
select e.employee_id, e.employee_name, sum(s.salary) total_salary
from employee e, salary s
where e.employee_id=s.employee_id
group by e.employee_id
having (sum(s.salary))>10000
order by e.employee_id desc;
注:升序asc,降序desc。先执行group by,后执行order
by,order by的字段必须为select的字段
4.insert:
insert into 表名(列名1,列名2,列名3...列名n)
values (值1,值2,值3...值n);
5.update:
update students set name=’张三’, sex=’男’ where id=1;
6.delete:
delete from students where id>10;
注:除了delete命令,Oracle还提供了truncate table命令删除表中的数据。truncate
table语句删除数据后无法回滚,delete语句删除后可以进行回滚操作。
当删除部分数据时,应使用delete语句:当删除全部数据时,应该使用truncate table语句。
7.子查询:
select * from employee
where employee_id in (select employee_id from salary);
8.联合语句:
1.求并集(记录唯一) union运算
union运算实际是合并两个结果集中的所有记录,并将其中重复记录剔除。要求两个结果集必须具有完全相同的列数,并且各列具有相同的数据类型。
select student_id, student_name from a_students
union
select student_id, studen_name from b_students;
2.求并集 union all运算
union all运算是合并两个结果集中的所有记录,并不剔除其中的重复数据。
3.求交集 intersect运算
intersect运算是两个结果集中相同的所有记录。
4.求差集 minus运算
minus运算返回第一个集合中存在,而第二个集合中不存在的记录。
9.dual:
select 5*4.5+7 result from dual;
RESULT
29.5
10.char(n):
char(n)指定数据类型为固定长度的字符串,右端会用空格补齐,实际字符串的长度不大于n。n的最大值不能大于2000.
11.varchar(n):
varchar(n)指定数据类型为可变长度的字符串,不会使用空格填充,实际字符串的长度不大于n。n的最大值不能大于4000.
12.varchar2(n):
varchar2(n)同varchar(n),尽量使用varchar2(n),向后兼容。
13.聚合函数:
对列操作。
1.max() 获取最大值 select max(employee_age) max_age from employees;
2.min()
3.avg() 获取平均值 select avg(employee_age) avg_age from employees;
4.sum() 求和 select sum(employee_age) sum_age from employees;
5.count() 统计记录数 select count(employee_name) count_name from employees;
14.空值处理:
nvl(表达式,值/表达式)
select e.employee_id, e.employee_name, nvl(sum(salary),0) total_salary
from employees e, salary s
where e.employee_id=e.employee_id
group by e.employee_id, e.employee_name;
注:在进行运算时,只要其中一个操作数的值为null时,运算结果仍然是null.
15.between:
select * from employees where employee_age between 26 and 35;等价于
select * from employees where employee_age >=26 and employee_age<=35;
16.like:
通配符:% 匹配任意长度的任意字符 _匹配任意的单个字符
select employee_name from employees where employee_name like ‘刘%’;
select employee_name from employees where employee_name like ‘_志_’;
17.all:
select * from employees e
where employee_age>all(
select employee_age from employees where employee_position=’工程师’);
18.主键约束:
primary key 特点:唯一,非空,自增。
create table employees(
employee_id number primary key,
employee_name varchar2(20),
employee_age number);
19.外键约束:
foreign key 外键是实现参照完整性的手段。
参照完整性:一个表中的记录依附于另一个表的记录而存在,称为表之间的参照完整性。
alter table subjects 表名
add constraint fk_students_subjects 约束名
foreign key (subjects_id) 列名
references students (subjects_id); 主表和主表列名
20.唯一性约束:
unique 允许空值,可以有多个列为唯一性约束。
alter table employees
add constraint unq_employees 约束名
unique (employee_name, employee_address); 列名
21.非空约束:
not null
1.E-R图模型:
实体(矩形),属性(椭圆),联系(菱形)。
2.范式:
第一范式:数据库表中的列都是单一属性,不可再分。
第二范式:数据库表中的不存在非关键字列对任一关键字的部分函数依赖。也即所有非关键列都完全依赖于任意一个关键字。
如:一张学生选课表的结构设计为(学号,姓名,年龄,所选课程,课程学分)。该表中存在如下依赖关系:(学号)->(姓名,年龄)和(所选课程)->(课程学分)。这两种依赖方式均为非关键列对关键字的部分函数依赖。会造成如下问题:大量的数据冗(rong)余,更新异常,删除异常,插入异常。解决方法是拆分数据表。
第三范式:数据库表中的不存在非关键字列对任一关键字的传递函数依赖。
如:一张学生表为(学号,姓名,年龄,学院,学院电话,学院地址)。其依赖关系:(学院)->(学院电话,学院地址),还有(学号)->(学院),这样就产生了传递依赖:(学号)->(学院)->(学院电话,学院地址)。违反第三范式。
3.select:
select e.employee_id, e.employee_name, sum(s.salary) total_salary
from employee e, salary s
where e.employee_id=s.employee_id
group by e.employee_id
having (sum(s.salary))>10000
order by e.employee_id desc;
注:升序asc,降序desc。先执行group by,后执行order
by,order by的字段必须为select的字段
4.insert:
insert into 表名(列名1,列名2,列名3...列名n)
values (值1,值2,值3...值n);
5.update:
update students set name=’张三’, sex=’男’ where id=1;
6.delete:
delete from students where id>10;
注:除了delete命令,Oracle还提供了truncate table命令删除表中的数据。truncate
table语句删除数据后无法回滚,delete语句删除后可以进行回滚操作。
当删除部分数据时,应使用delete语句:当删除全部数据时,应该使用truncate table语句。
7.子查询:
select * from employee
where employee_id in (select employee_id from salary);
8.联合语句:
1.求并集(记录唯一) union运算
union运算实际是合并两个结果集中的所有记录,并将其中重复记录剔除。要求两个结果集必须具有完全相同的列数,并且各列具有相同的数据类型。
select student_id, student_name from a_students
union
select student_id, studen_name from b_students;
2.求并集 union all运算
union all运算是合并两个结果集中的所有记录,并不剔除其中的重复数据。
3.求交集 intersect运算
intersect运算是两个结果集中相同的所有记录。
4.求差集 minus运算
minus运算返回第一个集合中存在,而第二个集合中不存在的记录。
9.dual:
select 5*4.5+7 result from dual;
RESULT
29.5
10.char(n):
char(n)指定数据类型为固定长度的字符串,右端会用空格补齐,实际字符串的长度不大于n。n的最大值不能大于2000.
11.varchar(n):
varchar(n)指定数据类型为可变长度的字符串,不会使用空格填充,实际字符串的长度不大于n。n的最大值不能大于4000.
12.varchar2(n):
varchar2(n)同varchar(n),尽量使用varchar2(n),向后兼容。
13.聚合函数:
对列操作。
1.max() 获取最大值 select max(employee_age) max_age from employees;
2.min()
3.avg() 获取平均值 select avg(employee_age) avg_age from employees;
4.sum() 求和 select sum(employee_age) sum_age from employees;
5.count() 统计记录数 select count(employee_name) count_name from employees;
14.空值处理:
nvl(表达式,值/表达式)
select e.employee_id, e.employee_name, nvl(sum(salary),0) total_salary
from employees e, salary s
where e.employee_id=e.employee_id
group by e.employee_id, e.employee_name;
注:在进行运算时,只要其中一个操作数的值为null时,运算结果仍然是null.
15.between:
select * from employees where employee_age between 26 and 35;等价于
select * from employees where employee_age >=26 and employee_age<=35;
16.like:
通配符:% 匹配任意长度的任意字符 _匹配任意的单个字符
select employee_name from employees where employee_name like ‘刘%’;
select employee_name from employees where employee_name like ‘_志_’;
17.all:
select * from employees e
where employee_age>all(
select employee_age from employees where employee_position=’工程师’);
18.主键约束:
primary key 特点:唯一,非空,自增。
create table employees(
employee_id number primary key,
employee_name varchar2(20),
employee_age number);
19.外键约束:
foreign key 外键是实现参照完整性的手段。
参照完整性:一个表中的记录依附于另一个表的记录而存在,称为表之间的参照完整性。
alter table subjects 表名
add constraint fk_students_subjects 约束名
foreign key (subjects_id) 列名
references students (subjects_id); 主表和主表列名
20.唯一性约束:
unique 允许空值,可以有多个列为唯一性约束。
alter table employees
add constraint unq_employees 约束名
unique (employee_name, employee_address); 列名
21.非空约束:
not null
相关文章推荐
- 6种常用的sql语句总结收藏
- Sqlite3常用SQL语句总结,一是防止自己忘了,二是分享
- ORACLE 常用SQL语句总结
- SQL常用语句总结
- 常用Sql语句总结
- 6种常用的sql语句总结
- DB2比较常用与实用sql语句总结
- sql常用语句集合(工作总结)
- SQL查询语句常用总结
- sql常用语句总结
- Sql常用语句 and Sql常见面试题(总结)
- SQL查询语句常用总结
- 总结经典常用的SQL语句(1)
- 关于过去工作的一些总结:常用sql语句以及数据库查询优化
- 一些常用SQL语句的总结
- SQL常用流程控制语句总结来源
- 总结经典常用的SQL语句(2)
- 总结经典常用的SQL语句(2)
- SQL常用语句总结
- 常用SQL语句总结<一>