您的位置:首页 > 数据库

常用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql 面试