• SQL数据库的查询方法


    
    
    简单查询:
    一、投影
    
    select * from 表名 
    select 列1,列2... from 表名 
    select distinct 列名 from 表名
    
    二、筛选
    
    select top 数字 列|* from 表名 
    (一)等值与不等值 
    select * from 表名 where 列名=select * from 表名 where 列名!=select * from 表名 where 列名>select * from 表名 where 列名<select * from 表名 where 列名>=select * from 表名 where 列名<=值
    
    (二)多条件与范围 
    select * from 表名 where 条件1 and|or 条件2 ... 
    select * from 表名 where between ... and ... 
    select * from 表名 wherein (值列表)
    
    (三)模糊查询 like % _ 
    select * from 表名 where 列 like '%_....'
    
    三、排序
    
    select * from 表名 where 条件 order by 列名 ASC|DESC,列名 ASC|DESC
    
    四、分组:
    
    统计函数(聚合函数) 
    count(), max(), min(), sum(), avg()
    
    count()统计总行数 
    count(*)得到所有的行数 
    count(列)得到该列中所有非null个数。 
    select COUNT(*) from car where Brand='b003'
    
    max(列) 这一列的最大,min(列)这一列的最小 
    select min(price) from car
    
    sum(列)这一列的和,avg(列)这一列的平均 
    select AVG(price) from car
    
    group by ...having...
    
    1.group by后面跟的是列名。 
    2.一旦使用group by分组了,则select和from中间就不能用*,只能包含两类东西一类是:group by 后面的列名,另一类是统计函数 
    select Oil,avg(price) from Car group by oil 
    对于统计函数生成的列,默认是无列名,可以通过下面的方法指定列名。 
    select Oil as 油耗,COUNT(*) as 数量,avg(price) 均价 from Car group by oil
    
    having后面一般跟得是统计函数。它用来对分组后的数据进一步筛选。
    
    
    
    复杂查询:
    一、连接查询
    
    把多个表的列合在一个界面视图中。 
    思想:1.生成笛卡尔积。2.对笛卡尔积进行筛选。3.选择列进行显示。 
    select 表1.列1,表1.列2,表2.列1,表2.列2…… from 表1,表2 where 表1.列=表2.列
    
    select * from 表1 
        join 表2 on 表1.列=表2.列 
        join 表3 on 表2.列=表3.列
    
    左连(left join),右连(right join),全连(full join)
    
    二、联合查询
    
    把多个表的行合在一个界面视图中。 
    用union把两个查询组合在一起。要求是这两个查询的列要一一对应。
    
    三、子查询(嵌套查询)
    
    (一)无关子查询: 
    至少是两层查询,在外层查询的里面再写查询。 
    里层查询为外层查询提供查询的中间内容。
    
    (二)相关子查询:
    
     
    
     
    
    范例:
    
    复制代码
    --1、 查询Student表中的所有记录的Sname、Ssex和Class列。
    select sname,ssex,class from student
    --2、 查询教师所有的单位即不重复的Depart列。
    select distinct depart from teacher
    --3、 查询Student表的所有记录。
    --4、 查询Score表中成绩在60到80之间的所有记录。
    select * from score where degree  between 60 and 80
    --5、 查询Score表中成绩为85,86或88的记录。
    select * from score where degree in(85,86,88)
    --6、 查询Student表中“95031”班或性别为“女”的同学记录。
    select * from student where class='95031' or ssex=''
    --7、 以Class降序查询Student表的所有记录。
    select * from student order by class desc
    --8、 以Cno升序、Degree降序查询Score表的所有记录。
    select * from score order by cno asc,degree desc
    --9、 查询“95031”班的学生人数。
    select COUNT(*) from student where class='95031'
    --10、查询Score表中的最高分的学生学号和课程号。
    select * from score
    select MAX(degree) from score   --92
    select sno,cno from score where degree=(select MAX(degree) from score)
    --11、查询‘3-105’号课程的平均分。
    select AVG(degree) from score where cno='3-105'
    --12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
    select cno,AVG(degree) from score where cno like '3%' group by cno having count(*)>=5
    
    --13、查询最低分大于70,最高分小于90的Sno列。--假定按学生算。
    select sno,MAX(degree),MIN(degree) from score group by sno having MAX(degree)<90 and MIN(degree)>70
    
    --14、查询所有学生的Sname、Cno和Degree列。
    select * from student
    select * from score
    
    select sname,cno,degree from student join score on student.sno = score.sno
    
    --15、查询所有学生的Sno、Cname和Degree列。
    select * from course
    select * from score
    
    select sno,cname,degree from course join score on course.cno = score.cno
    --16、查询所有学生的Sname、Cname和Degree列。
    select * from student
    select * from course
    select * from score
    
    select sname,cname,degree from student
        join score on student.sno = score.sno
        join course on course.cno = score.cno
    
    --17、查询“95033”班所选课程的平均分。
    select * from student
    select * from score
    select sno from student where class='95033'   --101,107,108
    select * from score where sno in(101,107,108)
    select AVG(degree) from score where sno in(select sno from student where class='95033' )
    
    select AVG(score.degree) from student join score on student.sno = score.sno where student.class='95033'
    
    --18、假设使用如下命令建立了一个grade表:
    create table grade(low  int,upp  int,rank  varchar(1))
    insert into grade values(90,100,'A')
    insert into grade values(80,89,'B')
    insert into grade values(70,79,'C')
    insert into grade values(60,69,'D')
    insert into grade values(0,59,'E')
    
    --现查询所有同学的Sno、Cno和rank列。
    select * from grade
    select * from score
    select sno,cno,rank from grade join score on score.degree>=grade.low and score.degree<=grade.upp
    --19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
    select * from score
    select * from score where cno='3-105'  and degree>(select degree from score where cno='3-105' and sno='109')
    
    select degree from score where cno='3-105' and sno='109'   --76
    复制代码
    
    复制代码
    --21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
    select *from score where degree >(select degree from score  where sno='109'and cno='3-105')
    --22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
    select sno,sname,sbirthday from student where year (sbirthday)=(select year(sbirthday) from student where sno='108') 
    --23、查询“张旭“教师任课的学生成绩。
    select *from score where cno=(select cno from course where tno=( select tno from teacher where tname='张旭'))
    --24、查询选修某课程的同学人数多于5人的教师姓名。
    select tname from teacher where tno=( select tno from course where cno in( select cno from score  group by cno having count(*)>5))
    --25、查询95033班和95031班全体学生的记录。
    select * from score where sno in( select sno from student where class in('95033','95031'))
    --26、查询存在有85分以上成绩的课程Cno.
    select distinct cno from score where degree >85
    --27、查询出“计算机系“教师所教课程的成绩表。
    select *from score where cno in( select cno from course where tno in(select tno from teacher where depart ='计算机系')
    --28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。
    select tname,prof  from teacher 
    --29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
    select cno from score group by cno having select degree from   where cno ='3-105'and degree >(select degree from score where cno='3-105' and sno='3-245')
  • 相关阅读:
    说说我当初是如何学Linux的
    案例八:shell自动化管理账本脚本
    案例七:shell实现开机自动播放挂载本地yum仓库程序
    案例六:shell脚本监控httpd服务80端口状态
    案例五:shell脚本实现定时监控http服务的运行状态
    案例四:Shell脚本生成随机密码
    案例三:shell统计ip访问情况并分析访问日志
    案例二:shell脚本获取当前日期和时间及磁盘使情况
    案例一:shell脚本指定日期减去一天
    Linux:保证数据安全落盘
  • 原文地址:https://www.cnblogs.com/dawasai/p/4215828.html
Copyright © 2020-2023  润新知