SQL语句面试题目:多表查询、SQL约束、DDL、DML



1 SQL语句多表查询

例如:按照 department_id 查询 employees(员工表)和 departments(部门表)的信息。 

方式一(通用型):SELECT ... FROM ... WHERE 

  1. SELECT e.last_name,e.department_id,d.department_name  
  2.  FROM employees e,departments d   
  3. where e.department_id = d.department_id   
SELECT e.last_name,e.department_id,d.department_name
 FROM employees e,departments d 
where e.department_id = d.department_id 

方式二:SELECT ... FROM ...NATURAL JOIN ...

有局限性:会自动连接两个表中相同的列 ( 可能有多个 :department_id 和manager_id) 

  1. SELECT last_name,department_id,department_name   
  2. FROM employees   
  3. NATURAL JOIN departments   
SELECT last_name,department_id,department_name 
FROM employees 
NATURAL JOIN departments 

方式三:SELECT ... JOIN ... USING...

 有局限性:好于方式二,但若多表的连接列列名不同,此法不合适 

  1. SELECT last_name,department_id,department_name   
  2. FROM employees   
  3. JOIN departments   
  4. USING(department_id)   
SELECT last_name,department_id,department_name 
FROM employees 
JOIN departments 
USING(department_id) 

方式四:SELECT ... FROM ... JOIN... ON ... 

常用方式,较方式一,更易实现外联接(左、右、满) 

  1. SELECT last_name,e.department_id,department_name   
  2. FROM employees e   
  3. JOIN departments d   
  4. ON e.department_id = d.department_id  
SELECT last_name,e.department_id,department_name 
FROM employees e 
JOIN departments d 
ON e.department_id = d.department_id


--内连接

1) 

--等值连接 

--不等值连接

2) 

--非自连接 

--自连接

 

--外连接

--左外连接、右外连接、满外连接


2 创建和管理表(DDL) 

CRAETE TABLE/TRUNCATE TABLE /ALTER TABLE /REANME...TO/DROP TABLE ..操作完以后,自动 commit;所以,rollback 对其操作,没有效果 

1.创建表 

1)直接创建 

  1. create table emp1(   
  2. name varchar2(20),   
  3. salary number(8,2)default 1000,   
  4. id number(4),   
  5. hire_date date   
  6. );   
create table emp1( 
name varchar2(20), 
salary number(8,2)default 1000, 
id number(4), 
hire_date date 
); 

2)通过子查询的方式创建 

  1. create table emp2   
  2. as   
  3. select last_name name,employee_id id,hire_date    
  4. from employees;   
create table emp2 
as 
select last_name name,employee_id id,hire_date  
from employees; 

或者 

  1. create table emp2   
  2. as   
  3. select last_name name,employee_id id,hire_date  
  4. from employees   
  5. where department_id = 80;/where 1=2;   
create table emp2 
as 
select last_name name,employee_id id,hire_date
from employees 
where department_id = 80;/where 1=2; 

2.修改表 

1)增加新的列 

  1. alter table emp1   
  2. add(birthday date)   
alter table emp1 
add(birthday date) 

2)修改现有的列 

  1. alter table emp1   
  2. modify(name varchar2(25) default 'abc')   
alter table emp1 
modify(name varchar2(25) default 'abc') 

3)重命名现有的列 

  1. alter table emp1   
  2. rename column salary to sal;  
alter table emp1 
rename column salary to sal;

 

4)删除现有的列 

  1. alter table emp1  
  2. drop column birthday;   
alter table emp1
drop column birthday; 

3.清空表中的数据( delete from table_name区分开) 

  1. truncate table emp2;   
truncate table emp2; 

4.重命名表 

  1. rename emp2 to emp3;   
rename emp2 to emp3; 

5.删除表 

  1. drop table emp3;   
      drop table emp3; 


3 数据处理  DML  

1)增

1.1 增添一条记录

  1. insert into    [表名](,,,,,)   
  2. values(,,,,,)   
insert into    [表名](,,,,,) 
values(,,,,,) 

1.2 从其它表中拷贝数据 

  1. insert into [表名]  
  2. select .... from [另一个表]   
  3. where ....   
insert into [表名]
select .... from [另一个表] 
where .... 

2)改 

  1. update [表名]   
  2. set .....   
  3. where ....   
update [表名] 
set ..... 
where .... 

3)删 

  1. delete from [表名]   
  2. where ....  
delete from [表名] 
where ....

 

4)查(最常用的数据库操作) 

select .... 

from … 

where …. 

group by … 

having … 

order by ….

4 约 

对创建的表的列属性、字段进行的限制。诸如 :not null/unique/primary key/foreign key/check

1.如何定义约束---在创建表的同时,添加对应属性的约束

 

1.1 表级约束 & 列级约束 

  1. create table emp1(   
  2. employee_id number(8),   
  3. salary number(8),   
  4. hire_date date not null,     --列级约束    
  5. dept_id number(8),   
  6. email varchar2(8) constraint emp1_email_uk unique,   
  7. name varchar2(8) constaint emp1_name_uu not null,   
  8. first_name varchar2(8),   
  9. --表级约束   
  10. constraint emp1_emp_id_pk primarykey(employee_id),   
  11. constraint emp1_fir_name_uk unique(first_name),   
  12. constraint emp1_dept_id_fk foreignkey(dept_id) references departments(department_id) ON DELETE CASCADE   
  13. )   
create table emp1( 
employee_id number(8), 
salary number(8), 
hire_date date not null,     --列级约束  
dept_id number(8), 
email varchar2(8) constraint emp1_email_uk unique, 
name varchar2(8) constaint emp1_name_uu not null, 
first_name varchar2(8), 
--表级约束 
constraint emp1_emp_id_pk primarykey(employee_id), 
constraint emp1_fir_name_uk unique(first_name), 
constraint emp1_dept_id_fk foreignkey(dept_id) references departments(department_id) ON DELETE CASCADE 
) 

1.2 只有 not null 只能使用列级约束。其他的约束两种方式皆可 

2.添加和删除表的约束--在创建表以后,只能添加和删除,不能修改 

2.1 添加 

  1. alter table emp1   
  2. add constaint emp1_sal_ck check(salary > 0)   
alter table emp1 
add constaint emp1_sal_ck check(salary > 0) 

2.1.1 对于 not null 来讲,不用 add,需要使用modify: 

  1. alter table emp1   
  2. modify (salary not null)   
alter table emp1 
modify (salary not null) 

2.2 删除 

  1. alter table emp1   
  2. drop constaint emp1_sal_ck   
alter table emp1 
drop constaint emp1_sal_ck 

2.3 使某一个约束失效:此约束还存在于表中,只是不起作用 

  1. alter table emp1   
  2. disable constraint emp1_email_uk;   
alter table emp1 
disable constraint emp1_email_uk; 

2.4 使某一个约束激活:激活以后,此约束具有约束力 

  1. alter table emp1   
  2. enable constraint emp1_email_uk;  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值