码迷,mamicode.com
首页 > 数据库 > 详细

一些基本的sql语句练习以及自己写的sql语句,有什么不对欢迎指导。

时间:2016-07-08 23:10:44      阅读:349      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

 

技术分享技术分享

 


--一、单表查询练习
--1、查询<学生信息表>,查询学生"张三"的全部基本信息
SELECT * FROM a_studentinfo WHERE sname = ‘张三‘;

--2、查询<学生信息表>,查询学生"张三"和”李四”的基本信息
SELECT *
  FROM a_studentinfo
 WHERE sname = ‘张三‘
       OR sname = ‘李四‘;

--3、查询<学生信息表>,查询姓"张"学生的基本信息
SELECT * FROM a_studentinfo WHERE sname LIKE ‘张%‘;

--4、查询<学生信息表>,查询姓名中含有"四"字的学生的基本信息
SELECT * FROM a_studentinfo WHERE sname LIKE ‘%四%‘;

--5、查询<学生信息表>,查询姓名长度为三个字,姓“李”,且最后一个字是“强”的全部学生信息。
SELECT * FROM a_studentinfo WHERE sname LIKE ‘%李_强%‘;

--6、查询<学生信息表>,查询姓"张"或者姓”李”的学生的基本信息。
SELECT *
  FROM a_studentinfo
 WHERE sname LIKE ‘张%‘
       OR sname LIKE ‘李%‘;

--7、查询<学生信息表>,查询姓"张"并且"所属省份"是"北京"的学生信息
SELECT *
  FROM a_studentinfo
 WHERE sname LIKE ‘张%‘
       AND province = ‘北京‘;

--8、查询<学生信息表>,查询"所属省份"是"北京"、”新疆”、”山东”或者"上海"的学生的信息

SELECT *
  FROM a_studentinfo
 WHERE province = ‘北京‘
       OR province = ‘上海‘
       OR province = ‘新疆‘
       OR province = ‘山东‘;

--9、查询<学生信息表>,查询姓"张",但是"所属省份"不是"北京"的学生信息
SELECT *
  FROM a_studentinfo
 WHERE province <> ‘北京‘
       AND sname LIKE ‘张%‘;

--10、查询<学生信息表>,查询全部学生信息,并按照“性别”排序,性别相同的情况下按照“所属省份”排序,所属省份相同的情况下再按照“班级”排序
SELECT *
  FROM a_studentinfo
 ORDER BY sex, province, CLASS
          
          --11、查询<学生信息表>,查询现有学生都来自于哪些不同的省份
            SELECT province
              FROM a_studentinfo
             GROUP BY province
                      
                      --12、查询<学生选修信息表>,查询没有填写成绩的学生的学号、课程号和成绩
                        SELECT sno, cno, score
                          FROM a_studentcourse
                         WHERE score IS NULL
                        
                        --13、查询<学生选修信息表>,查询全部填写了成绩的学生的选修信息,并按照“成绩”从高到低进行排序
                          SELECT sno, cno, score
                                  FROM a_studentcourse
                                 WHERE score IS NOT NULL
                                 ORDER BY score DESC
                                    
                                    --二、聚合函数练习
                                    --1、统计<学生信息表>,统计共有多少个学生
                                      SELECT COUNT(sno)
                                        FROM a_studentinfo;





--2、统计<学生信息表>,统计年龄大于20岁的学生有多少个
SELECT COUNT(sno) FROM a_studentinfo WHERE 2016 - yearofbirth > 30;

--3、统计<学生信息表>,统计入学时间在1980年至1982年的学生人数
SELECT COUNT(sno)
  FROM a_studentinfo
 WHERE enrollment BETWEEN to_date(‘2000‘, ‘yyyy‘) AND
       to_date(‘2008‘, ‘yyyy‘);

--4、统计<学生选修信息表>,统计学号为"S001"的学生的平均成绩
SELECT sno, AVG(score)
  FROM a_studentcourse
 GROUP BY sno
HAVING sno = ‘S001‘;

