常用SQL语句总结

最近面试,遇到一些面试官问了一些数据库的知识,大部分是让你写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)指定数据类型为固定长度的字符串,右端会用空格补齐,实际字符串的长度不大于nn的最大值不能大于2000.

 

11.varchar(n)

varchar(n)指定数据类型为可变长度的字符串,不会使用空格填充,实际字符串的长度不大于nn的最大值不能大于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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值