首页 > 练习-----查询

练习-----查询

第一步:建表

 1 create table student   #学生表
 2 (
 3   Sno varchar(20) primary key,  #学号,主键
 4   Sname varchar(20) not null,    #学生姓名
 5   Ssex varchar(20) not null,     #学生性别
 6    Sbirthday datetime,       #学生出生日期
 7    Class varchar(20)     #学生所在班级
 8 );
 9 
10 create table Teacher     #教师表
11 (
12    Tno varchar(20) primary key ,    #教职工编号,主键
13     Tnam varchar(20) not null,   #教职工姓名
14     Tsex varchar(20) not null,  #教职工性别
15     Tbirthday datetime,    # 教职工出生年月
16      Prof varchar (20),      #职称
17      Depart varchar(20)not null    #教职工所在部门
18 );
19 
20 create table Course   #课程表
21 (
22    Con varchar(20) primary key,  #课程号,主键
23     Cname varchar(20) not null,   #课程名称
24     Tno varchar(20) not null,   #教职工
25     foreign key(Tno)references Teacher(Tno)    #教工编号,外键
26 ); 
27 #           从表的列名                      主表的列名
28 
29 
30 create table Score   #成绩表
31 (
32    Sno varchar(20) not null,
33    foreign key(Sno) references Student(Sno) , #学号,外键
34    Con varchar(20) not null,  #组合主键  
35    Degree Decimal(4,1) ,      #Degree  成绩   
36    foreign key(Con) references Course(Con) ,   #课程号,外键
37    primary key (Sno,Con)       #成绩
38 );
39 #values  值的意思
40 
41 
42 
43 
44 #Student表
45 insert into Student values('108','曾华','','1977-09-01','95033');  
46 insert into Student values('105','匡明','','1975-10-02','95031');
47 insert into Student values('107','王丽','','1976-01-23','95033');
48 insert into Student values('101','李军','','1976-02-20','95033');
49 insert into Student values('109','王芳','','1975-02-10','95031');
50 insert into Student values('103','陆君','','1974-06-03','95031');
51 
52 
53 
54 
55  #Teacher表
56 insert into Teacher values('804','李诚','','1958-12-02','副教授','计算机系');
57 insert into Teacher values('856','张旭','','1969-03-12','讲师','电子工程系');
58 insert into Teacher values('825','王萍','','1972-05-05','助教','计算机系');
59 insert into Teacher values('831','刘冰','','1977-08-14','助教','电子工程系');
60 
61 
62 
63 #Course    课程表
64 insert into Course values('3-105','计算机导论','825');
65 insert into Course values('3-245','操作系统','804');
66 insert into Course values('6-166','数字电路','856');
67 insert into Course values('9-888','高等数学','831');
68  
69 
70 
71 #Score    成绩表
72 insert into Score values('103','3-245','86');
73 insert into Score values('105','3-245','75');
74 insert into Score values('109','3-245','68');
75 insert into Score values('103','3-105','92');
76 insert into Score values('105','3-105','88');
77 insert into Score values('109','3-105','76');
78 insert into Score values('101','3-105','64');
79 insert into Score values('107','3-105','91');
80 insert into Score values('108','3-105','78');
81 insert into Score values('101','6-166','85');
82 insert into Score values('107','6-166','79');
83 insert into Score values('108','6-166','81');

 

 查询题:

1、查询Student表中的所有记录的Sname、Ssex和Class列。

      #答题思路:

      #运用知识点:select 列名1,列名2,列名3... from 表名

 select Sname,Ssex,Class from Student

 

2、 查询教师所有的单位即不重复的Depart列。

   #答题思路:

       #去重查询:select distinct 列名 from  表名          

       #查出Teacher表中的Depart列  加上distinct关键字就是去重复

 select distinct Depart from Teacher 

 

3、 查询Student表的所有记录。

    #答题思路:

       #select * from 表名     *整个标的所有列

select * from Student

 

4、 查询Score表中成绩在60到80之间的所有记录。

       #答题思路:

       # 范围查询: select * from 表名 where Price between 范围值 and 范围值

select * from Score where Degree between 60 and 80

 

5、 查询Score表中成绩为85,86或88的记录。

        #答题思路:

        #离散查询:select * from 表名 where 要查的列名 in (要查的数值1,数值2,数值3)

select * from Score where Degree in (85,86,88)

 

6、 查询Student表中“95031”班或性别为“女”的同学记录。

    #答题思路:

    #所有的班级的学生

      select * from student

    #"95031”班的学生

      select * from student where class='95031'

    #找出95031”班的女学生 。用and关键字 来查找95031板的女生 。 就一个女学生。

      select * from student where class='95031' and Ssex='女'

 select * from Student where Class='95031' and Ssex='' 

 

 

7、 以Class降序查询Student表的所有记录。    

#desc降序    排序 order by查找

#select * from 表名 order by 列名 desc

select * from Student order by Class desc 

 

 

8、 以Cno升序、Degree降序查询Score表的所有记录。

    #答题思路:

          #在Score表,里查

         #根据两个条件来排序。asc升序

         #两个条件 :Cno升序、Degree降序    先升,后降

 select * from Score order by Cno asc , Degree desc     

 

9、 查询“95031”班的学生人数。

  #答题思路:

       #count的意思是集合 count(*)的意思是括号里面的字段集合 select count(*) from的意思是 从某某表查询出该字段的集合也就是有几条记录

      #{延伸知识:语句一:select count(*) from T;

                        作用:查询T表中记录的行数。

                        语句二:select * from T;

                         作用:查询T表中所有的记录。

                        它俩的区别是:语句一查询结果为一个数值,就是表中记录条数;语句二查询结果是表中所有数据,就是包括字段名字,字段里面的内容的详细信息。}

 