--5、统计<学生选修信息表>,统计学号为"S001"的学生的总成绩
SELECT sno, SUM(score)
  FROM a_studentcourse
 GROUP BY sno
HAVING sno = ‘S001‘;

--6、统计<学生选修信息表>,查询课程号为”C001”的课程的最高成绩
SELECT cno, MAX(score)
  FROM a_studentcourse
 GROUP BY cno
HAVING cno = ‘C001‘;

--7、统计<学生信息表>,查询所有学生中的最大年龄是多少
SELECT 2016 - MIN(yearofbirth)
  FROM a_studentinfo
       
       --三、分组查询练习
       --1、统计<学生选修信息表>,统计每个课程的选修人数
         SELECT COUNT(sno), cno
           FROM a_studentcourse
          GROUP BY cno
          ORDER BY cno ASC;


--2、统计<学生选修信息表>,统计每个同学的总成绩
SELECT SUM(score), cno FROM a_studentcourse GROUP BY cno ORDER BY cno ASC;
--3、统计<学生信息表>,统计每个班级中每种性别的学生人数,并按照班级排序
SELECT COUNT(sno), sex, CLASS
  FROM a_studentinfo
 GROUP BY CLASS, sex
 ORDER BY CLASS ASC;
--4、统计<学生选修信息表>,统计每门课程的平均成绩,并按照成绩降序排序
SELECT AVG(score) s, cno FROM a_studentcourse GROUP BY cno ORDER BY s DESC;
--5、统计<学生选修信息表>,显示有两门以上课程不及格的学生的学号          
SELECT sno
  FROM a_studentcourse
 WHERE score < 60
 GROUP BY sno
HAVING COUNT(sno) > 2
--6、统计<学生信息表>,统计每个班级中的最大年龄是多少
SELECT MAX(2016 - yearofbirth)
  FROM a_studentinfo
 GROUP BY CLASS
          
          --四、嵌套查询练习
          --1、用子查询实现,查询选修“高等数学”课的全部学生的总成绩
            SELECT SUM(score)
              FROM a_studentcourse
             WHERE sno IN
                   (SELECT sno FROM a_courseinfo WHERE subject = ‘高等数学‘);

--2、用子查询实现,统计<学生选修信息表>,显示学号为"S001"的学生在其各科成绩中,最高分成绩所对应的课程号和成绩
--思考:如果该学号学生有两个课程分数都为最高的100分,查询会有什么结果
SELECT cno, score
  FROM a_studentcourse
 WHERE score = (SELECT MAX(score) FROM a_studentcourse WHERE sno = ‘S001‘)
       AND sno = ‘S001‘;
--3、用子查询实现,查询2班选修"数据库技术"课的所有学生的成绩之和
SELECT SUM(score)
  FROM a_studentcourse
 WHERE sno IN (SELECT sno FROM a_studentinfo WHERE CLASS = 2)
       AND cno = (SELECT cno FROM a_courseinfo WHERE subject = ‘数据库技术‘);
--4、用子查询实现,查询3班"张三"同学的"测试管理"成绩
SELECT score
  FROM a_studentcourse
 WHERE cno = (SELECT cno FROM a_courseinfo WHERE subject = ‘测试管理‘)
       AND sno = (SELECT sno
                    FROM a_studentinfo
                   WHERE CLASS = 3
                         AND sname = ‘张三‘);
--五、联接查询练习
--1、查询"张三"的各科考试成绩,要求显示姓名、课程号和成绩
SELECT s.sname, sc.cno, sc.score
  FROM a_studentinfo s
  JOIN a_studentcourse sc
    ON s.sno = sc.sno
 WHERE s.sname = ‘张三‘;
--2、查询"张三"的各科考试成绩中,哪科没有记录考试成绩,要求显示姓名、课程号和成绩
SELECT s.sname, sc.cno, sc.score
  FROM a_studentinfo s
  JOIN a_studentcourse sc
    ON s.sno = sc.sno
 WHERE s.sname = ‘张三‘
       AND sc.score IS NULL;
