经典SQL查询语句50条

经典SQL查询语句50条
经典SQL查询语句50条

create table student (

sid varchar(50) primary key ,

sname varchar(20) ,

sage int ,

ssex varchar(5)

)

create table teacher (

tid varchar(50) primary key ,

tname varchar(20)

)

create table course(

cid varchar(50) primary key ,

cname varchar(30),

tid varchar(50) ,

)

alter table course add constraint fk_1 foreign key (tid) references teacher(tid); create table sc(

sid varchar(50) not null,

cid varchar(50) not null,

score int not null

)

alter table sc add constraint fk_2 foreign key (sid) references student(sid); alter table sc add constraint fk_3 foreign key (cid) references course(cid);

insert into teacher (tid,tname) values ('001','teacher1')

insert into teacher (tid,tname) values ('002','teacher2')

insert into teacher (tid,tname) values ('003','teacher3')

insert into teacher (tid,tname) values ('004','teacher4')

insert into teacher (tid,tname) values ('005','teacher5')

insert into student values ('001','student1',20,'man')

insert into student values ('002','student2',16,'woman')

insert into student values ('003','student3',30,'man')

insert into student values ('004','student4',9,'woman')

insert into student values ('005','student5',25,'man')

insert into course values ('001','course1','001')

insert into course values ('002','course2','002')

insert into course values ('003','course3','003')

insert into course values ('004','course4','004')

insert into course values ('005','course5','005')

insert into sc values ('001','001','80')

insert into sc values ('001','002','60')

insert into sc values ('001','003','40')

insert into sc values ('001','004','100')

insert into sc values ('001','005','90')

insert into sc values ('002','001','40')

insert into sc values ('002','002','60')

insert into sc values ('002','003','70')

insert into sc values ('002','004','100')

insert into sc values ('002','005','90')

insert into sc values ('003','001','90')

insert into sc values ('003','002','60')

insert into sc values ('003','003','70')

insert into sc values ('003','004','60')

insert into sc values ('003','005','40')

--1、查询“001”课程比“002”课程成绩高的所有学生的学号;

select a.sid from

(select sid ,score from sc where cid='001') a,

(select sid,score from sc where cid='002') b

where a.score>b.score and a.sid=b.sid

--2、查询平均成绩大于60分的同学的学号和平均成绩;

select sid ,avg(score) from sc group by sid having avg(score)>60

--3、查询所有同学的学号、姓名、选课数、总成绩

1)select a.sid ,a.sname ,(select count(*) from sc as b where a.sid=b.sid) '选课数',(select sum(score) from sc as b where a.sid=b.sid) '总成绩' from student as a

2)select a.sid ,a.sname , count(b.cid) '选课数',sum(b.score) '总成绩' from student a left outer join sc b on a.sid=b.sid group by a.sid,a.sname

--4、查询姓“李”的老师的个数

select count(*) from teacher where tname like '李%'

--5、查询没学过“teacher1”老师课的同学的学号、姓名

select sid ,sname from student where sid not in

(select sid from teacher t,course c,sc s where s.cid=c.cid and t.tid=c.tid and t.tname='teacher1')

--6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;

--解法1.

select sid ,sname from student where sid in

(select sid from sc where cid='001') and sid in (select sid from sc where cid='002')

--解法2.

select s.sid ,s.sname from student s,sc where s.sid=sc.sid and cid='001' and exists(

select * from sc sc1 where sc1.sid=sc.sid and sc1.cid='002')

--7、查询学过“teacher1”老师所教的所有课的同学的学号、姓名;

select sid,sname from student where sid in(select sc.sid from sc,course c,teacher t where t.tname='teacher1' and t.tid=c.tid

and c.cid = sc.cid group by sid having count(sid)=(select count(cid) from course c,teacher t

where t.tname='teacher1' and t.tid=c.tid ))

--8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;

