資料庫或語句
資料庫常用sql語句有哪些
SQL語句有哪些?SQL語句無論是種類還是數量都是繁多的,很多語句也是經常要用到的,下文我為大家分享的就是SQL的常用語句,僅供參考!
50個常用的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”表中“葉平”老師教的課的成績都更改為此課程的平均成績;
update 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(char(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 S# having count(*)>2)group by S#;
49、檢索“004”課程分數小於60,按分數降序排列的同學學號
select S# from SC where C#='004'and score <60 order by score desc;
50、刪除“002”同學的“001”課程的成績
delete from Sc where S#='001'and C#='001';
;② 在sql語句中定義資料庫的語句是
在sql語句中定義資料庫的語句是襲弊資料庫、表、視圖、索引、存儲過程,例如CREATE、DROP、ALTER等等。SQL語言(晌禪渣即結構化查詢語言)主要用於存取數據、查詢數據、更新數據和管理關系資料庫系統,SQL語言由IBM開發。DDL語句,資料庫定義語句:資料庫、表、視圖、索引、存儲宴悄過程,例如CREATE、DROP、ALTER等等。
③ SQL server鏁版嵁搴撴煡璇㈣鍙ヤ嬌鐢ㄦ柟娉曡︾粏璁茶В
涓銆 綆鍗曟煡璇
綆鍗曠殑Transact-SQL鏌ヨ㈠彧鍖呮嫭閫夋嫨鍒楄〃銆丗ROM瀛愬彞鍜學HERE瀛愬彞銆傚畠浠鍒嗗埆璇存槑鎵鏌ヨ㈠垪銆佹煡璇㈢殑琛ㄦ垨瑙嗗浘銆佷互鍙婃悳緔㈡潯浠剁瓑銆
渚嬪傦紝涓嬮潰鐨勮鍙ユ煡璇testtable琛ㄤ腑濮撳悕涓衡滃紶涓夆濈殑nickname瀛楁靛拰email瀛楁點
SELECT nickname,email
FROM testtable
WHERE name='寮犱笁'
(涓) 閫夋嫨鍒楄〃
閫夋嫨鍒楄〃(select_list)鎸囧嚭鎵鏌ヨ㈠垪錛屽畠鍙浠ユ槸涓緇勫垪鍚嶅垪琛ㄣ佹槦鍙楓佽〃杈懼紡銆佸彉閲(鍖呮嫭灞閮ㄥ彉閲忓拰鍏ㄥ矓鍙橀噺)絳夋瀯鎴愩
1銆侀夋嫨鎵鏈夊垪
渚嬪傦紝涓嬮潰璇鍙ユ樉紺簍esttable琛ㄤ腑鎵鏈夊垪鐨勬暟鎹:
SELECT *
FROM testtable
2銆侀夋嫨閮ㄥ垎鍒楀苟鎸囧畾瀹冧滑鐨勬樉紺烘″簭
鏌ヨ㈢粨鏋滈泦鍚堜腑鏁版嵁鐨勬帓鍒楅『搴忎笌閫夋嫨鍒楄〃涓鎵鎸囧畾鐨勫垪鍚嶆帓鍒楅『搴忕浉鍚屻
渚嬪:
SELECT nickname,email
FROM testtable
3銆佹洿鏀瑰垪鏍囬
鍦ㄩ夋嫨鍒楄〃涓錛屽彲閲嶆柊鎸囧畾鍒楁爣棰樸傚畾涔夋牸寮忎負:
鍒楁爣棰=鍒楀悕
鍒楀悕 鍒楁爣棰
濡傛灉鎸囧畾鐨勫垪鏍囬樹笉鏄鏍囧噯鐨勬爣璇嗙︽牸寮忔椂錛屽簲浣跨敤寮曞彿瀹氱晫絎︼紝渚嬪傦紝涓嬪垪璇鍙ヤ嬌鐢ㄦ眽瀛楁樉紺哄垪鏍囬:
SELECT 鏄電О=nickname,鐢靛瓙閭浠=email
FROM testtable
4銆佸垹闄ら噸澶嶈
SELECT璇鍙ヤ腑浣跨敤ALL鎴朌ISTINCT閫夐」鏉ユ樉紺鴻〃涓絎﹀悎鏉′歡鐨勬墍鏈夎屾垨鍒犻櫎鍏朵腑閲嶅嶇殑鏁版嵁琛岋紝榛樿や負ALL銆備嬌鐢―ISTINCT閫夐」 鏃訛紝瀵逛簬鎵鏈夐噸澶嶇殑鏁版嵁琛屽湪SELECT榪斿洖鐨勭粨鏋滈泦鍚堜腑鍙淇濈暀涓琛屻
5銆侀檺鍒惰繑鍥炵殑琛屾暟
浣跨敤TOP n [PERCENT]閫夐」闄愬埗榪斿洖鐨勬暟鎹琛屾暟錛孴OP n璇存槑榪斿洖n琛岋紝鑰孴OP n PERCENT鏃訛紝璇存槑n鏄琛ㄧず涓鐧懼垎鏁幫紝鎸囧畾榪斿洖鐨勮屾暟絳変簬鎬昏屾暟鐨勭櫨鍒嗕箣鍑犮
渚嬪:
SELECT TOP 2 *FROM testtable SELECT TOP 20 PERCENT * FROM testtable
(浜)FROM 瀛愬彞
FROM瀛愬彞鎸囧畾SELECT璇鍙ユ煡璇㈠強涓庢煡璇㈢浉鍏崇殑琛ㄦ垨瑙嗗浘銆傚湪FROM瀛愬彞涓鏈澶氬彲鎸囧畾256涓琛ㄦ垨瑙嗗浘錛屽畠浠涔嬮棿鐢ㄩ楀彿鍒嗛殧銆
鍦‵ROM瀛愬彞鍚屾椂鎸囧畾澶氫釜琛ㄦ垨瑙嗗浘鏃訛紝濡傛灉閫夋嫨鍒楄〃涓瀛樺湪鍚屽悕鍒楋紝榪欐椂搴斾嬌鐢ㄥ硅薄鍚嶉檺瀹氳繖浜涘垪鎵灞炵殑琛ㄦ垨瑙嗗浘銆備緥濡傚湪usertable鍜 citytable琛ㄤ腑鍚屾椂瀛樺湪cityid鍒楋紝鍦ㄦ煡璇涓や釜琛ㄤ腑鐨刢ityid鏃跺簲浣跨敤涓嬮潰璇鍙ユ牸寮忓姞浠ラ檺瀹:
SELECT username,citytable.cityid
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid
鍦‵ROM瀛愬彞涓鍙鐢ㄤ互涓嬩袱縐嶆牸寮忎負琛ㄦ垨瑙嗗浘鎸囧畾鍒鍚:
琛ㄥ悕 as 鍒鍚
琛ㄥ悕 鍒鍚
渚嬪備笂闈㈣鍙ュ彲鐢ㄨ〃鐨勫埆鍚嶆牸寮忚〃紺轟負:
SELECT username,b.cityid
FROM usertable a,citytable b
WHERE a.cityid=b.cityid
SELECT涓嶄粎鑳戒粠琛ㄦ垨瑙嗗浘涓媯緔㈡暟鎹錛屽畠榪樿兘澶熶粠鍏跺畠鏌ヨ㈣鍙ユ墍榪斿洖鐨勭粨鏋滈泦鍚堜腑鏌ヨ㈡暟鎹銆
渚嬪:
SELECT a.au_fname+a.au_lname
FROM authors a,titleauthor ta
(SELECT title_id,title
FROM titles
WHERE ytd_sales10000
) AS t
WHERE a.au_id=ta.au_id
AND ta.title_id=t.title_id
姝や緥涓錛屽皢SELECT榪斿洖鐨勭粨鏋滈泦鍚堢粰浜堜竴鍒鍚峵錛岀劧鍚庡啀浠庝腑媯緔㈡暟鎹銆
(涓) 浣跨敤WHERE瀛愬彞璁劇疆鏌ヨ㈡潯浠
WHERE瀛愬彞璁劇疆鏌ヨ㈡潯浠訛紝榪囨護鎺変笉闇瑕佺殑鏁版嵁琛屻備緥濡備笅闈㈣鍙ユ煡璇㈠勾榫勫ぇ浜20鐨勬暟鎹:
SELECT *
FROM usertable
WHERE age20
WHERE瀛愬彞鍙鍖呮嫭鍚勭嶆潯浠惰繍綆楃:
姣旇緝榪愮畻絎(澶у皬姣旇緝):銆=銆=銆併=銆併!銆!
鑼冨洿榪愮畻絎(琛ㄨ揪寮忓兼槸鍚﹀湪鎸囧畾鐨勮寖鍥):BETWEEN鈥AND鈥
NOT BETWEEN鈥AND鈥
鍒楄〃榪愮畻絎(鍒ゆ柇琛ㄨ揪寮忔槸鍚︿負鍒楄〃涓鐨勬寚瀹氶」):IN (欏1,欏2鈥︹)
NOT IN (欏1,欏2鈥︹)
妯″紡鍖歸厤絎(鍒ゆ柇鍊兼槸鍚︿笌鎸囧畾鐨勫瓧絎﹂氶厤鏍煎紡鐩哥):LIKE銆丯OT LIKE
絀哄煎垽鏂絎(鍒ゆ柇琛ㄨ揪寮忔槸鍚︿負絀):IS NULL銆丯OT IS NULL
閫昏緫榪愮畻絎(鐢ㄤ簬澶氭潯浠剁殑閫昏緫榪炴帴):NOT銆丄ND銆丱R
1銆佽寖鍥磋繍綆楃︿緥:age BETWEEN 10 AND 30鐩稿綋浜巃ge=10 AND age=30
2銆佸垪琛ㄨ繍綆楃︿緥:country IN ('Germany','China')
3銆佹ā寮忓尮閰嶇︿緥:甯哥敤浜庢ā緋婃煡鎵撅紝瀹冨垽鏂鍒楀兼槸鍚︿笌鎸囧畾鐨勫瓧絎︿覆鏍煎紡鐩稿尮閰嶃傚彲鐢ㄤ簬char銆乿archar銆乼ext銆乶text銆 datetime鍜宻malldatetime絳夌被鍨嬫煡璇銆
涓婁竴欏12 涓嬩竴欏
④ sql涓鐨勬暟鎹搴撹鍙ユ湁鍝浜涳紵
1銆丼ELECT錛氭煡璇㈠嚭鏁版嵁錛屼篃鍙鐢ㄤ簬鍙橀噺璧嬪
2銆丆REATE錛氬壋寤
3銆丏ROP錛氬垹闄
4銆丄LTER錛氫慨鏀
5銆両NSERT錛氭彃鍏
6銆乁PDATE錛氭洿鏂
7銆丏ELETE錛氬垹闄
8銆丟rant錛氭巿鏉
9銆乺evoke錛氬洖鏀舵潈闄
鎵╁睍璧勬枡
璇娉
SQL璇璦鍒嗘垚浜嗗嚑縐嶈佺礌錛屽寘鎷錛
1銆佸瓙鍙ワ紝鏄璇鍙ュ拰鏌ヨ㈢殑緇勬垚鎴愬垎銆傦紙鍦ㄦ煇浜涙儏鍐典笅錛岃繖浜涢兘鏄鍙閫夌殑銆傦級[14]
2銆佽〃杈懼紡錛屽彲浠ヤ駭鐢熶換浣曟爣閲忓礆紝鎴栫敱鍒楀拰琛岀殑鏁版嵁搴撹〃
3銆佽皳璇嶏紝緇欓渶瑕佽瘎浼扮殑SQL涓夊奸昏緫錛3VL錛夛紙true/false/unknown錛夋垨甯冨皵鐪熷兼寚瀹氭潯浠訛紝騫墮檺鍒惰鍙ュ拰鏌ヨ㈢殑鏁堟灉錛屾垨鏀瑰彉紼嬪簭嫻佺▼銆
4銆佹煡璇錛屽熀浜庣壒瀹氭潯浠舵緔㈡暟鎹銆傝繖鏄瘲QL鐨勪竴涓閲嶈佺粍鎴愰儴鍒嗐
5銆佽鍙ワ紝鍙浠ユ寔涔呭湴褰卞搷綰茶佸拰鏁版嵁錛屼篃鍙浠ユ帶鍒舵暟鎹搴撲簨鍔°佺▼搴忔祦紼嬨佽繛鎺ャ佷細璇濇垨璇婃柇銆
6銆丼QL璇鍙ヤ篃鍖呮嫭鍒嗗彿錛";"錛夎鍙ョ粓緇撶︺傚敖綆″苟涓嶆槸姣忎釜騫沖彴閮藉繀闇錛屼絾瀹冩槸浣滀負SQL璇娉曠殑鏍囧噯閮ㄥ垎瀹氫箟鐨勩
7銆佹棤鎰忎箟鐨勭┖鐧藉湪SQL璇鍙ュ拰鏌ヨ涓涓鑸浼氳蹇界暐錛屾洿瀹規槗鏍煎紡鍖朣QL浠g爜渚誇簬闃呰匯
鏍囧噯鍖
鍚勭嶆暟鎹搴撶殑SQL鏂硅█閫氬父涓嶅彲縐繪嶏紝鐗瑰埆鏄鍦ㄦ棩鏈熸椂闂磋娉曘佸瓧絎︿覆榪炴帴銆丯ULL銆佹瘮杈冪殑澶у皬鍐欐晱鎰熸柟闈銆傚彧鏈塒ostgreSQL涓嶮imer SQL鍔鍔涢伒浠庢爣鍑嗐侽racle鏁版嵁搴撶殑DATE琛屼負濡傚悓DATETIME錛岀己灝慣IMEtype)銆
SQL鍦1986騫磋獳NSI鏍囧噯鍖栵紝1987騫磋獻SO鏍囧噯鍖栥傜敱ISO/IEC JTC 1, Information technology, Subcommittee SC 32, Data management and interchange緇存姢銆傛爣鍑嗗悕縐伴氬父涓哄備笅妯″紡錛ISO/IEC 9075-n:yyyy Part n: title銆
⑤ 資料庫建表語句
CREATE TABLE語句,用於在資料庫中創建新表。語法:CREATE TABLE table (field1 type [(size)] [NOT NULL] [index1] [, field2 type [(size)] [NOT NULL] [index2] [, ...]] [, CONSTRAINT multifieldindex [, ...]])。
table參數用於指定新建表的名稱。field1,field2用於指定在新表中創建的新欄位的名稱,每創建一個新表必須至少創建一個欄位。type參數用來指定新建欄位的數據類型。size參數用於指定文本及二進制欄位的長度。
NOT NULL是SQL的關鍵字,使用該參數則新記錄的該欄位值必須是有效的數據。在一個欄位上只能使用一次NOT NULL參數,否則會出錯。index1, index2參數是定義單一欄位索引的CONSTRAINT子句。multifieldindex參數是定義多重欄位索引的CONSTRAINT子句。
(5)資料庫或語句擴展閱讀:
方法數據類型(data_type)規定了列可容納何種數據類型。SQL中最常用的數據類型有:
1、integer(size) int(size) smallint(size) tinyint(size):僅容納整數。
2、decimal(size,d) numeric(size,d):容納帶有小數的數字。
3、char(size):容納固定長度的字元串
4、varchar(size):容納可變長度的字元串
5、date(yyyymmdd):容納日期。
CREATE TABLE語句可創建空表,同時可使用 INSERT INTO 語句向空表寫入數據。
⑥ 資料庫中增刪改查的基本語句是什麼
資料庫中增刪改查基本語句:INSERT INTO,表名欄位列表。
資料庫是存放數據的倉庫。它的存儲空間很大,可以存放百萬條、千萬條、上億條數據。但是資料庫並不是隨意地將數據進行存放,是有一定的規則的,否則查詢的效率會很低。
當今世界是一個充滿著數據的互聯網世界,充斥著大量的數據。即這個互聯網世界就是數據世界。數據的來源有很多,比如出行記錄、消費記錄、瀏覽的網頁、發送的消息等等。除了文本類型的數據,圖像、音樂、聲音都是數據。
在資料庫的發展歷史上,資料庫先後經歷了層次資料庫、網狀資料庫和關系資料庫等各個階段的發展,資料庫技術在各個方面的快速的發展。特別是關系型資料庫已經成為目前資料庫產品中最重要的一員。
80年代以來,幾乎所有的資料庫廠商新出的資料庫產品都支持關系型資料庫,即使一些非關系資料庫產品也幾乎都有支持關系資料庫的介面。
這主要是傳統的關系型資料庫可以比較好的解決管理和存儲關系型數據的問題。隨著雲計算的發展和大數據時代的到來,關系型資料庫越來越無法滿足需要,這主要是由於越來越多的半關系型和非關系型數據需要用資料庫進行存儲管理。
⑦ 通用SQL資料庫查詢語句精華使用簡介
一 簡單查詢簡單的Transact SQL查詢只包括選擇列表 FROM子句和WHERE子句 它們分別說明所查詢列 查詢的表或視圖 以及搜索條件等
例如 下面的語句查詢testtable表中姓名為 張三 的nickname欄位和email欄位
SELECT nickname emailFROM testtableWHERE name= 張三
(一) 選擇列表
選擇列表(select_list)指出所查詢列 它可以是一組列名列表 星號 表達式 變數(包括局部變數和全局變數)等構成
選擇所有列
例如 下面語句顯示testtable表中所有列的數據
SELECT *FROM testtable
選擇部分列並指定它們的顯示次序
查詢結果集合中數據的排列順序與選擇列表中所指定的列名排列順序相同
例如
SELECT nickname emailFROM testtable
賣改 更改列標題
在選擇列表中 可重新指定列標題 定義格式為
列標題=列名列名 列標題
如果指定的列標題不是標準的標識符格式時 應使用引號定界符 例如 下列語句使用漢字顯示列標題
SELECT 昵稱=nickname 電子郵件=emailFROM testtable
刪除重復行
SELECT語句中使用ALL或DISTINCT選項來顯示表中符合條件的所有行或刪除其中重復的數據行 默認為ALL 使用DISTINCT選項時 對於所有重復的數據行在SELECT返回的結果集合中只保留一行
限制返回的行數
使用TOP n [PERCENT]選項限制返回的數據行數 TOP n說明返回n行 而TOP n PERCENT時 說明n是表示一百分數 指定返回的行數等於總行數的百分之幾
例如
SELECT TOP *FROM testtable SELECT TOP PERCENT * FROM testtable
(二) FROM子句
悄穗FROM子句指定SELECT語句查詢及與查詢相關的表或視圖 在FROM子句中最多可指定 個表或視圖 它們之間用逗號分隔
在FROM子句同時指定多個表或視圖時 如果選擇列表中存在同名列 這時應使用中運判對象名限定這些列所屬的表或視圖 例如在usertable和citytable表中同時存在cityid列 在查詢兩個表中的cityid時應使用下面語句格式加以限定
SELECT username citytable cityidFROM usertable citytableWHERE usertable cityid=citytable cityid
在FROM子句中可用以下兩種格式為表或視圖指定別名
表名 as 別名表名 別名
例如上面語句可用表的別名格式表示為
SELECT username b cityidFROM usertable a citytable bWHERE a cityid=b cityid
SELECT不僅能從表或視圖中檢索數據 它還能夠從其它查詢語句所返回的結果集合中查詢數據
例如
SELECT a au_fname+a au_lnameFROM authors a titleauthor ta(SELECT title_id titleFROM titlesWHERE ytd_sales> ) AS tWHERE a au_id=ta au_idAND ta title_id=t title_id
此例中 將SELECT返回的結果集合給予一別名t 然後再從中檢索數據
(三) 使用WHERE子句設置查詢條件
WHERE子句設置查詢條件 過濾掉不需要的數據行 例如下面語句查詢年齡大於 的數據
SELECT *FROM usertableWHERE age>
WHERE子句可包括各種條件運算符
比較運算符(大小比較) > >= = < <= <> !> !<范圍運算符(表達式值是否在指定的范圍) BEEEN…AND…NOT BEEEN…AND…列表運算符(判斷表達式是否為列表中的指定項) IN (項 項 ……)NOT IN (項 項 ……)模式匹配符(判斷值是否與指定的字元通配格式相符):LIKE NOT LIKE空值判斷符(判斷表達式是否為空) IS NULL NOT IS NULL邏輯運算符(用於多條件的邏輯連接) NOT AND OR
范圍運算符例 age BEEEN AND 相當於age>= AND age<=
列表運算符例 country IN ( Germany China )
模式匹配符例 常用於模糊查找 它判斷列值是否與指定的字元串格式相匹配 可用於char varchar text ntext datetime和 *** alldatetime等類型查詢
可使用以下通配字元
百分號% 可匹配任意類型和長度的字元 如果是中文 請使用兩個百分號即%%
下劃線_ 匹配單個任意字元 它常用來限製表達式的字元長度
方括弧[] 指定一個字元 字元串或范圍 要求所匹配對象為它們中的任一個 [^] 其取值也[] 相同 但它要求所匹配對象為指定字元以外的任一個字元
例如
限制以Publishing結尾 使用LIKE %Publishing
限制以A開頭 LIKE [A]%
限制以A開頭外 LIKE [^A]%
空值判斷符例WHERE age IS NULL
邏輯運算符 優先順序為NOT AND OR
(四)查詢結果排序
使用ORDER BY子句對查詢返回的結果按一列或多列排序 ORDER BY子句的語法格式為
ORDER BY {column_name [ASC|DESC]} [ …n]
其中ASC表示升序 為默認值 DESC為降序 ORDER BY不能按ntext text和image數據類型進行排序例如
SELECT *FROM usertableORDER BY age desc userid ASC
另外 可以根據表達式進行排序
二 聯合查詢
UNION運算符可以將兩個或兩個以上上SELECT語句的查詢結果集合合並成一個結果集合顯示 即執行聯合查詢 UNION的語法格式為
select_statementUNION [ALL] selectstatement[UNION [ALL] selectstatement][…n]
其中selectstatement為待聯合的SELECT查詢語句
ALL選項表示將所有行合並到結果集合中 不指定該項時 被聯合查詢結果集合中的重復行將只保留一行
聯合查詢時 查詢結果的列標題為第一個查詢語句的列標題 因此 要定義列標題必須在第一個查詢語句中定義 要對聯合查詢結果排序時 也必須使用第一查詢語句中的列名 列標題或者列序號
在使用UNION 運算符時 應保證每個聯合查詢語句的選擇列表中有相同數量的表達式 並且每個查詢選擇表達式應具有相同的數據類型 或是可以自動將它們轉換為相同的數據類型 在自動轉換時 對於數值類型 系統將低精度的數據類型轉換為高精度的數據類型
在包括多個查詢的UNION語句中 其執行順序是自左至右 使用括弧可以改變這一執行順序 例如
查詢 UNION (查詢 UNION 查詢 )
三 連接查詢
通過連接運算符可以實現多個表查詢 連接是關系資料庫模型的主要特點 也是它區別於其它類型資料庫管理系統的一個標志
在關系資料庫管理系統中 表建立時各數據之間的關系不必確定 常把一個實體的所有信息存放在一個表中 當檢索數據時 通過連接操作查詢出存放在多個表中的不同實體的信息 連接操作給用戶帶來很大的靈活性 他們可以在任何時候增加新的數據類型 為不同實體創建新的表 爾後通過連接進行查詢
連接可以在SELECT 語句的FROM子句或WHERE子句中建立 似是而非在FROM子句中指出連接時有助於將連接操作與WHERE子句中的搜索條件區分開來 所以 在Transact SQL中推薦使用這種方法
SQL 標准所定義的FROM子句的連接語法格式為
FROM join_table join_type join_table[ON (join_condition)]
其中join_table指出參與連接操作的表名 連接可以對同一個表操作 也可以對多表操作 對同一個表操作的連接又稱做自連接
join_type 指出連接類型 可分為三種 內連接 外連接和交叉連接 內連接(INNER JOIN)使用比較運算符進行表間某(些)列數據的比較操作 並列出這些表中與連接條件相匹配的數據行 根據所使用的比較方式不同 內連接又分為等值連接 自然連接和不等連接三種 外連接分為左外連接(LEFT OUTER JOIN或LEFT JOIN) 右外連接(RIGHT OUTER JOIN或RIGHT JOIN)和全外連接(FULL OUTER JOIN或FULL JOIN)三種 與內連接不同的是 外連接不只列出與連接條件相匹配的行 而是列出左表(左外連接時) 右表(右外連接時)或兩個表(全外連接時)中所有符合搜索條件的數據行
交叉連接(CROSS JOIN)沒有WHERE 子句 它返回連接表中所有數據行的笛卡爾積 其結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數
連接操作中的ON (join_condition) 子句指出連接條件 它由被連接表中的列和比較運算符 邏輯運算符等構成
無論哪種連接都不能對text ntext和image數據類型列進行直接連接 但可以對這三種列進行間接連接 例如
SELECT p pub_id p pub_id p pr_infoFROM pub_info AS p INNER JOIN pub_info AS p ON DATALENGTH(p pr_info)=DATALENGTH(p pr_info)
(一)內連接
內連接查詢操作列出與連接條件匹配的數據行 它使用比較運算符比較被連接列的列值 內連接分三種
等值連接 在連接條件中使用等於號(=)運算符比較被連接列的列值 其查詢結果中列出被連接表中的所有列 包括其中的重復列
不等連接 在連接條件使用除等於運算符以外的其它比較運算符比較被連接的列的列值 這些運算符包括> >= <= < !> !<和<>
自然連接 在連接條件中使用等於(=)運算符比較被連接列的列值 但它使用選擇列表指出查詢結果集合中所包括的列 並刪除連接表中的重復列
例 下面使用等值連接列出authors和publishers表中位於同一城市的作者和出版社
SELECT *FROM authors AS a INNER JOIN publishers AS pON a city=p city
又如使用自然連接 在選擇列表中刪除authors 和publishers 表中重復列(city和state)
SELECT a * p pub_id p pub_name p countryFROM authors AS a INNER JOIN publishers AS pON a city=p city
(二)外連接
內連接時 返回查詢結果集合中的僅是符合查詢條件( WHERE 搜索條件或 HAVING 條件)和連接條件的行 而採用外連接時 它返回到查詢結果集合中的不僅包含符合連接條件的行 而且還包括左表(左外連接時) 右表(右外連接時)或兩個邊接表(全外連接)中的所有數據行 如下面使用左外連接將論壇內容和作者信息連接起來
SELECT a * b * FROM luntan LEFT JOIN usertable as bON a username=b username
下面使用全外連接將city表中的所有作者以及user表中的所有作者 以及他們所在的城市
SELECT a * b *FROM city as a FULL OUTER JOIN user as bON a username=b username
(三)交叉連接
交叉連接不帶WHERE 子句 它返回被連接的兩個表所有數據行的笛卡爾積 返回到結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數 例 titles表中有 類圖書 而publishers表中有 家出版社 則下列交叉連接檢索到的記錄數將等
於 * = 行
lishixin/Article/program/SQL/201311/16231