--3、查询"张三"的各门课程成绩,要求显示姓名、课程名称和成绩
SELECT s.sname, c.subject, sc.score
  FROM a_studentinfo s
  JOIN a_studentcourse sc
    ON s.sno = sc.sno
  JOIN a_courseinfo c
    ON sc.cno = c.cno
 WHERE s.sname = ‘张三‘;
--4、查询3班"张三"的"测试管理"成绩,要求显示姓名、成绩
SELECT s.sname, sc.score
  FROM a_studentinfo s
  JOIN a_studentcourse sc
    ON sc.sno = s.sno
  JOIN a_courseinfo c
    ON sc.cno = c.cno
 WHERE c.subject = ‘测试管理‘
       AND s.sname = ‘张三‘;
--5、查询所有2000年以前入学的,各班男生的各科考试平均成绩
SELECT s.class, sc.cno, AVG(sc.score)
  FROM a_studentinfo s
  JOIN a_studentcourse sc
    ON sc.sno = s.sno
 WHERE s.sex = ‘男‘
       AND s.enrollment < to_date(‘2000‘, ‘yyyy‘)
 GROUP BY sc.cno, s.class;

--六、外联接查询
--查询”李坚强”所有课程的成绩,并显示学号、姓名、课程号和成绩,没有成绩记录的学号包括:(‘S009‘,‘S010‘,‘S011‘)
--1、使用左联接
SELECT s.sno, s.sname, sc.score
  FROM a_studentinfo s
  LEFT JOIN a_studentcourse sc
    ON sc.sno = s.sno
 WHERE s.sname = ‘李坚强‘
--2、使用右联接
  SELECT s.sno, s.sname, sc.score
          FROM a_studentcourse sc
         RIGHT JOIN a_studentinfo s
            ON sc.sno = s.sno
         WHERE s.sname = ‘李坚强‘
        
          SELECT * FROM a_courseinfo;


--七、补充提高
--1、查询“张三”比“王三”入学早几年
SELECT ((SELECT s.enrollment FROM a_studentinfo s WHERE sname = ‘张三‘) -
        enrollment) / 365
  FROM a_studentinfo s
 WHERE sname = ‘王三‘;
--2、查询所在班级和该班内学生的年龄之和,其中每个人的年龄都大于20岁,每个班的年龄之和大于60岁
SELECT CLASS, SUM(2016 - yearofbirth)
  FROM a_studentinfo
 WHERE (2016 - yearofbirth) > 20
 GROUP BY CLASS
HAVING SUM(2016 - yearofbirth) > 60

/*3、计算每种产品的剩余库存量
表1,为产品进货表,产品名称name[char(10)],产品数量amount[int]
表2,为产品出货表,产品名称name[char(10)],产品数量amount[int]
业务逻辑:表1存储产品的总进货量,表2存储每种产品每次的出货量,如产品A进货为100,出货了3次,每次分别为10、20、30,那么A产品的库存就为40
                                  
表A1               |   表A2
-------------------|---------------------------
name     amount    |   name      amount
 A        100      |    A         10
 B        100      |    A         20
                   |    A         30
                   |    B         10
                   |    B         40*/

CREATE TABLE aa1(NAME CHAR(10), amout NUMBER) CREATE TABLE aa2(NAME
                                                               CHAR(10),
                                                               amout NUMBER)

INSERT
  INTO aa1 VALUES(‘a‘, 100);

INSERT INTO aa2 VALUES (‘a‘, 10);
INSERT INTO aa2 VALUES (‘a‘, 20);
INSERT INTO aa2 VALUES (‘a‘, 30);

SELECT DISTINCT a.name, (a.amout - (SELECT SUM(amout) FROM aa2)) 剩余
  FROM aa1 a
  JOIN aa2 b
    ON a.name = b.name;

 

一些基本的sql语句练习以及自己写的sql语句,有什么不对欢迎指导。

标签:

原文地址:http://www.cnblogs.com/alex68/p/5654631.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!