select sid,sname from(select s.sid ,sname ,score score1,

(select score from sc where sc.sid=s.sid and sc.cid='002')score2

from student s,sc where s.sid=sc.sid and sc.cid='001') a where a.score1>a.score2

--9、查询所有课程成绩小于60分的同学的学号、姓名;

select sid ,sname from student where sid not in(select distinct(sid) from sc where score>60)

--10、查询没有学全所有课的同学的学号、姓名(包括一门课程都没学的同学);

select s.sid ,sname from student s left outer join sc on sc.sid=s.sid group by s.sid ,sname

having count(cid)<(select count(cid) from course)

--11、查询至少有一门课与学号为“001”的同学所学相同的同学的学号和姓名

select distinct(s.sid),sname from student s,sc where s.sid=sc.sid and sc.cid in(select cid from sc where sc.sid='001' )

--12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;

--个人认为同11题

--13、把“SC”表中“teacher1”老师教的课的成绩都更改为此课程的平均成绩;

update sc set score=(select avg(score) from sc s1 where sc.cid=s1.cid)

from course c,teacher t ,sc where sc.cid=c.cid and c.tid=t.tid and t.tname='teacher1'

--14、查询和“002”号的同学学习的课程完全相同的其他同学学号和姓名;

select s.sid,sname from sc ,student s where sc.sid=s.sid and sc.cid in

(select cid from sc where sid='002') group by s.sid,sname having count(*)=

(select count(cid) from sc where sid='002')

--15、删除学习“teacher7”老师课的SC表记录;

delete sc from teacher t,course c where t.tid=c.cid and t.tname='teacher7' and sc.cid=c.cid

--16、向SC表中插入一些记录,这些记录要求符合以下条件:1、没有上过编号“003”课--程的同学学号 2、成绩为'002'号课的平均成绩;

Insert SC select Sid,'002',(Select avg(score)

from SC where Cid='002') from Student where Sid not in (Select Sid from SC where Cid='002');

--17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的--课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分

select sid '学生ID',(select score from sc s where s.sid=sc.sid and s.cid='001') '数据库',

(select score from sc s where s.sid=sc.sid and s.cid='002') '企业管理',

(select score from sc s where s.sid=sc.sid and s.cid='003') '英语',

count(cid) '有效课程数',avg(score) '有效平均分'

from sc group by sid order by '有效平均分'

--18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分

select cid '课程ID',max(score) '最高分',min(score) '最低分' from sc group by cid

--19、查询各科课号,课名,该科平均成绩和及格率的百分数并按及格率从高到低排序

select sc.cid,cname,avg(score) '平均分',100*sum(case when isnull(score,0)>=60 then 1 else 0 end)/count(*) '及格率'

from sc,course c where sc.cid=c.cid group by sc.cid ,cname order by '及格率' desc;

--20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)

select sum(case when cid='001' then score else 0 end)/sum(case when cid='001' then 1 else 0 end) '企业管理平均分',

100*sum(case when cid='001' and isnull(score,0)>=60 then 1 else 0 end)/sum(case when cid='001' then 1 else 0 end) '企业管理及格率',

sum(case when cid='002' then score else 0 end)/sum(case when cid='002' then 1 else 0 end) '马克思平均分',

100*sum(case when cid='002' and isnull(score,0)>=60 then 1 else 0 end)/sum(case when cid='002' then 1 else 0 end) '马克思及格率',

sum(case when cid='003' then score else 0 end)/sum(case when cid='003' then 1 else 0 end) 'OO&UML平均分',

100*sum(case when cid='003' and isnull(score,0)>=60 then 1 else 0 end)/sum(case when cid='003' then 1 else 0 end) 'OO&UML及格率',

sum(case when cid='004' then score else 0 end)/sum(case when cid='004' then 1 else 0 end) '数据库平均分

',

100*sum(case when cid='004' and isnull(score,0)>=60 then 1 else 0 end)/sum(case when cid='004' then 1 else 0 end) '数据库及格率'

