1 group by 中 having 子句與where 子句的區別在於:
where子句搜索條件在進行分組操作之前應用;而having子句搜索條件在進行分組操作之後應用。
having 語法與where 語法類似,但是having可以包含聚合函數。
2 連接查詢有三種:內連接、外連接、交叉連接
內連接 INNER JOIN
* 在創建內連接時,包含空值的列不與任何值匹配,因此不包含在結果集中。空值不與其他的空值匹配。
外連接有三種:左向外連接(左連接)、右向外連接(右連接)、完整外部連接
左連接:left outer join 或left join **以左邊表爲主
右連接:right outer join 或 right join ** 以 右邊表爲主
完全外部連接 相當於左連接和右連接的並集
交叉連接:兩表中的任意兩行都可以組合,不需要使用on子句指定表之間的連接關係
3 exists 關鍵字與子查詢
下面兩個語句一樣效果
(1)select emp_name,title,wage from hrman.employees e
where exists
(select dept_id form hrman.departments d where e.dept_id=d.dept_id and d.dept_name='人事部');
(2)select emp_name,title,wage from hrman.employees e
where e.dept_id in
(select dept_id from hrman.departments d
where e.dept_id=d.dept_id and d.dept_name='人事部');
4 union 關鍵字可以組合兩個查詢的結果集,結合的基本規則如下:
a.所有查詢中的列數和列的順序必須相同
b.數據類型必須兼容
** 在使用union關鍵字進行合併查詢時,數據庫引擎會自動過濾掉結果集中的重複記錄。
使用union all 關鍵字不會過濾重複數據,其執行效率會更高一些
5 decode
select emp_name, decode(sex,'男','先生','女','女士','未知') as sex from employees;
6. case函數可以實現與decode函數相同的功能
select emp_name, case sex when '男' then '先生' when '女' then'女士' else '未知' end as sex from employees;
其他用法:
select emp_name, wage,
case when wage <=3000 then '低'
when wage >3000 and wage<5000 then '中'
when wage >=5000 then '高' end as grage from employees;
7 保存查詢結果
create table table_name as select ... from ... where ...;
8 設置默認值 alter table employees ADD inputDate date DEFAULT(sysdate);
9 設置唯一性 alter table employees ADD CONSTRAINT UK_EMPNAME UNIQUE(emp_name);
10 修改數據時不能違反檢查約束
設置約束條件 alter table employees ADD CONSTRAINT CK_EMPWAGE CHECK(WAGE >0);
11 修改數據時不能違反外鍵約束
alter table employees ADD CONSTRAINT FK_EMP_DEPTID FOREIGN(DEPT_ID) REFERENCES DEPARTMENTS(DEPT_ID);
12 刪除數據語句
delete from table_name where condition
truncate table table_name;