select count(*) from Student where Class='95031'  

 

 

 

 10、 查询Score表中的最高分的学生学号和课程号。(子查询或者排序)

    #答题思路:

           #根据子查询来查

    #先查score(成绩)表中最高成绩 

    #select max(degree) from Score #最大值(最高分)是92

    #再查这个最高分,的学生代号和课程号

    #select sno,cno from score where degree=92

           #内容延伸:{  格式:SELECT [谓语] [表别名] FROM 表名 [AS 表别名] [WHERE 逻辑表达式]它的功能是从一个或多个表中检索数据简单的说SELECT后面跟你想检索的内容,可以的一个字段也可以是多个字段(中间用都好隔开),即可以是字段名也可以用函数(系统自定义的),也可以是一个 * 号,表示输出表中所有的字段。FROM是检索内容的来源,就是来自哪个或那些表,跟表的名称;WHERE的作用是指定查询条件,只把满足逻辑表达式的数据作为查询结果,它是可选项,可有可无.} 

 

 select Sno,Cno from Score where Degree= (select max(Degree) from Score)   

 

 

 11、 查询每门课的平均成绩。 #分组查询 每门课 每门课的代号 平均成绩

     #扩展知识:group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。

 

select avg(Degree),Cno from Score group by Cno    

 

12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。  

      #条件: 至少有5名学生选修,以3开头的课程的 。  要在where里 

select avg(Degree) from Score where Cno = (select Cno from Score group by Cno having count(*)>4) and Cno like '3%' group by Cno

 

 

13、查询分数大于70,小于90的Sno列。

  #BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。

  #操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。



  
#第一种方法:

select Sno from Score where Degree between 70 and 90

  #第二种方法:

 

select Sno from Score where Degree>=70 and Degree<=90

 

 

14、查询所有学生的Sname、Cno和Degree列。

        #join用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

       #{有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。}

 

  #分析:

  #Sname(学生姓名)列是Student表里的

  #Cno、Degree列是Score表里的

  #通过 Student里的Sno(主键)就可知道了 Score里的Sno(外键) Sno是有联系的

 

  #把两个表连接起来 连接两张表的关键字join

  select * from Student join Score #查询的结果形成了 形成笛卡尔积

  #我们要进行筛选,筛选出正确的来 join......on....它两是一对 on的后面加条件

  select * from Student join Score on Student.Sno=Score.Sno

     #在加上要查的列,就可以了

select Sname,Cno,Degree from Score join Student on Student.Sno = Score.Sno

 

转载于:https://www.cnblogs.com/yuyu1993/p/5537808.html

更多相关:

  • 数据分析过程中,我们经常可以看到提数的SQL语句,了解SQL常用的基础查询语句,是检验提数逻辑是否正确的途径之一,并且也能更方便使用SMART BI数据分析工具。今天就让小编带大家走进SQL基础查询的世界吧~1、查询单个字段:语法:SELECT 字段名 FROM 表名举例:SELECT first_name FROM employ...

  •   SELECT * FROM tableSELECT * FROM table WHERE name = '强哥'SELECT * FROM table ORDER BY updateTime DESC...

  • 使用 OpenRowSet 和 OpenDataSource 访问 Excel 97-2007 测试文件:D:97-2003.xls和D:2007.xlsx,两个文件的内容是一模一样的。 测试环境:SQL Server 2000 / 2005。 -------------------------------------------...

  • exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure SELECT * INTO tmp_asset FROM OPENROWSET('Microsof...

  • select b.*,(select count(a.id) from td_product a where a.protypeid=b.id) num from td_protype b 转载于:https://www.cnblogs.com/shanlin/archive/2011/09/27/2192725.html...

  • 关注我的头条号,获取更多运维相关知识。你想了解哪方面的运维知识,请评论区告诉我,我会尽快更新~MySQL 数据库,基本上运维都会接触到,而对于数据库的性能优化,想必是大家比较关注的,下面分享一些调优技巧。先决条件安装 MySQL,版本大于 5.7有部分数据操作系统、数据库管理员权限MySQL 系统性能优化在系统层面,调整硬件和软件选项...

  • spring data jpa提供了多种查询方式,如下:方法名称查询继承Repository接口测试代码方法名称中支持的关键字(官方文档提供)使用JPA命名查询在User实体中定义jpql(类似于hql)jpql(百度百科)继承JpaRepository接口测试使用@Query查询和命名查询不同的是,将jpql写到了 dao 方法上,...

  • 转自:http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html   对于SqlServer的优化来说,可能优化查询是很常见的事情。关于数据库的优化,本身也是一个涉及面比较的广的话题,本文只谈优化查询时如何看懂SqlServer查询计划。由于我对SqlServer的认识...

  • 一.实现基础功能之一(记账)   一个记账本最基础之一的功能就是记账,所以也是首先要解决的问题,我选择了上学期使用的MySQL数据库来对账本进行存储。   我选择记账的方法是分开记账,就是支出放在一个表,收入放在一个表,这样在数据库方面会比较的直观的看到,但是在显示的时候就会产生部美观的问题,就是支出和收入都是分开来的,没有办法按照时...

  • 在Navicat中,我们选中一个表,双击打开,这是如果要新建查询这个表的sql语句,可以直接用快捷键  ctrl+q  会自动打开查询窗口,并直接写好 sql:select * from (当前打开的表名) 我们直接在后面补全查询条件即可,非常方便。 转载于:https://www.cnblogs.com/libin6505/...