from sc

--21、查询不同老师所教不同课程平均分从高到低显示(注:一门课程只能有一位老师教)

select c.cid,tid, avg(score) '平均分' from sc,course c where sc.cid=c.cid group by c.cid,tid order by '

平均分'

--22、查询如下课程成绩第 3 名到第 5 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)

-- [学生ID],[学生姓名],企业管理,马克思,UML,数据库,总分

select distinct top 3 with ties sc.sid ,s.sname,s1.score '企业管理',s2.score '马克思',s3.score

'UML',s4.score '数据库',

isnull(s1.score,0)+isnull(s2.score,0)+isnull(s3.score,0)+isnull(s4.score,0) as '总分'

from student s,sc left join sc s1 on sc.sid=s1.sid and s1.cid='001'

left join sc s2 on sc.sid=s2.sid and s2.cid='002'

left join sc s3 on sc.sid=s3.sid and s3.cid='003'

left join sc s4 on sc.sid=s4.sid and s4.cid='004'

where s.sid=sc.sid

and isnull(s1.score,0)+isnull(s2.score,0)+isnull(s3.score,0)+isnull(s4.score,0) not in (

select distinct top 3 with ties isnull(s1.score,0)+isnull(s2.score,0)+isnull(s3.score,0)+isnull(s4.scor e,0) '总分'

from sc left join sc s1 on sc.sid=s1.sid and s1.cid='001'

left join sc s2 on sc.sid=s2.sid and s2.cid='002'

left join sc s3 on sc.sid=s3.sid and s3.cid='003'

left join sc s4 on sc.sid=s4.sid and s4.cid='004'

order by '总分' desc

) order by '总分' desc

--23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]

select sc.cid '课程ID',cname '课程名称' ,sum(case when isnull(score,0)>=85 then 1 else 0 end) '[100-85]', sum(case when isnull(score,0)>=70 and isnull(score,0)<85 then 1 else 0 end) '[85-70]',

sum(case when isnull(score,0)>=60 and isnull(score,0)<70 then 1 else 0 end) '[70-60]',

sum(case when isnull(score,0)<60 then 1 else 0 end) '[<60]'

from sc,course c where sc.cid=c.cid group by sc.cid ,cname

--24、查询学生平均成绩及其名次

select 1+(select count(*) from

(select sid,avg(score) '平均成绩' from sc group by sid )t1 where t1.平均成绩>t2.平均成绩) 名次,

sid,平均成绩

from

(select sid,avg(score) '平均成绩' from sc group by sid) t2 order by '名次'

--25、查询各科成绩前三名的记录:(不考虑成绩并列情况)

select sid,cid,score from sc s where score in(select top 3 score from sc where s.cid=sc.cid order by score desc)

order by cid

--26、查询每门课程被选修的学生数

select cid,count(sid) from sc group by cid

--27、查询出只选修了一门课程的全部学生的学号和姓名

select s.sid ,sname from sc,student s where sc.sid=s.sid group by s.sid,sname having count(sc.ci d)=1

--28、查询男生、女生人数

select count(sid) '女生人数', (select count(sid) from student where ssex='man' group by ssex) '男生人数' from student where ssex='woman' group by ssex;

--29、查询姓“张”的学生名单

select * from student where sname like '张%'

--30、查询同名同性学生名单,并统计同名人数

select sname,count(*) '同名人数' from student group by sname having count(sname)>1

--31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)

select * from student where CONVERT(char(11),DATEPART(year,Sage))='1981';

--32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

select cid, avg(score) from sc group by cid order by avg(score) asc ,cid desc

--33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩

select s.sid ,sname ,avg(score) from student s,sc where s.sid=sc.sid group by s.sid,sname having

avg(score)>85

--34、查询课程名称为course1,且分数低于60的学生姓名和分数

select s.sid,sname,cname,score from course c,sc,student s

where c.cid=sc.cid and sc.sid=s.sid and isnull(score,0)<60 and cname='course1'

