sql語法

一、創建
create table 表名 (
列名 數據類型 列級完整性約束,

);

eg:
create table Student(
Sno CHAR(9) primary key,

);

二、修改表
1.

alter table 表名
add add 新列名 數據類型 完整性約束 // 添加新的列
alter column 列名 數據類型 列級完整性約束 //修改已有屬性的數據類型或者添加列級完整性約束
add 表級完整性約束 // 添加表級完整性約束
drop column 【cascade/restrict】列名 // 刪除表中的列
drop constraint 【cascade/restrict】完整性約束名 // 刪除指定的完整性約束
cascade是會自動刪除引用該列的其他對象,
restrict如果該列被其他對象引用,rdbms將拒絕刪除該列

2.刪除整個表
drop table 表名 [cascade/restrict]
如果表上有視圖,選擇restrict但刪除失敗,選擇cascade就會把視圖也刪除
加菜知識:視圖刪除會把與視圖有關的視圖也刪除,但是不會把數據表的數據也刪除

三、 索引
1.建立索引
creat [unique] [cluster] index 索引名
on 表名(列名…)

unique 表明此索引的每一個索引值只對應唯一的數據記錄
cluster表明要建立的索引的聚簇索引

eg:
create unique index Stusno on Student(Sno)
create unique index Coucno on Course(Cno)
create unique index SCno on SC(Sno ASC,Cno DESC);
ASC升序 DESC降序

2.修改索引
alter index 久索引名 rename to 新索引名

3.刪除索引
drop index 索引名
刪除索引時,系統會同時從數據字典中刪去有關該索引的描述

四、數據查詢

1.select

select * 查詢所有
select A 查詢屬性A
select 2017-Sage // Sage是出生日期 2017-Sage就是年齡,說明select後可以加表達式
select ‘佔一個屬性‘ // select後可以加字符,然後這個字符串可以做爲一個屬性,其列的內容就都是這些字符串
select 2017-Sage birthday,這個birthday就是2017-Sage表達式的別名
distinct用法:消除取值重複的行
select Sno
from SC;
結果
Sno
20170103
20170103
20170104

select distinct Sno
from SC;
結果
Sno
20170103
20170104

由以上可以總結出select的語法
select [all/distinct] 屬性/*/表達式/字符串
如果不寫distinct就默認all

2.where

select Sname
from Student
where Sdept=’CS’
where Sage<20

// between
where Sage between 20 and 30
where Sage not between 20 and 30

// in
where Sdept in (‘CS’,’MA’)

// like
通配符 %和_
%:代表任意長度的字符串(包括0)
_:代表任意單個字符

like擁有=的功能
比如:
select *
from student
where Sno like ‘3114002595’;
等價於
where Sno = ‘3114002595’;
特點功能:like加通配符
where Sname like ‘陳%’

‘\’轉換字符,‘_’就單單表示字符_

// order by子句
排序
select Sno,Grade
from SC
where Cno=’3’
order by Grade Desc;
默認是ASC升序

// 聚集函數只能用於select子句和group by中的having子句

GROUP BY子句
分組,值相等的爲一組
// 求各課程號及相應的選課人數
select Cno,COUNT(Sno)
from SC
group by Cno;
分組後,聚集函數將作用於每一個分組

查詢選修了三門以上課程的學生學號
select Sno
from SC
group by Sno
having count(*)>3;
如果分組後還要求按一定的條件對這些組進行篩選,最終只輸出滿足指定條件的組,則可以用having

having和where的區別
where在group by前,且不可以用聚集函數
having在group by後,可以用聚集函數

in和=的區別
in後可以是一個值也可以是一個集合
=後只能是一個值

any和all
any all (這幾個比較簡單不寫了,自行百度)

exists代表存在量詞
查詢所有選修了1號課程的學生姓名
select Sname
from Student
where EXISTS
(
select *
from SC
where Sno=Student.Sno and Cno=’1’
);
若內層查詢結果非空,則外層的where子句返回真值

not exists代表全程量詞

3.集合查詢
並操作UNION
交操作INTERSECT
差操作except

比如
select Sno
from SC
where Cno = ‘1’
union
select Sno
from SC
where Cno = ‘2’

select*
from Student
where Sdept = ‘CS’
intersect
select *
from Student
where Sage <= 19;

總結:select、from、where、between、in、like、order by、desc、ASC、having、group by、any、all、exists、union、intersect、except

四、數據更新
1.插入
insert
into 表名(屬性列)
values (常量)

比如:
insert
into Student(Sno,Sname,Ssex,Sage)
values(‘3114002595’,’陳東’,’男’,’18’);

values子句對新元組的個屬性賦值,字符串常數要用單引號括起來

2.修改
update 表名
set 列名 = 表達式
where

3.刪除
delete
from 表名
where 條件

五、視圖
視圖是虛表
1.創建視圖
create view 視圖名(列名)
as
子查詢
with check option

with check option 表示對視圖進行update、insert、delete操作時要保證更新、插入或刪除的行滿足視圖定義中的謂詞條件(即子查詢中的條件表達式)

比如
create view IS_Student
as
select Sno,Sname,Sage
from Student
where Sdept = ‘IS’
with check option;
以後對該視圖進行插入、修改、刪除操作時,關係數據庫管理系統會自動加上Sdept = ‘IS’的條件

2.刪除視圖
drop view 視圖名 [cascade]
刪除視圖,如果用cascade的話,就會連跟視圖有關係的視圖也刪除
基本表刪除後,由該表導出的所有視圖均無法使用,但是視圖的定義沒有從字典中清除,也就是說刪除視圖只能同股喲drop View子句

3.查詢視圖

4.更新視圖
並不是所有視圖都可以更新,因爲有些視圖的更新不能唯一的有意義的轉換成相應基本表的更新

發佈了38 篇原創文章 · 獲贊 10 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章