SQL 查询举例

来源:互联网 发布:管理和领导的区别 知乎 编辑:程序博客网 时间:2024/04/30 21:29

实验表结构如下:

学生表: Student(Sno, Sname, Ssex ,Sage, Sdept) ,其中Sno为主键

课程表:Course(Cno,Cname, Ccredit),其中Cno为主键

学生选课表:SC(Sno,Cno,Grade),其中Sno,Cno的组合为主键

要求:首先创建数据库XSGL,在该数据库中创建以上三表,在各表中输入一些记录,然后进行下面的操作,写出相应的命令序列:

1)查询全体学生的学号和姓名。

程序代码:select Sno,Sname from Student

2)查询全体学生的姓名、学号、所在系。

程序代码:select Sno,Sname,Sdept from Student

3)查询全体学生的详细信息。

程序代码:select * from Student

4)查询全体学生的姓名及其出生年份。

程序代码:select Sname,(2008-Sage) as years from Student

5)查询软件工程系全体学生的名单。

程序代码:select Sname from Student where(Sdept='软件工程')

6)查询所有年龄在20岁以下的学生姓名以及年龄。

程序代码:select Sname,Sage from Student where(Sage<20)

7)查询考试成绩不及格的学生的学号。

程序代码:select Sno,Grade from SC where(Grade<60)

8)查询年龄在20-23岁(包括20,23)之间的学生的姓名、系别和年龄。

程序代码:select Sname,Sage,Sdept from Student

where(Sage>=20 and Sage<= 23)

9)查询不在信息系、数学系、也不在软件工程系学生的姓名和性别。

程序代码:select Sname,Sno,Ssex from Student

where(Sdept<>'信息'and Sdept<>'数学'and Sdept<>'软件工程')

10)查询所有姓刘的学生的姓名、学号和性别。

程序代码:select Sname,Sno,Ssex from Student where(Sname like '刘%')

11)查询姓“欧阳”且全名为三个汉字的学生的姓名。

程序代码:select Sname from Student where(Sname like '欧阳_')

12)查询姓名中第2个字为“阳”字的学生的姓名和学号。

程序代码:select Sname from Student where(Sname like '_阳%')

13)查询所有不姓刘的学生的姓名、学号。

程序代码:select Sname,Sno,Ssex from Student where(Sname not like '刘%')

14)查询缺少成绩的学生的学号和相应的课程号。

程序代码:select Sno,Cno from SC where(Grade is null)

15)查询软件工程系年龄在20岁以 下的学生姓名。

程序代码:select Sname,Sage from Student

where(Sdept='软件工程' and Sage<20)

16)查询选修了3号课程 的学生的学号及其成绩,查询结果按分数的降序排列。

程序代码:select Sno,Grade from SC where(Cno='C3') order by Grade desc

17)查询全体学生情况,结果按所在系的升序排列,同一系的按年龄降序排列。

程序代码:select * from Student order by Sdept asc,Sage desc

18)统计学生总人数。

程序代码:select count(Sname) as StuAll from Student

19)查询选修了课程的学生人数。

程序代码:select count(distinct Sno) from SC where (Grade is not null)

20)计算选修了1号课程 的学生平均成绩。

程序代码select avg(Grade) as Cavg from SC where (Cno='C1')

21)查询选修了1号课程 的学生最高分数。

程序代码:select max(Grade) as highest from SC where(Cno='C1')

22)求各课程号及相应的选课人数。

程序代码:select Cno,count(*) from SC group by Cno

23)查询选修3门以上课程的学生学号。

程序代码:select Cno from SC group by Cno having(count(*)>3)

24)查询每个学生及其选修课程的情况。

程序代码:select Sname,Sdept,SC.Sno,SC.Cno,Cname from Student,SC,Coursewhere Student.Sno=SC.Sno and SC.Cno=Course.Cno

25)查询选修2号课程且成绩在90分以上的所有学生。

程序代码:select Sno from SC where(Cno='C2' and Grade>=90)

26)查询每个学生的学号,姓名,选修的课程名和成绩。

程序代码:select Sname,Student.Sno,Cno,Grade from Student,SC where Student.Sno=SC.Sno

27)查询所有选修了1号课程 的学生姓名。

程序代码:

方法一:

select Sname from Student where(Sno=any(select Sno from SC where Cno='C1'))

方法二:

select Sname,SC.Sno,Cno from Student,SC where Student.Sno=SC.Sno and Cno='C1'

28)查询选修了课程名为“数据库”的学生的学号和姓名。

程序代码:

select Sname,SC.Sno,Cname from student,SC,Course

where Student.Sno=SC.Sno and Course.Cno=SC.Cno and Cname='数据库'

查询表的行数:

select 'book' as tablename,
count(*) as row_count
from book

select 'Customers' as tablename
  , count(*) as row_count
  from Customers
  union all
  select 'Orders' as tablename
  , count(*) as row_count
  from Orders
  union all
  select 'Products' as tablename
  , count(*) as row_count
  from Products
  union all
  ...

  如果你需要在你的数据库里的所有表上做这个查询,那你可以从INFORMATION_SCHEMA.TABLES视图生成表清单: 

select table_name
  from information_schema.tables
  where table_schema = 'mydatabase'

  然后你可以利用这个查询的结果集和一个文本编辑器生成第一个查询。

0 0