--35、查询所有学生的选课情况;

select s.sid,sname,cid from sc,student s where sc.sid=s.sid

--36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;

select sname,cname,score from student s,course c,sc where s.sid=sc.sid and c.cid=sc.cid and score>70

--37、查询不及格的课程,并按课程号从大到小排列

select * from sc where isnull(score,0)<60 order by cid desc

--38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;

select s.sid,sname from sc ,student s where sc.sid=s.sid and cid='003' and isnull(score,0)>80

--39、求选了课程的学生人数

select count(cid) from course

--40、查询选修“teacher1”老师所授课程的学生中,成绩最高的学生姓名及其成绩

select sname,score from student s,sc,teacher t,course c

where s.sid=sc.sid and sc.cid=c.cid and c.tid=t.tid and t.tname='teacher1'

and score=(select max(s1.score) from sc s1 where sc.cid=s1.cid)

--41、查询各个课程及相应的选修人数

select cid ,count(sid) from sc group by cid

--42、查询不同课程成绩相同的学生的学号、课程号、学生成绩

select sc1.sid ,sc1.cid,sc1.score from sc sc1,sc sc2 where sc1.score=sc2.score and sc1.cid<>sc2.cid

--43、查询每门功成绩最好的前两名

select * from sc s1 where s1.score in (select top 2 score from sc s2 where s1.cid=s2.cid )

