数据库或语句
数据库常用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