sql數據控制語句
A. sql中,dml,dcl,dql,ddl分別代表什麼意思
1,DML(DataManipulationLanguage):數據操作語言,用來定義資料庫記錄(數據)
2,DCL(DataControlLanguage):數據控制語言,用來定義訪問許可權和安全級別;
3,DQL(DataQueryLanguage):數據查詢語言,用來查詢記錄(數據);
4,DDL(DataDefinitionLanguage):數據定義語言,用來定義資料庫對象:庫、表、列等。
(1)sql數據控制語句擴展閱讀
DML分成交互型DML和嵌入型DML兩類。
依據語言的級別,DML又可分成過程性DML和非過程性DML兩種。
如insert,delete,update,select(插入、刪除、修改、檢索)等都是DML.
交互型DML:這類DML自成系統,可在終端上直接對資料庫進行操作。
嵌入型DML:這類DML是嵌入在主語言中使用。此時主語言是經過擴充能處理DML語句的語言。
過程性DML:用戶編程時,不僅需要指出「做什麼」(需要什麼樣的數據),還需要指出「怎麼做」(怎麼獲得數據)。層狀、網狀的DML屬於過程性語言。
非過程性DML:用戶編程時,只需要指出「做什麼」,不需要指出「怎麼做」。關系型DML屬於非過程性語言。
B. 資料庫常用sql語句有哪些
資料庫常用sql語句
Student(S#,Sname,Sage,Ssex) 學生表
Course(C#,Cname,T#) 課程表
SC(S#,C#,score) 成績表
Teacher(T#,Tname) 教師表
問題:
1、查詢「001」課程比「002」課程成績高的所有學生的學號;
select a.S# from (select s#,score from SC where C#='001') a,(select s#,score
from SC where C#='002') b
where a.score>b.score and a.s#=b.s#;
2、查詢平均成績大於60分的同學的學號和平均成績;
select S#,avg(score)
from sc
group by S# having avg(score) >60;
3、查詢所有同學的學號、姓名、選課數、總成績;
select Student.S#,Student.Sname,count(SC.C#),sum(score)
from Student left Outer join SC on Student.S#=SC.S#
group by Student.S#,Sname
4、查詢姓「李」的老師的個數;
select count(distinct(Tname))
from Teacher
where Tname like '李%';
5、查詢沒學過「葉平」老師課的同學的學號、姓名;
select Student.S#,Student.Sname
from Student
where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='葉平');
6、查詢學過「001」並且也學過編號「002」課程的同學的學號、姓名;
select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');
7、查詢學過「葉平」老師所教的所有課的同學的學號、姓名;
select S#,Sname
from Student
where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='葉平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='葉平'));
8、查詢課程編號「002」的成績比課程編號「001」課程低的所有同學的學號、姓名;
Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2
from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2<score;
9、查詢所有課程成績小於60分的同學的學號、姓名;
select S#,Sname
from Student
where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);
10、查詢沒有學全所有課的同學的學號、姓名;
select Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);
11、查詢至少有一門課與學號為「1001」的同學所學相同的同學的學號和姓名;
select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';
12、查詢至少學過學號為「001」同學所有一門課的其他同學學號和姓名;
select distinct SC.S#,Sname
from Student,SC
where Student.S#=SC.S# and C# in (select C# from SC where S#='001');
13、把「SC」表中「葉平」老師教的課的成績都更改為此課程的平均成績;
SC set score=(select avg(SC_2.score)
from SC SC_2
where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='葉平');
14、查詢和「1002」號的同學學習的課程完全相同的其他同學學號和姓名;
select S# from SC where C# in (select C# from SC where S#='1002')
group by S# having count(*)=(select count(*) from SC where S#='1002');
15、刪除學習「葉平」老師課的SC表記錄;
Delect SC
from course ,Teacher
where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='葉平';
16、向SC表中插入一些記錄,這些記錄要求符合以下條件:沒有上過編號「003」課程的同學學號、2、
號課的平均成績;
Insert SC select S#,'002',(Select avg(score)
from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');
17、按平均成績從高到低顯示所有學生的「資料庫」、「企業管理」、「英語」三門的課程成績,按如下形式顯示: 學生ID,,資料庫,企業管理,英語,有效課程數,有效平均分
SELECT S# as 學生ID
,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 資料庫
,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企業管理
,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英語
,COUNT(*) AS 有效課程數, AVG(t.score) AS 平均成績
FROM SC AS t
GROUP BY S#
ORDER BY avg(t.score)
18、查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分
SELECT L.C# As 課程ID,L.score AS 最高分,R.score AS 最低分
FROM SC L ,SC AS R
WHERE L.C# = R.C# and
L.score = (SELECT MAX(IL.score)
FROM SC AS IL,Student AS IM
WHERE L.C# = IL.C# and IM.S#=IL.S#
GROUP BY IL.C#)
AND
R.Score = (SELECT MIN(IR.score)
FROM SC AS IR
WHERE R.C# = IR.C#
GROUP BY IR.C#
);
19、按各科平均成績從低到高和及格率的百分數從高到低順序
SELECT t.C# AS 課程號,max(course.Cname)AS 課程名,isnull(AVG(score),0) AS 平均成績
,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分數
FROM SC T,Course
where t.C#=course.C#
GROUP BY t.C#
ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC
20、查詢如下課程平均成績和及格率的百分數(用"1行"顯示): 企業管理(001),馬克思(002),OO&UML (003),資料庫(004)
SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企業管理平均分
,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企業管理及格百分數
,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 馬克思平均分
,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 馬克思及格百分數
,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分
,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分數
,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 資料庫平均分
,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 資料庫及格百分數
FROM SC
21、查詢不同老師所教不同課程平均分從高到低顯示
SELECT max(Z.T#) AS 教師ID,MAX(Z.Tname) AS 教師姓名,C.C# AS 課程ID,MAX(C.Cname) AS 課程名稱,AVG(Score) AS 平均成績
FROM SC AS T,Course AS C ,Teacher AS Z
where T.C#=C.C# and C.T#=Z.T#
GROUP BY C.C#
ORDER BY AVG(Score) DESC
22、查詢如下課程成績第 3 名到第 6 名的學生成績單:企業管理(001),馬克思(002),UML (003),資料庫(004)
[學生ID],[學生姓名],企業管理,馬克思,UML,資料庫,平均成績
SELECT DISTINCT top 3
SC.S# As 學生學號,
Student.Sname AS 學生姓名 ,
T1.score AS 企業管理,
T2.score AS 馬克思,
T3.score AS UML,
T4.score AS 資料庫,
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 總分
FROM Student,SC LEFT JOIN SC AS T1
ON SC.S# = T1.S# AND T1.C# = '001'
LEFT JOIN SC AS T2
ON SC.S# = T2.S# AND T2.C# = '002'
LEFT JOIN SC AS T3
ON SC.S# = T3.S# AND T3.C# = '003'
LEFT JOIN SC AS T4
ON SC.S# = T4.S# AND T4.C# = '004'
WHERE student.S#=SC.S# and
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)
NOT IN
(SELECT
DISTINCT
TOP 15 WITH TIES
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)
FROM sc
LEFT JOIN sc AS T1
ON sc.S# = T1.S# AND T1.C# = 'k1'
LEFT JOIN sc AS T2
ON sc.S# = T2.S# AND T2.C# = 'k2'
LEFT JOIN sc AS T3
ON sc.S# = T3.S# AND T3.C# = 'k3'
LEFT JOIN sc AS T4
ON sc.S# = T4.S# AND T4.C# = 'k4'
ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);
23、統計列印各科成績,各分數段人數:課程ID,課程名稱,[100-85],[85-70],[70-60],[<60]
SELECT SC.C# as 課程ID, Cname as 課程名稱
,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]
,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]
,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]
,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]
FROM SC,Course
where SC.C#=Course.C#
GROUP BY SC.C#,Cname;
24、查詢學生平均成績及其名次
SELECT 1+(SELECT COUNT( distinct 平均成績)
FROM (SELECT S#,AVG(score) AS 平均成績
FROM SC
GROUP BY S#
) AS T1
WHERE 平均成績 > T2.平均成績) as 名次,
S# as 學生學號,平均成績
FROM (SELECT S#,AVG(score) 平均成績
FROM SC
GROUP BY S#
) AS T2
ORDER BY 平均成績 desc;
25、查詢各科成績前三名的記錄:(不考慮成績並列情況)
SELECT t1.S# as 學生ID,t1.C# as 課程ID,Score as 分數
FROM SC t1
WHERE score IN (SELECT TOP 3 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC
)
ORDER BY t1.C#;
26、查詢每門課程被選修的學生數
select c#,count(S#) from sc group by C#;
27、查詢出只選修了一門課程的全部學生的學號和姓名
select SC.S#,Student.Sname,count(C#) AS 選課數
from SC ,Student
where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;
28、查詢男生、女生人數
Select count(Ssex) as 男生人數 from Student group by Ssex having Ssex='男';
Select count(Ssex) as 女生人數 from Student group by Ssex having Ssex='女';
29、查詢姓「張」的學生名單
SELECT Sname FROM Student WHERE Sname like '張%';
30、查詢同名同性學生名單,並統計同名人數
select Sname,count(*) from Student group by Sname having count(*)>1;;
31、1981年出生的學生名單(註:Student表中Sage列的類型是datetime)
select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age
from student
where CONVERT(11),DATEPART(year,Sage))='1981';
32、查詢每門課程的平均成績,結果按平均成績升序排列,平均成績相同時,按課程號降序排列
Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;
33、查詢平均成績大於85的所有學生的學號、姓名和平均成績
select Sname,SC.S# ,avg(score)
from Student,SC
where Student.S#=SC.S# group by SC.S#,Sname having avg(score)>85;
34、查詢課程名稱為「資料庫」,且分數低於60的學生姓名和分數
Select Sname,isnull(score,0)
from Student,SC,Course
where SC.S#=Student.S# and SC.C#=Course.C# and Course.Cname='資料庫'and score<60;
35、查詢所有學生的選課情況;
SELECT SC.S#,SC.C#,Sname,Cname
FROM SC,Student,Course
where SC.S#=Student.S# and SC.C#=Course.C# ;
36、查詢任何一門課程成績在70分以上的姓名、課程名稱和分數;
SELECT distinct student.S#,student.Sname,SC.C#,SC.score
FROM student,Sc
WHERE SC.score>=70 AND SC.S#=student.S#;
37、查詢不及格的課程,並按課程號從大到小排列
select c# from sc where scor e<60 order by C# ;
38、查詢課程編號為003且課程成績在80分以上的學生的學號和姓名;
select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#='003';
39、求選了課程的學生人數
select count(*) from sc;
40、查詢選修「葉平」老師所授課程的學生中,成績最高的學生姓名及其成績
select Student.Sname,score
from Student,SC,Course C,Teacher
where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='葉平' and SC.score=(select max(score)from SC where C#=C.C# );
41、查詢各個課程及相應的選修人數
select count(*) from sc group by C#;
42、查詢不同課程成績相同的學生的學號、課程號、學生成績
select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and A.C# <>B.C# ;
43、查詢每門功成績最好的前兩名
SELECT t1.S# as 學生ID,t1.C# as 課程ID,Score as 分數
FROM SC t1
WHERE score IN (SELECT TOP 2 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC
)
ORDER BY t1.C#;
44、統計每門課程的學生選修人數(超過10人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,查詢結果按人數降序排列,若人數相同,按課程號升序排列
select C# as 課程號,count(*) as 人數
from sc
group by C#
order by count(*) desc,c#
45、檢索至少選修兩門課程的學生學號
select S#
from sc
group by s#
having count(*) > = 2
46、查詢全部學生都選修的課程的'課程號和課程名
select C#,Cname
from Course
where C# in (select c# from sc group by c#)
47、查詢沒學過「葉平」老師講授的任一門課程的學生姓名
select Sname from Student where S# not in (select S# from Course,Teacher,SC where Course.T#=Teacher.T# and SC.C#=course.C# and Tname='葉平');
48、查詢兩門以上不及格課程的同學的學號及其平均成績
select S#,avg(isnull(score,0)) from SC where S# in (select S# from SC where score<60 group="" by="" having="">2)group by S#;
49、檢索「004」課程分數小於60,按分數降序排列的同學學號
select S# from SC where C#='004'and score<60 order by score desc;
50、刪除「002」同學的「001」課程的成績
from Sc where S#='001'and C#='001';
一、SQL語言簡介
1、SQL語言簡介
SQL是結構化查詢語言(Structured Query Language),是用於訪問和處理資料庫的標準的計算機語言。
SQL語言的功能如下:
A、SQL面向資料庫執行查詢
B、SQL可從資料庫取回數據
C、SQL可在資料庫中插入新的記錄
D、SQL可更新資料庫中的數據
E、SQL可從資料庫刪除記錄
F、SQL可創建新資料庫
G、SQL可在資料庫中創建新表
H、SQL可在資料庫中創建存儲過程
I、SQL可在資料庫中創建視圖
J、SQL可以設置表、存儲過程和視圖的許可權
SQL是一門ANSI的標准計算機語言,用來訪問和操作資料庫系統。SQL語句用於取回和更新資料庫中的數據。SQL可與資料庫程序協同工作,比如MS Access、DB2、Informix、MS SQL Server、Oracle、MySQL、Sybase以及其他資料庫系統。
每一種資料庫有自己版本的SQL語言,但是為了與ANSI標准相兼容,SQL必須以相似的方式共同地來支持一些主要的關鍵詞(比如 SELECT、UPDATE、DELETE、INSERT、WHERE等等)。
除了SQL標准之外,大部分SQL資料庫程序都擁有自己的私有擴展。
2、SQL語言分類
SQL語言分為數據定義語言、數據控制語言、數據操作語言、數據查詢語言,分別實現對資料庫數據操作。
二、SQL語言基礎
1、數據定義語言(DDL)
DDL:Data Definition Language
用於定義和管理數據對象,包括資料庫、數據表、函數、視圖、索引、觸發器等。例如:CREATE、DROP、ALTER等語句。
create table student
(
sid INT,
sname var20)
);
alter table student add age int default 20;
student;
drop database student;
2、數據控制語言(DCL)
DCL:Data Control Language
用來管理資料庫的語言,包含授權用戶訪問、拒絕用戶訪問、撤銷授予的許可權。例如:GRANT、DENY、REVOKE、COMMIT、ROLLBACK等語句。
創建用戶
create user 『wang』@『localhost』 identified by 『a1!』;
許可權設置
grant select on db.student to 『wang』@『localhost』;
撤銷許可權
revoke select on db.student from 『wang』@『localhost』;
3、數據操作語言(DML)
DML:Data Manipulation Language
用於操作資料庫對象中所包含的數據,增、刪、改。例如:INSERT、DELETE、UPDATE語句。
4、數據查詢語言(DQL)
DQL:Data Query Language
用於查詢資料庫對象中所包含的數據,能夠進行單表查詢、連接查詢、嵌套查詢,以及集合查詢等各種復雜程度不同的資料庫查詢,並將數據返回到客戶機中顯示。例如:SELECT語句。
三、常量和變數
1、常量
A、字元常量
字元串常量使用單引號或雙引號,數值常量不用加引號。
如果字元串常量中需要換行、有單引號、雙引號 % _
前面需要加轉義字元
換行
』 一個單引號
」 一個雙引號
一個 如果沒有轉義字元 就認為是一個轉義字元
% 一個% 如果沒有轉義字元就認為這是一個通配符
_ 一個_ 如果沒有轉移字元 就認為是一個通配符
select 『hanli』gang001』
select 『han ligang001』
select 『han ligang001』
select 「han"ligang001」
select 「韓立剛001」
B、數值常量
數值常量不用添加引號,
select 100+100+200
C、布爾常量
布爾型常量取值 true 和 false
在SQL中使用1和0表示
select true,false
在表達式中
select 100>200
select 100<200
2、變數
用戶自定義變數使用@開始,使用set給變數賦值。
set @name=『孫悟空』;
select @name;
select * from student;
into student values (6,『孫悟空』,20);
into student values (8,@name,20);
set @sid=9,@nid=10
into student values (@sid,@name,20);
select @sid+@nid;
set @sid=@sid+1;
select @sid;
set @sname3=(select sname from student where sid=9);
select @sname3;
3、系統變數
系統變數分為全局系統變數和會話系統變數。
全局系統變數:針對所有默認設置
會話系統變數:針對當前用戶生效,用戶登錄MySQL會使用全局系統變數,如果會話中更改了變數值,使用更改後的值,不過只針對當前用戶生效。
show variables 顯示會話系統變數
show global variables 顯示全局系統變數
show session variables 顯示會話系統變數
show global variables like 『sql_select_limit』;使用通配符顯示匹配的變數設置
show session variables like 『sql_select_limit』;系統變數使用@@標識
select @@global.sql_select_limit 查看某個全局系統變數設置
select @@session.sql_select_limit 查看某個會話系統變數設置
set @@session.sql_select_limit=2 設置會話系統變數
全局系統變數需要在/etc/my.cnf配置文件中修改。
C. SQL查詢語句
SQL查詢語句大全
SQL語句無論是種類還是數量都是繁多的,很多語句也是經常要用到的,SQL查詢語句就是一個典型的例子,無論是高級查詢還是低級查詢,SQL查詢語句的需求是最頻繁的。那麼SQL查詢語句有哪些?下面跟我一起來看看吧!
一、簡單查詢語句
1. 查看錶結構
SQL>DESC emp;
2. 查詢所有列
SQL>SELECT * FROM emp;
3. 查詢指定列
SQL>SELECT empmo, ename, mgr FROM emp;
SQL>SELECT DISTINCT mgr FROM emp; 只顯示結果不同的項
4. 查詢指定行
SQL>SELECT * FROM emp WHERE job='CLERK';
5. 使用算術表達式
SQL>SELECT ename, sal*13+nvl(comm,0) FROM emp;
nvl(comm,1)的意思是,如果comm中有值,則nvl(comm,1)=comm; comm中無值,則nvl(comm,1)=0。
SQL>SELECT ename, sal*13+nvl(comm,0) year_sal FROM emp; (year_sal為別名,可按別名排序)
SQL>SELECT * FROM emp WHERE hiredate>'01-1月-82';
6. 使用like操作符(%,_)
%表示一個或多個字元,_表示一個字元,[charlist]表示字元列中的任何單一字元,[^charlist]或者[!charlist]不在字元列中的任何單一字元。
SQL>SELECT * FROM emp WHERE ename like 'S__T%';
7. 在where條件中使用In
SQL>SELECT * FROM emp WHERE job IN ('CLERK','ANALYST');
8. 查詢欄位內容為空/非空的語句
SQL>SELECT * FROM emp WHERE mgr IS/IS NOT NULL;
9. 使用邏輯操作符號
SQL>SELECT * FROM emp WHERE (sal>500 or job='MANAGE') and ename like 'J%';
10. 將查詢結果按欄位的值進行排序
SQL>SELECT * FROM emp ORDER BY deptno, sal DESC; (按部門升序,並按薪酬降序)
二、復雜查詢
1. 數據分組(max,min,avg,sum,count)
SQL>SELECT MAX(sal),MIN(age),AVG(sal),SUM(sal) from emp;
SQL>SELECT * FROM emp where sal=(SELECT MAX(sal) from emp));
SQL>SELEC COUNT(*) FROM emp;
2. group by(用於對查詢結果的分組統計) 和 having子句(用於限制分組顯示結果)
SQL>SELECT deptno,MAX(sal),AVG(sal) FROM emp GROUP BY deptno;
SQL>SELECT deptno, job, AVG(sal),MIN(sal) FROM emp group by deptno,job having AVG(sal)<2000;
對於數據分組的總結:
a. 分組函數只能出現在選擇列表、having、order by子句中(不能出現在where中)
b. 如果select語句中同時包含有group by, having, order by,那麼它們的順序是group by, having, order by。
c. 在選擇列中如果有列、表達式和分組函數,那麼這些列和表達式必須出現在group by子句中,否則就是會出錯。
使用group by不是使用having的前提條件。
3. 多表查詢
SQL>SELECT e.name,e.sal,d.dname FROM emp e, dept d WHERE e.deptno=d.deptno order by d.deptno;
SQL>SELECT e.ename,e.sal,s.grade FROM emp e,salgrade s WHER e.sal BETWEEN s.losal AND s.hisal;
4. 自連接(指同一張表的連接查詢)
SQL>SELECT er.ename, ee.ename mgr_name from emp er, emp ee where er.mgr=ee.empno;
5. 子查詢(嵌入到其他sql語句中的select語句,也叫嵌套查詢)
5.1 單行子查詢
SQL>SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM emp where ename='SMITH');查詢表中與smith同部門的人員名字。因為返回結果只有一行,所以用「=」連接子查詢語句
5.2 多行子查詢
SQL>SELECT ename,job,sal,deptno from emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno=10);查詢表中與部門號為10的工作相同的員工的姓名、工作、薪水、部門號。因為返回結果有多行,所以用「IN」連接子查詢語句。
in與exists的區別: exists() 後面的子查詢被稱做相關子查詢,它是不返回列表的值的。只是返回一個ture或false的結果,其運行方式是先運行主查詢一次,再去子查詢里查詢與其對 應的結果。如果是ture則輸出,反之則不輸出。再根據主查詢中的每一行去子查詢里去查詢。in()後面的子查詢,是返回結果集的,換句話說執行次序和 exists()不一樣。子查詢先產生結果集,然後主查詢再去結果集里去找符合要求的欄位列表去。符合要求的輸出,反之則不輸出。
5.3 使用ALL
SQL>SELECT ename,sal,deptno FROM emp WHERE sal> ALL (SELECT sal FROM emp WHERE deptno=30);或SQL>SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MAX(sal) FROM emp WHERE deptno=30);查詢工資比部門號為30號的所有員工工資都高的員工的姓名、薪水和部門號。以上兩個語句在功能上是一樣的,但執行效率上,函數會高 得多。
5.4 使用ANY
SQL>SELECT ename,sal,deptno FROM emp WHERE sal> ANY (SELECT sal FROM emp WHERE deptno=30);或SQL>SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MIN(sal) FROM emp WHERE deptno=30);查詢工資比部門號為30號的任意一個員工工資高(只要比某一員工工資高即可)的員工的姓名、薪水和部門號。以上兩個語句在功能上是 一樣的,但執行效率上,函數會高得多。
5.5 多列子查詢
SQL>SELECT * FROM emp WHERE (job, deptno)=(SELECT job, deptno FROM emp WHERE ename='SMITH');
5.6 在from子句中使用子查詢
SQL>SELECT emp.deptno,emp.ename,emp.sal,t_avgsal.avgsal FROM emp,(SELECT emp.deptno,avg(emp.sal) avgsal FROM emp GROUP BY emp.deptno) t_avgsal where emp.deptno=t_avgsal.deptno AND emp.sal>t_avgsal.avgsal ORDER BY emp.deptno;
5.7 分頁查詢
資料庫的每行數據都有一個對應的行號,稱為rownum.
SQL>SELECT a2.* FROM (SELECT a1.*, ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal) a1 WHERE ROWNUM<=10) a2="" where="" rn="">=6;
指定查詢列、查詢結果排序等,都只需要修改最里層的子查詢即可。
5.8 用查詢結果創建新表
SQL>CREATE TABLE mytable (id,name,sal,job,deptno) AS SELECT empno,ename,sal,job,deptno FROM emp;
5.9 合並查詢(union 並集, intersect 交集, union all 並集+交集, minus差集)
SQL>SELECT ename, sal, job FROM emp WHERE sal>2500 UNION(INTERSECT/UNION ALL/MINUS) SELECT ename, sal, job FROM emp WHERE job='MANAGER';
合並查詢的執行效率遠高於and,or等邏輯查詢。
5.10 使用子查詢插入數據
SQL>CREATE TABLE myEmp(empID number(4), name varchar2(20), sal number(6), job varchar2(10), dept number(2)); 先建一張空表;
SQL>INSERT INTO myEmp(empID, name, sal, job, dept) SELECT empno, ename, sal, job, deptno FROM emp WHERE deptno=10; 再將emp表中部門號為10的數據插入到新表myEmp中,實現數據的批量查詢。
5.11 使用了查詢更新表中的數據
SQL>UPDATE emp SET(job, sal, comm)=(SELECT job, sal, comm FROM emp where ename='SMITH') WHERE ename='SCOTT';
簡介
SQL語言1974年由Boyce和Chamberlin提出,並首先在IBM公司研製的關系資料庫系統SystemR上實現。由於它具有功能豐富、使用方便靈活、語言簡潔易學等突出的優點,深受計算機工業界和計算機用戶的歡迎。1980年10月,經美國國家標准局(ANSI)的資料庫委員會X3H2批准,將SQL作為關系資料庫語言的美國標准,同年公布了標准SQL,此後不久,國際標准化組織(ISO)也作出了同樣的決定。
SQL從功能上可以分為3部分:數據定義、數據操縱和數據控制。
SQL的核心部分相當於關系代數,但又具有關系代數所沒有的許多特點,如聚集、資料庫更新等。它是一個綜合的、通用的、功能極強的關系資料庫語言。其特點是:
1、數據描述、操縱、控制等功能一體化。
2、兩種使用方式,統一的語法結構。SQL有兩種使用方式。一是聯機交互使用,這種方式下的SQL實際上是作為自含型語言使用的。另一種方式是嵌入到某種高級程序設計語言(如C語言等)中去使用。前一種方式適合於非計算機專業人員使用,後一種方式適合於專業計算機人員使用。盡管使用方式不向,但所用語言的語法結構基本上是一致的。
3、高度非過程化。SQL是一種第四代語言(4GL),用戶只需要提出「干什麼」,無須具體指明「怎麼干」,像存取路徑選擇和具體處理操作等均由系統自動完成。
4、語言簡潔,易學易用。盡管SQL的'功能很強,但語言十分簡潔,核心功能只用了9個動詞。SQL的語法接近英語口語,所以,用戶很容易學習和使用。
功能
SQL具有數據定義、數據操縱、和數據控制的功能。
1、SQL數據定義功能:能夠定義資料庫的三級模式結構,即外模式、全局模式和內模式結構。在SQL中,外模式又叫做視圖(View),全局模式簡稱模式(Schema),內模式由系統根據資料庫模式自動實現,一般無需用戶過問。
2、SQL數據操縱功能:包括對基本表和視圖的數據插入、刪除和修改,特別是具有很強的數據查詢功能。
3、SQL的數據控制功能:主要是對用戶的訪問許可權加以控制,以保證系統的安全性。
語句結構
結構化查詢語言包含6個部分:
1、數據查詢語言(DQL: Data Query Language):其語句,也稱為「數據檢索語句」,用以從表中獲得數據,確定數據怎樣在應用程序給出。保留字SELECT是DQL(也是所有SQL)用得最多的動詞,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。這些DQL保留字常與其它類型的SQL語句一起使用。
2、數據操作語言(DML:Data Manipulation Language):其語句包括動詞INSERT、UPDATE和DELETE。它們分別用於添加、修改和刪除。
3、事務控制語言(TCL):它的語句能確保被DML語句影響的表的所有行及時得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存點)命令、ROLLBACK(回滾)命令。
4、數據控制語言(DCL):它的語句通過GRANT或REVOKE實現許可權控制,確定單個用戶和用戶組對資料庫對象的訪問。某些RDBMS可用GRANT或REVOKE控制對表單個列的訪問。
5、數據定義語言(DDL):其語句包括動詞CREATE,ALTER和DROP。在資料庫中創建新表或修改、刪除表(CREATE TABLE 或 DROP TABLE);為表加入索引等。
6、指針控制語言(CCL):它的語句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用於對一個或多個表單獨行的操作。
語言特點
SQL風格統一
SQL可以獨立完成資料庫生命周期中的全部活動,包括定義關系模式、錄入數據、建立資料庫、査詢、更新、維護、資料庫重構、資料庫安全性控制等一系列操作,這就為資料庫應用系統開發提供了良好的環境,在資料庫投入運行後,還可根據需要隨時逐步修改模式,且不影響資料庫的運行,從而使系統具有良好的可擴充性。
高度非過程化
非關系數據模型的數據操縱語言是面向過程的語言,用其完成用戶請求時,必須指定存取路徑。而用SQL進行數據操作,用戶只需提出「做什麼」,而不必指明「怎麼做」,因此用戶無須了解存取路徑,存取路徑的選擇以及SQL語句的操作過程由系統自動完成。這不但大大減輕了用戶負擔,而且有利於提高數據獨立性。
面向集合的操作方式
SQL採用集合操作方式,不僅查找結果可以是元組的集合,而且一次插入、刪除、更新操作的對象也可以是元組的集合。
以同一種語法結構提供兩種使用方式
SQL既是自含式語言,又是嵌入式語言。作為自含式語言,它能夠獨立地用於聯機交互的使用方式,用戶可以在終端鍵盤上直接輸入SQL命令對資料庫進行操作。作為嵌入式語言,SQL語句能夠嵌入到高級語言(如C、C#、JAVA)程序中,供程序員設計程序時使用。而在兩種不同的使用方式下,SQL的語法結構基本上是一致的。這種以統一的語法結構提供兩種不同的操作方式,為用戶提供了極大的靈活性與方便性。
語言簡潔,易學易用
SQL功能極強,但由於設計巧妙,語言十分簡潔,完成數據定義、數據操縱、數據控制的核心功能只用了9個動詞:CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。且SQL語言語法簡單,接近英語口語,因此容易學習,也容易使用。
;D. SQL語言包括哪三種類型,每種類型又包括哪些語句
SQL包含四種程序設計語言類別的語句:數據定義語言(DDL)、數據操作語言(DML)、數據控制語言(DCL)和事物控制語言(TCL)。
1、Data Definition Language(DDL) :CREATE DATABASE - 創建新資料庫 ;ALTER DATABASE - 修改資料庫;CREATE TABLE - 創建新表;ALTER TABLE - 變更(改變)資料庫表;DROP TABLE - 刪除表;CREATE INDEX - 創建索引(搜索鍵);DROP INDEX - 刪除索引。
2、Data Manipulation Language(DML) :SELECT - 從資料庫表中獲取數據;UPDATE - 更新資料庫表中的數據;DELETE - 從資料庫表中刪除數據;INSERT INTO - 向資料庫表中插入數據。
3、Data Control Language(DCL) :GRANT - 授權;REVOKE - 撤銷授權;DENY - 拒絕授權。
4、Transaction Control Language(TCL) :SAVEPOINT - 設置保存點;ROLLBACK - 回滾;COMMIT - 提交。
(4)sql數據控制語句擴展閱讀:
SQL功能極強,但由於設計巧妙,語言十分簡潔,完成數據定義、數據操縱、數據控制的核心功能只用了9個動詞: CREATE、 ALTER、DROP、 SELECT、 INSERT、 UPDATE、 DELETE、GRANT、 REVOKE。且SQL語言語法簡單,接近英語口語,因此容易學習,也容易使用。
SQL採用集合操作方式,不僅查找結果可以是元組的集合,而且一次插入、刪除、更新操作的對象也可以是元組的集合。
E. sql語句中常用的數據控制語句包括create
數據控制語句,應該是Data Control Language,也就是我們一般意義上說的DCL語句,這個語句常用的大概有四個,grant(授權)revoke(收回)rollback(回滾)commit(確認)
至於create,drop,alter等應該是屬於DDL語句吧。(也就是數據定義語言)
F. SQL語句是什麼
SQL全稱是「結構化查詢語言(Structured Query Language)」 SQL(Structured Query Language)是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統。 SQL同時也是資料庫腳本文件的擴展名。 SQL是高級的非過程化編程語言,允許用戶在高層數據結構上工作。他不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統可以使用相同的SQL語言作為數據輸入與管理的介面。它以記錄集合作為操作對象,所有SQL語句接受集合作為輸入,返回集合作為輸出,這種集合特性允許一條SQL語句的輸出作為另一條SQL語句的輸入,所以SQL語句可以嵌套,這使他具有極大的靈活性和強大的功能,在多數情況下,在其他語言中需要一大段程序實現的功能只需要一個SQL語句就可以達到目的,這也意味著用SQL語言可以寫出非常復雜的語句。 結構化查詢語言(Structured Query Language)最早是IBM的聖約瑟研究實驗室為其關系資料庫管理系統SYSTEM R開發的一種查詢語言,它的前身是SQUARE語言。SQL語言結構簡潔,功能強大,簡單易學,所以自從IBM公司1981年推出以來,SQL語言得到了廣泛的應用。如今無論是像Oracle、Sybase、Informix、SQL Server這些大型的資料庫管理系統,還是像Visual Foxporo、PowerBuilder這些PC上常用的資料庫開發系統,都支持SQL語言作為查詢語言。 美國國家標准局(ANSI)與國際標准化組織(ISO)已經制定了SQL標准。ANSI是一個美國工業和商業集團組織,負責開發美國的商務和通訊標准。ANSI同時也是ISO和International Electrotechnical Commission(IEC)的成員之一。ANSI 發布與國際標准組織相應的美國標准。1992年,ISO和IEC發布了SQL國際標准,稱為SQL-92。ANSI隨之發布的相應標準是ANSI SQL-92。ANSI SQL-92有時被稱為ANSI SQL。盡管不同的關系資料庫使用的SQL版本有一些差異,但大多數都遵循 ANSI SQL 標准。SQL Server使用ANSI SQL-92的擴展集,稱為T-SQL,其遵循ANSI制定的 SQL-92標准。 SQL語言包含4個部分: ※ 數據定義語言(DDL),例如:CREATE、DROP、ALTER等語句。 ※ 數據操作語言(DML),例如:INSERT、UPDATE、DELETE語句。 ※ 數據查詢語言(DQL),例如:SELECT語句。 ※ 數據控制語言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等語句。 SQL語言包括三種主要程序設計語言類別的陳述式:數據定義語言(DDL),數據操作語言(DML)及數據控制語言(DCL)。[編輯本段]SQL發展歷史 1970: E.J. Codd 發表了關系資料庫理論(relational database theory); 1974-79: IBM 以Codd的理論為基礎開發了「Sequel」,並重命名為"SQL"; 1979: Oracle 發布了商業版SQL 1981-84: 出現了其他商業版本,分別來自 IBM(DB2),Data General(DG/SQL),Relational Technology(INGRES); SQL/86:ANSI 跟 ISO的第一個標准; SQL/89:增加了引用完整性(referential integrity); SQL/92(aka SQL2):被資料庫管理系統(DBMS)生產商廣發接受; 1997+:成為動態網站(Dynamic web content)的後台支持; SQL/99:Core level跟其他8種相應的level,包括遞歸查詢,程序跟流程式控制制,基本的對象(object)支持包括oids; SQL/2003:包含了XML相關內容,自動生成列值(column values); 2005-09-30:「Data is the next generation inside...SQL is the new HTML」! Tim O'eilly提出了Web 2.0理念,稱數據將是核心,SQL將成為「新的 HTML"; SQL/2006:定義了SQL與XML(包含XQuery)的關聯應用; 2006:Sun公司將以SQL基礎的資料庫管理系統嵌入Java V6
G. SQL語句語法大全
我整理的一些比較常用的SQL語句語法 需要的朋友可以過來參考下
一 數據控制語句 (DML) 部分
INSERT (往數據表裡插入記錄的語句)
INSERT INTO 表名(欄位名 欄位名 ……) VALUES ( 值 值 ……);
INSERT INTO 表名(欄位名 欄位名 ……) SELECT 欄位名 欄位名 …… FROM 另外的表名;
字元串類型的欄位值必須用單引號括起來 例如: GOOD DAY
如果欄位值里包含單引號 需要進行字元串轉換 我們把它替換成兩個單引號
字元串類型的欄位值超過定義的長度會出錯 最好在插入前進行長度校驗
日期欄位的欄位值可以用當前資料庫的系統時間SYSDATE 精確到秒
或者用字元串轉換成日期型函數TO_DATE(『 YYYY MM DD )
TO_DATE()還有很多種日期格式 可以參看ORACLE DOC
年 月 日 小時:分鍾:秒 的格式YYYY MM DD HH :MI:SS
INSERT時最大可操作的字元串長度小於等於 個單位元組 如果要插入更長的字元串 請考慮欄位用CLOB類型
方法借用ORACLE里自帶的DBMS_LOB程序包
INSERT時如果要用到從 開始自動增長的序列號 應該先建立一個序列號
CREATE SEQUENCE 序列號的名稱 (最好是表名+序列號標記) INCREMENT BY START WITH
MAXVALUE CYCLE NOCACHE;
其中最大的值按欄位的長度來定 如果定義的自動增長的序列號 NUMBER( ) 最大值為
INSERT 語句插入這個欄位值為: 序列號的名稱 NEXTVAL
DELETE (刪除數據表裡記錄的語句)
DELETE FROM表名 WHERE 條件;
注意 刪除記錄並不能釋放ORACLE里被佔用的數據塊表空間 它只把那些被刪除的數據塊標成unused
如果確實要刪除一個大表裡的全部記錄 可以用 TRUNCATE 命令 它可以釋放佔用的數據塊表空間
TRUNCATE TABLE 表名;
此操作不可回退
UPDATE (修改數據表裡記錄的語句)
UPDATE表名 SET 欄位名 =值 欄位名 =值 …… WHERE 條件;
如果修改的值N沒有賦值或定義時 將把原來的記錄內容清為NULL 最好在修改前進行非空校驗;
值N超過定義的長度會出錯 最好在插入前進行長度校驗
注意事項:
A 以上SQL語句對表都加上了行級鎖
確認完成後 必須加上事物處理結束的命令 MIT 才能正式生效
否則改變不一定寫入資料庫里
如果想撤回這些操作 可以用命令 ROLLBACK 復原
B 在運行INSERT DELETE 和 UPDATE 語句前最好估算一下可能操作的記錄范圍
應該把它限定在較小 (一萬條記錄) 范圍內 否則ORACLE處理這個事物用到很大的回退段
程序響應慢甚至失去響應 如果記錄數上十萬以上這些操作 可以把這些SQL語句分段分次完成
其間加上MIT 確認事物處理
二 數據定義 (DDL) 部分
CREATE (創建表 索引 視圖 同義詞 過程 函數 資料庫鏈接等)
ORACLE常用的欄位類型有
CHAR 固定長度的字元串
VARCHAR 可變長度的字元串
NUMBER(M N) 數字型M是位數總長度 N是小數的長度
DATE 日期類型
創建表時要把較小的不為空的欄位放在前面 可能為空的欄位放在後面
創建表時可以用中文的欄位名 但最好還是用英文的欄位名
創建表時可以給欄位加上默認值 例如 DEFAULT SYSDATE
這樣每次插入和修改時 不用程序操作這個欄位都能得到動作的時間
創建表時可以給欄位加上約束條件
例如 不允許重復 UNIQUE 關鍵字 PRIMARY KEY
ALTER (改變表 索引 視圖等)
改變表的名稱
ALTER TABLE 表名 TO 表名 ;
在表的後面增加一個欄位
ALTER TABLE表名 ADD 欄位名 欄位名描述;
修改表裡欄位的定義描述
ALTER TABLE表名 MODIFY欄位名 欄位名描述;
給表裡的欄位加上約束條件
ALTER TABLE 表名 ADD CONSTRAINT 約束名 PRIMARY KEY (欄位名);
ALTER TABLE 表名 ADD CONSTRAINT 約束名 UNIQUE (欄位名);
把表放在或取出資料庫的內存區
ALTER TABLE 表名 CACHE;
ALTER TABLE 表名 NOCACHE;
DROP (刪除表 索引 視圖 同義詞 過程 函數 資料庫鏈接等)
刪除表和它所有的約束條件
DROP TABLE 表名 CASCADE CONSTRAINTS;
TRUNCATE (清空表裡的所有記錄 保留表的結構)
TRUNCATE 表名;
三 查詢語句 (SELECT) 部分
SELECT欄位名 欄位名 …… FROM 表名 [表名 ……] WHERE 條件;
欄位名可以帶入函數
例如: COUNT(*) MIN(欄位名) MAX(欄位名) AVG(欄位名) DISTINCT(欄位名)
TO_CHAR(DATE欄位名 YYYY MM DD HH :MI:SS )
NVL(EXPR EXPR )函數
解釋:
IF EXPR =NULL
RETURN EXPR
ELSE
RETURN EXPR
DECODE(AA﹐V ﹐R ﹐V ﹐R )函數
解釋:
IF AA=V THEN RETURN R
IF AA=V THEN RETURN R
…
ELSE
RETURN NULL
LPAD(char n char )函數
解釋:
字元char 按制定的位數n顯示 不足的位數用char 字元串替換左邊的空位
欄位名之間可以進行算術運算
例如: (欄位名 *欄位名 )/
查詢語句可以嵌套
例如: SELECT …… FROM
(SELECT …… FROM表名 [表名 ……] WHERE 條件) WHERE 條件 ;
兩個查詢語句的結果可以做集合操作
例如: 並集UNION(去掉重復記錄) 並集UNION ALL(不去掉重復記錄) 差集MINUS 交集INTERSECT
分組查詢
SELECT欄位名 欄位名 …… FROM 表名 [表名 ……] GROUP BY欄位名
[HAVING 條件] ;
兩個以上表之間的連接查詢
SELECT欄位名 欄位名 …… FROM 表名 [表名 ……] WHERE
表名 欄位名 = 表名 欄位名 [ AND ……] ;
SELECT欄位名 欄位名 …… FROM 表名 [表名 ……] WHERE
表名 欄位名 = 表名 欄位名(+) [ AND ……] ;
有(+)號的欄位位置自動補空值
查詢結果集的排序操作 默認的排序是升序ASC 降序是DESC
SELECT欄位名 欄位名 …… FROM 表名 [表名 ……]
ORDER BY欄位名 欄位名 DESC;
字元串模糊比較的方法
INSTR(欄位名 『字元串 )>
欄位名 LIKE 『字元串% [『%字元串% ]
每個表都有一個隱含的欄位ROWID 它標記著記錄的唯一性
四 ORACLE里常用的數據對象 (SCHEMA)
索引 (INDEX)
CREATE INDEX 索引名ON 表名 ( 欄位 [欄位 ……] );
ALTER INDEX 索引名 REBUILD;
一個表的索引最好不要超過三個 (特殊的大表除外) 最好用單欄位索引 結合SQL語句的分析執行情況
也可以建立多欄位的組合索引和基於函數的索引
ORACLE 字元串可以索引的最大長度為 單位元組
ORACLE 字元串可以索引的最大長度為 單位元組
ORACLE DOC上說字元串最大可以建索引的長度約是:數據塊的大小(db_block_size)* %
視圖 (VIEW)
CREATE VIEW 視圖名AS SELECT … FROM … ;
ALTER VIEW視圖名 PILE;
視圖僅是一個SQL查詢語句 它可以把表之間復雜的關系簡潔化
同義詞 (SYNONMY)
CREATE SYNONYM同義詞名FOR 表名;
CREATE SYNONYM同義詞名FOR 表名@資料庫鏈接名;
資料庫鏈接 (DATABASE LINK)
CREATE DATABASE LINK資料庫鏈接名CONNECT TO 用戶名 IDENTIFIED BY 密碼 USING 『資料庫連接字元串 ;
資料庫連接字元串可以用NET EASY CONFIG或者直接修改TNSNAMES ORA里定義
資料庫參數global_name=true時要求資料庫鏈接名稱跟遠端資料庫名稱一樣
資料庫全局名稱可以用以下命令查出
SELECT * FROM GLOBAL_NAME;
查詢遠端資料庫里的表
SELECT …… FROM 表名@資料庫鏈接名;
五 許可權管理 (DCL) 語句
GRANT 賦於許可權
常用的系統許可權集合有以下三個:
CONNECT(基本的連接) RESOURCE(程序開發) DBA(資料庫管理)
常用的數據對象許可權有以下五個:
ALL ON 數據對象名 SELECT ON 數據對象名 UPDATE ON 數據對象名
DELETE ON 數據對象名 INSERT ON 數據對象名 ALTER ON 數據對象名
GRANT CONNECT RESOURCE TO 用戶名;
GRANT SELECT ON 表名 TO 用戶名;
GRANT SELECT INSERT DELETE ON表名 TO 用戶名 用戶名 ;
REVOKE 回收許可權
REVOKE CONNECT RESOURCE FROM 用戶名;
REVOKE SELECT ON 表名 FROM 用戶名;
lishixin/Article/program/MySQL/201311/29570