--44、统计每门课程的学生选修人数(超过2人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

select cid,count(*) '选修人数' from sc group by cid having count(*) >2 order by '选修人数' desc ,cid

--45、检索至少选修两门课程的学生学号

select sid ,count(*) from sc group by sid having count(*)>=2

--46、查询全部学生都选修的课程的课程号和课程名

select sc.cid,cname from sc ,course c where sc.cid=c.cid group by sc.cid,cname having count(cname)= (select count(*) from student )

--47、查询没学过“teacher1”老师讲授的任一门课程的学生姓名

select sname from sc,student s where

sc.sid=s.sid and sc.sid not in( select distinct sid from sc where cid=sc.cid and cid='001')

--48、查询两门以上不及格课程的同学的学号及其平均成绩

select sid ,avg(score) from sc where

sid in (select sid from sc where isnull(score,0)<60 group by sid having count(*)>2 ) group by sid

--49、检索“004”课程分数小于60,按分数降序排列的同学学号

select sid from sc where cid='004' order by sid desc

--50、删除“002”同学的“001”课程的成绩

delete sc where sid='002' and cid='001'

一些常用的正则表达式

"^\d+$" //非负整数(正整数 + 0)

"^[0-9]*[1-9][0-9]*$" //正整数

"^((-\d+)|(0+))$" //非正整数(负整数 + 0)

"^-[0-9]*[1-9][0-9]*$" //负整数

"^-?\d+$" //整数

"^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0)

"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数

"^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮点数(负浮点数 + 0)

"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负浮点数

"^(-?\d+)(\.\d+)?$" //浮点数

"^[A-Za-z]+$" //由26个英文字母组成的字符串

"^[A-Z]+$" //由26个英文字母的大写组成的字符串

"^[a-z]+$" //由26个英文字母的小写组成的字符串

"^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串

"^\w+$" //由数字、26个英文字母或者下划线组成的字符串

"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址

"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url

"/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/" //校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-

常用SQL语句大全

常用SQL语句大全 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 DROP database dbname 3、说明:备份sql server --- 创建备份数据的device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2…from tab_old definition only 5、说明:删除新表 DROP table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键:Alter table tabname add primary key(col) 说明:删除主键:Alter table tabname DROP primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:DROP index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:DROP view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、说明:几个高级查询运算词

精典的SQL语句

精典的SQL语句ffice ffice" /> 1. 行列转换--普通 假设有张学生成绩表(CJ)如下 Name Subject Result 张三语文80 张三数学90 张三物理85 李四语文85 李四数学92 李四物理82 想变成 姓名语文数学物理 张三80 90 85 李四85 92 82 declare @sql var char(4000) set @sql = 'select Name' select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Res ult end) ['+Subject+']' from (select distinct Subject from CJ) as a select @sql = @sql+' from test group by name' exec(@sql) 2. 行列转换--合并 有表A, id pid 1 1 1 2 1 3 2 1 2 2 3 1 如何化成表B BR>id pid 1 1,2,3 2 1,2 3 1 创建一个合并的函数 create function fmerg(@id int) returns var char(8000) as begin declare @str var char(8000) set @str=''

select @str=@str+','+cast(pid as var char) from 表A where id=@id se t @str=right(@str,len(@str)-1) return(@str) End go --调用自定义函数得到结果 select distinct id,dbo.fmerg(id) from 表A 3. 如何取得一个数据表的所有列名 方法如下:先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOL UMN表中取得该数据表的所有列名。 SQL语句如下: declare @objid int,@objname char(40) set @objname = 'tablename' select @objid = id from sysobjects where id = object_id(@objname) select 'Column_name' = name from syscolumns where id = @objid order b y colid 是不是太简单了?呵呵不过经常用阿. 4. 通过SQL语句来更改用户的密码 修改别人的,需要sysadmin role EXEC sp_password NULL, 'newpassword', 'User' 如果帐号为SA执行EXEC sp_password NULL, 'newpassword', sa 5. 怎么判断出一个表的哪些字段不允许为空? select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE= 'NO' and TABLE_NAME=tablename 6. 如何在数据库里找到含有相同字段的表? a. 查已知列名的情况 SELECT https://www.360docs.net/doc/fc10392494.html, as TableName,https://www.360docs.net/doc/fc10392494.html, as columnname From syscolumns a INNER JOIN sysobjects b ON a.id=b.id AND b.type='U' AND https://www.360docs.net/doc/fc10392494.html,='你的字段名字' b. 未知列名查所有在不同表出现过的列名 Select https://www.360docs.net/doc/fc10392494.html, As tablename,https://www.360docs.net/doc/fc10392494.html, As columnname From syscolumns s1, sysobjects o Where s1.id = o.id And o.type = 'U' And Exists ( Select 1 From syscolumns s2 Where https://www.360docs.net/doc/fc10392494.html, = https://www.360docs.net/doc/fc10392494.html, And s1.id <> s2.id ) 7. 查询第xxx行数据 假设id是主键: select *

ORACLE常用SQL语句大全

ORACLE常用SQL语句大全 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:/mssql7backup/MyNwind_1.dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not nul l],..) 根据已有的表创建新表: A:select * into table_new from table_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only<仅适用于Oracle> 5、说明:删除表 drop table tablename

6、说明:增加一个列,删除一个列 A:alter table tabname add column col type B:alter table tabname drop column colname 注:DB2DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、添加主键: Alter table tabname add primary key(col) 删除主键: Alter table tabname drop primary key(col) 8、创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、创建视图:create view viewname as select statement 删除视图:drop view viewname 10、几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、几个高级查询运算词 A:UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B:EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C:INTERSECT 运算符 INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。 12、使用外连接

SQL查询语句大全集锦(超经典)

SQL查询语句大全集锦 MYSQL查询语句大全集锦 一、简单查询 简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 表或视图、以及搜索条件等。 例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 复制内容到剪贴板 代码:SELECT `nickname`,`email`FROM `testtable`WHERE `name`='张三' (一) 选择列表 选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。 1、选择所有列 例如,下面语句显示testtable表中所有列的数据: 复制内容到剪贴板 代码:SELECT * FROM testtable 2、选择部分列并指定它们的显示次序 查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 例如: 复制内容到剪贴板 代码:SELECT nickname,email FROM testtable 3、更改列标题 在选择列表中,可重新指定列标题。定义格式为: 列标题=列名 列名列标题 如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 标题:

