1. 程式人生 > >SQL語句面試題目:多表查詢、SQL約束、DDL、DML

SQL語句面試題目:多表查詢、SQL約束、DDL、DML

1 SQL語句多表查詢

例如:按照 department_id 查詢 employees(員工表)和 departments(部門表)的資訊。

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

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)

SELECT last_name,department_id,department_name 
FROM employees 
NATURAL JOIN departments 

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

 有侷限性:好於方式二,但若多表的連線列列名不同,此法不合適

SELECT last_name,department_id,department_name 
FROM employees 
JOIN departments 
USING(department_id) 

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

常用方式,較方式一,更易實現外聯接(左、右、滿)

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)直接建立

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

2)通過子查詢的方式建立

create table emp2 
as 
select last_name name,employee_id id,hire_date  
from employees; 

或者

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

2.修改表

1)增加新的列

alter table emp1 
add(birthday date) 

2)修改現有的列

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

3)重新命名現有的列

alter table emp1 
rename column salary to sal;

4)刪除現有的列

alter table emp1
drop column birthday; 

3.清空表中的資料( delete from table_name區分開)

truncate table emp2; 

4.重命名錶

rename emp2 to emp3; 

5.刪除表

      drop table emp3; 


3 資料處理  DML  

1)增

1.1 增添一條記錄

insert into    [表名](,,,,,) 
values(,,,,,) 

1.2 從其它表中拷貝資料

insert into [表名]
select .... from [另一個表] 
where .... 

2)改

update [表名] 
set ..... 
where .... 

3)刪

delete from [表名] 
where ....

4)查(最常用的資料庫操作)

select ....

from …

where ….

group by …

having …

order by ….

4 約 

對建立的表的列屬性、欄位進行的限制。諸如 :not null/unique/primary key/foreign key/check

1.如何定義約束---在建立表的同時,新增對應屬性的約束

1.1 表級約束 & 列級約束

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 新增

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

2.1.1 對於 not null 來講,不用 add,需要使用modify:

alter table emp1 
modify (salary not null) 

2.2 刪除

alter table emp1 
drop constaint emp1_sal_ck 

2.3 使某一個約束失效:此約束還存在於表中,只是不起作用

alter table emp1 
disable constraint emp1_email_uk; 

2.4 使某一個約束啟用:啟用以後,此約束具有約束力

alter table emp1 
enable constraint emp1_email_uk;