目錄
一、數據庫基礎知識
二、操作語句
創建模式
create schema test0402;
use test0402;
創建表
createtable Course(
Cno char(4) primary key,
Cname char(40) ,
Cpno char(4),
Ccredit smallint,
foreignkey (Cpno) references Course(Cno));
修改表
Alter table Student add S_entrance datetime;
alter table course add UNIQUE(Cname);
alter table course drop index Cname;
刪除
Droptable 表名cascade/restrict
Cascade刪除沒有限制,相關依賴全部刪除
Restrict刪除有條件限制,待刪除的表不能有約束(check、foreign key等),不能有視圖、觸發器、存儲過程或者函數等
drop database
truncate tabe tbalename(僅僅刪除表格中的數據)
約束
Not null |
建表時添加,create table ###(name_id cahr(52) not null...) |
unique |
(單個列)建表時添加,create table a (列1,類型,列2,類型,...... unique(列1));建表後,alter table a add unique(列2) (2)多列且命名。建表時,create table a (列1,類型,列2,類型,...... constraint c_person unique(列1,列2) ) 建表後,alter table 1 add constraint c_person unique(列1,列2) ) (3)刪除 alter table a drop index c_person |
Primary key |
(1)CREATE TABLE Persons (......PRIMARY KEY (Id_P)) (2)CREATE TABLE Orders (......CONSTRAINT pk_PerOrders PRIMARY KEY (Id_P)) (3)ALTER TABLE Orders ADD PRIMARY KEY (Id_P) (4)ALTER TABLE Orders ADD CONSTRAINT pk_PerOrders PRIMARY KEY (Id_P) (5)ALTER TABLE Orders DROP PRIMARY KEY pk_PerOrders
|
Foreign key |
(1)CREATE TABLE Orders (....FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)) (2)CREATE TABLE Orders (......CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)) (3)ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) (4)ALTER TABLE Orders ADD CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) (5)ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders |
check |
對特定列進行約束其取值範圍 (1)CREATE TABLE Persons ( ... CHECK (Id_P>0) ) (2)ALTER TABLE Persons ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes') (3)ALTER TABLE Persons DROP CHECK chk_Person |
default |
插入默認值 (1)CREATE TABLE Persons ( ......, City varchar(255) DEFAULT 'Sandnes' ) (2)ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES' (3)ALTER TABLE Persons ALTER City DROP DEFAULT
|
索引
carete index on tbalename(colname)
create unique indec on tablename(colname)
CREATE INDEX PersonIndex
ON Person (LastName, FirstName)
alter table tablename drop index indexname
查詢
Select[distinct/all(默認all)] 列/列/列 from 表名/視圖名
[where 條件表達式]
[gruopby 列名[having 條件表達式]]
group by 分組,having 控制分組條件,用COUNT()函數和GROUP BY語句可以統計同一值的記錄條數
[orderby 列名[ASC(默認升序)/desc]]
查詢條件
(1)確定範圍
between下限 and 上限 (兩端都包含)
Notbetween 下限 and 上限
(2)比較大小
=,>,<,<>(不等於),!=,>=,<=,!>(不大於),!<(不小於)
(3)確定集合
In和 not in
(4)字符匹配
notlike/Like <匹配串>[escape<換碼字符串>]
% | 任意長度的字符串 |
_ | 任意單個字符串 |
[charlist] | 字符列中的任何單一字符 |
[^charlist] 或者 [!charlist] |
不在字符列中的任何單一字符 |
一個漢字佔兩個字符的位置
***like‘db|_d’escape ‘\
查詢db_d的相關信息,用escape聲明’\’後的只是普通字符,不具有通配符含義
(5)涉及空值的查詢
Select*from sc where grade is null(is notnull)
(6) 多重條件查詢
And 和or連接多個查詢條件。And優先級較高
(7)where後避免對字段進行函數操作,否則會使字段上的索引失效,全表掃描,降低查詢速度
Order by
按照查詢結果對多個屬性列排序(升序asc默認/降序desc)
空值,升序在後,降序最先顯示
聚集函數
注意:where 後不可以跟聚集函數作爲條件表達式
除了count(*),其他都跳過空值不處理
count([distinct|all] *) |
統計元組個數 |
count([distinct|all] 列名) |
統計一列中值得個數 |
Sum([distinct|all] 列名) |
求和(數值型) |
AVG([distinct|all] 列名) |
求平均(數值型) |
max([distinct|all] 列名) |
最大值 |
min([distinct|all] 列名) |
最小值 |
Group by
將查詢結果按一列或多列的值分組,值相等的爲一組
分組後,聚集函數將作用於每一組。否則,作用於整個查詢結果
Where 和 having的區別:
Where作用於基本表或者視圖,選擇滿足條件的元組;
Having 作用於組,選擇滿足條件的組
連接查詢
等值與非等值 |
等值 = |
非等值 不是= |
|
自身連接 |
自己和自己 |
外連接 |
左外連接(列出左邊全部,右邊缺失的填補null) Left outer join |
右外連接(列出右邊全部,左邊缺失的填補null) Right outer join |
|
複合連接 |
Where後面跟多個連接條件 |
嵌套查詢
(1)上層/下層子查詢
上層查詢:父查詢或者外層查詢
下層查詢:子查詢或者內層查詢
子查詢中不能使用order by,order by只能對最終查詢結果排序
有些嵌套查詢可以用連接運算替代
(2)相關/不相關子查詢
不相關子查詢:子查詢的查詢條件不依賴與父查詢(一下子將子查詢求解出來)
相關子查詢:子查詢的查詢條件依賴於父查詢(反覆求值,先取父查詢中的一個元組,遍歷內層查詢,再從外層查詢中取出一個元組,遍歷內層查詢。。。)
(3)帶有any/some/all的子查詢:
子查詢跟在比較運算符之後,只有返回的是單值的時候可以用比較運算符
返回多值時,要用any(有些用some)或者all,且和比較運算符搭配使用
(4)帶有exists的子查詢
返回true或者false,只關心內層操作是否有返回值
(5)in和exists
in 是把外表和內表作hash 連接,而exists是對外表作loop循環,每次loop循環再對內表進行查詢。一直以來認爲exists比in效率高的說法是不準確的。
如果查詢的兩個表大小相當,那麼用in和exists差別不大。
如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in:
如果查詢語句使用了not in 那麼內外表都進行全表掃描,沒有用到索引;而not extsts 的子查詢依然能用到表上的索引。所以無論那個表大,用not exists都比not in要快。 not in 邏輯上不完全等同於not exists,如果你誤用了not in,小心你的程序存在致命的BUG:
(6)集合查詢
Uninon 並集 uninon all 並集,保留重複值
Intersect 交集
Except 差操作