复制内容到剪贴板 代码:SELECT 昵称=nickname,电子邮件=email FROM testtable 4、删除重复行 SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 5、限制返回的行数 使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 表示一百分数,指定返回的行数等于总行数的百分之几。 例如: 复制内容到剪贴板 代码:SELECT TOP 2 * FROM `testtable` 复制内容到剪贴板 代码:SELECT TOP 20 PERCENT * FROM `testtable` (二) FROM子句 FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, 它们之间用逗号分隔。 在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定: 复制内容到剪贴板 代码:SELECT `username`,citytable.cityid FROM `usertable`,`citytable` WHERE usertable.cityid=citytable.cityid在FROM子句中可用以下两种格式为表或视图指定别名: 复制内容到剪贴板 代码:表名 as 别名 表名别名例如上面语句可用表的别名格式表示为: 复制内容到剪贴板

SQL常用语句+举例

SQL 常用语句+举例 相关表: 1. distinct: 剔除重复记录 例:select distinct stroe_name from Store_information 结果: 2. And / or: 并且/或 例:在表中选出所有sales 高于$1000或是sales 在$275及$500之间的记录 Select store_name ,sales from Store_information Where sales>1000 Or (sales>275 and sales <500) 3. 例:在表中查找store_name 包含 Los Angeles 或San Diego 的记录 Select * from Store_information where store_name in (‘Los Angeles ’,’San Diego ’) 结果: 4. Between : 可以运用一个范围抓出表中的值

与in 的区别:in 依照一个或数个不连续的值的限制抓出表中的值 例:查找表中介于Jan-06-1999 及Jan-10-1999 中的记录 Select * from Store_information where date between ‘Jan-06-1999’ and ‘Jan-10-1999’ 结果: 5. Like : 让我们依据一个套式来找出我们要的记录 套式通常包含: ’A_Z ’: 所有以A 开头,中间包含一个字符,以Z 结尾的字串 ’ABC%’: 所有以ABC 起头的字串 ’%XYZ ’: 所有以XYZ 结尾的字串 ’%AN%’: 所有包含AN 的字串 例:Select * from Store_information where store_name like ‘%An%’ 结果: 6. Order by: 排序,通常与ASC (从小到大,升序)、DESC (从大到小,降序)结合使用 当排序字段不止一个时,先依据字段1排序,当字段1有几个值相同时,再依据字段2排序 例:表中sales 由大到小列出Store_information 的所有记录 Select Store_name, sales,date from Store_information order by sales desc 结果: 7. 函数:AVG (平均值)、COUNT (计数)、MAX (最大值)、MIN (最小值)、SUM(求和) 语句:select 函数名(字段名) from 表名 例:求出sales 的总和 Select sum(sales) from Store_information 结果 8. COUNT (计数) 例:找出Store_information 表中 有几个store_name 值不是空的记录

经典SQL语句大全

一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1. dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键:Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1

数据库基本SQL语句大全

数据库基本SQL语句大全 数据库基本----SQL语句大全 一、基础 1、说明:创建数据库 Create DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2…from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键:Alter table tabname add primary key(col) 说明:删除主键:Alter table tabname drop primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围

50个常用sql语句实例(学生表 课程表 成绩表 教师表)

Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 create table Student(S# varchar(20),Sname varchar(10),Sage int,Ssex varchar(2)) 前面加一列序号: if exists(select table_name from information_schema.tables where table_name='Temp_Table') drop table Temp_Table go select 排名=identity(int,1,1),* INTO Temp_Table from Student go select * from Temp_Table go drop database [ ] --删除空的没有名字的数据库 问题: 1、查询“”课程比“”课程成绩高的所有学生的学号; 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、查询平均成绩大于分的同学的学号和平均成绩; 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

数据库经典SQL语句大全

数据库经典SQL语句大全 篇一:经典SQL语句大全 下列语句部分是Mssql语句,不可以在access中使用。 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device USE master EXEC sp_addumpdevice 'disk','testBack', 'c:mssql7backupMyNwind_1.dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2? from tab_old definition only 5、说明: 删除新表: tabname 6、说明: 增加一个列:Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明: 添加主键:Alter table tabname add primary key(col) 说明: 删除主键:Alter table tabname drop primary key(col) 8、说明: 创建索引:create [unique] index idxname on tabname(col?.) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。

大数据库基本SQL语句大全

数据库基本_SQL语句大全 学会数据库是很实用D~~记录一些常用的sql语句...有入门有提高有见都没见过的...好全...收藏下... 其实一般用的就是查询,插入,删除等语句而已....但学学存储过程是好事...以后数据方面的东西就不用在程序里搞喽..而且程序与数据库只要一个来回通讯就可以搞定所有数据的操作.... 一、基础 1、说明:创建数据库 Create DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的device USE master EXEC sp_addumpdevice ‘disk‘, ‘testBack‘, ‘c:\mssql7backup\MyNwind_1.dat‘ --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2…from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键:Alter table tabname add primary key(col)说明:删除主键:Alter table tabname drop primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围

50个经典sql语句总结

一个项目涉及到的50个Sql语句(整理版) --1.学生表 Student(S,Sname,Sage,Ssex) --S 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表 Course(C,Cname,T) --C --课程编号,Cname 课程名称,T 教师编号 --3.教师表 Teacher(T,Tname) --T 教师编号,Tname 教师姓名 --4.成绩表 SC(S,C,score) --S 学生编号,C 课程编号,score 分数 */ --创建测试数据 create table Student(S varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10)) insert into Student values('01' , N'赵雷' , '1990-01-01' , N'男') insert into Student values('02' , N'钱电' , '1990-12-21' , N'男') insert into Student values('03' , N'孙风' , '1990-05-20' , N'男') insert into Student values('04' , N'李云' , '1990-08-06' , N'男') insert into Student values('05' , N'周梅' , '1991-12-01' , N'女') insert into Student values('06' , N'吴兰' , '1992-03-01' , N'女') insert into Student values('07' , N'郑竹' , '1989-07-01' , N'女') insert into Student values('08' , N'王菊' , '1990-01-20' , N'女') create table Course(C varchar(10),Cname nvarchar(10),T varchar(10)) insert into Course values('01' , N'语文' , '02') insert into Course values('02' , N'数学' , '01') insert into Course values('03' , N'英语' , '03') create table Teacher(T varchar(10),Tname nvarchar(10)) insert into Teacher values('01' , N'张三') insert into Teacher values('02' , N'李四') insert into Teacher values('03' , N'王五') create table SC(S varchar(10),C varchar(10),score decimal(18,1)) insert into SC values('01' , '01' , 80) insert into SC values('01' , '02' , 90) insert into SC values('01' , '03' , 99) insert into SC values('02' , '01' , 70) insert into SC values('02' , '02' , 60) insert into SC values('02' , '03' , 80) insert into SC values('03' , '01' , 80) insert into SC values('03' , '02' , 80) insert into SC values('03' , '03' , 80) insert into SC values('04' , '01' , 50) insert into SC values('04' , '02' , 30) insert into SC values('04' , '03' , 20) insert into SC values('05' , '01' , 76) insert into SC values('05' , '02' , 87)

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; ↑一对多,对组进行筛选 答案二:SELECT s ,scr FROM (SELECT sc.`S#` s,AVG(sc.`score`) scr FROM sc GROUP BY sc.`S#`) rs WHERE rs.scr>60 ORDER BY rs.scr DESC ↑嵌套查询可能影响效率 3、查询所有同学的学号、姓名、选课数、总成绩; 答案一:select Student.`S#`,Student.Sname,count(`C#`),sum(score) from Student left Outer join SC on Student.`S#`=SC.`S#` group by Student.`S#`,Sname ↑如果学生没有选课,仍然能查出,显示总分null(边界情况) 答案二:SELECT student.`S#`,student.`Sname`,COUNT(sc.`score`) 选课数,SUM(sc.`score`) 总分FROM Student,sc WHERE student.`S#`=sc.`S#` GROUP BY sc.`S#` ↑如果学生没有选课,sc表中没有他的学号,就查不出该学生,有缺陷! 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='叶平'); ↑反面思考Step1:先找学过叶平老师课的学生学号,三表联合查询 Step2:在用not in 选出没学过的 Step3:distinct以防叶平老师教多节课;否则若某同学的几节课都由叶平教,学号就会出现重复 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' ); ↑注意目标字段`S#`关联 exists subquery 可以用in subquery代替,如下 select Student.`S#`,Student.Sname from Student,Sc where Student.`S#`=SC.`S#` and SC.`C#`='001'and sc.`s#` in ( select sc_2.`s#` from sc as sc_2 where sc_2.`c#`='002' ); ↑不同之处,in subquery此处就不需要关联了

强化-SQL语句强化训练(史上最全最经典,呕血推荐) sql语句练习

2010/7 1. 有4个关系模式如下:出版社(出版社编号,出版社名称);图书(图书编号,书名,出版社编号,定价);作者(作者编号,姓名);著书(图书编号,作者编号,作者排序) 注:作者排序=1表示第一作者,依此类推。用SQL语句,完成第36~39题。 (1).检索所有定价超过20元的书名。 答案:SELECT书名(1分) FROM图书(1分) WHERE定价>20(2分) (2).统计每个出版社图书的平均定价。 答案:SELECT出版社编号,A VG(定价)(2分) FROM图书(1分) GROUP BY出版社编号(1分) (3).将科学出版社的所有图书定价下调5%。 答案:UPDATE图书SET定价=定价*0.95(1分) WHERE出版社编号IN(1分) (SELECT出版社编号FROM出版社(1分) WHERE出版社名称="科学")(1分) 【说明】WHERE出版社名称LIKE"科学"也正确。 (4).列出所有图书的书名、第一作者姓名和出版社名称。 答案:SELECT书名,姓名,出版社名称(1分) FROM出版社A,图书B,作者C,著书D(1分) WHEREA.出版社编号=B.出版社编号ANDB.图书编号=D.图书编号(1分) ANDC.作者编号=D.作者编号AND作者排序=1。(1分) S(SNO,SNAME,AGE,SEX,SDEPT) SC(SNO,CNO,GRADE) C(CNO,CNAME,CDEPT,TNAME) 1.试用SQL的查询语句表达下列查询: ①检索LIU老师所授课程的课程号和课程名。 ②检索年龄大于23岁的男学生的学号和姓名。 ③检索至少选修LIU老师所授课程中一门课程的女学生姓名。 ④检索W ANG同学不学的课程的课程号。 ⑤检索至少选修两门课程的学生学号。 ⑥检索全部学生都选修的课程的课程号与课程名。 ⑦检索选修课程包含LIU老师所授课程的学生学号。 2.试用SQL查询语句表达下列对教学数据库中三个基本表S、SC、C的查询: ①统计有学生选修的课程门数。 ②求选修C4课程的学生的平均年龄。 ③求LIU老师所授课程的每门课程的学生平均成绩。 ④统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。 ⑤检索学号比WANG同学大,而年龄比他小的学生姓名。 ⑥检索姓名以WANG打头的所有学生的姓名和年龄。 ⑦在SC中检索成绩为空值的学生学号和课程号。 ⑧求年龄大于女同学平均年龄的男学生姓名和年龄。 ⑨求年龄大于所有女同学年龄的男学生姓名和年龄。 3.试用SQL更新语句表达对教学数据库中三个基本表S、SC、C的各个更新操作: ①往基本表S中插入一个学生元组('S9','WU',18)。

相关文档
最新文档