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 表名 where 列 in (值列表)

(三)模糊查询 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‘)
时间: 2024-10-05 23:57:22

SQL数据库的查询方法的相关文章

sql数据库中查询第几条到第几条的数据

通用方法: select top 500 * from (select top 1000 * from UserSearchDatas order by ID) a order by ID desc sql数据库中查询第几条到第几条的数据,布布扣,bubuko.com

各种数据库分页查询方法

具体实现中,根据所用数据库.数据量.实现分页方式,选择分页实现快的方式实现. 一.MYSQL分页查询方法 MYSQL分页查询主要使用其自带的limit函数,但需根据查询量来决定具体的使用方式,如只有几千或几万数据,则直接用 limit m,n方式, 如数据量较多,则要注意limit的使用方式. // limit m , n:从第 m 条数据开始,获取 n 条数据 1.数据量少的方式:select * from tablename limit m,n; // limit m , n:m 可省略,省

数据库分页查询方法

在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法. 可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应用总结归纳一下,以方便大家查询使用. 下面就分别给大家介绍.讲解一下三种数据库实现分页查询的方法. 一. MySQL 数据库分页查询 MySQL数据库实现分页比较简单,提供了LIMIT函数.一般只需要直接写到sql语句后面就行了. LIMIT子句可以用来限制由SELECT语句返回过来的数据数量,它有

数据库基本查询方法等

数据库:数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式.数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用. 我们简单地学习了数据库的基本的创建方法和简单地查询方法: 创建: create语句: 如: create database f21; create t

用友金蝶SQL数据库误格式化恢复 SQL数据库修复 SQL数据库恢复 工具 方法

用友金蝶SQL数据库误格式化恢复 SQL数据库修复 SQL数据库恢复 硬盘误格式化.重分区.重装操作系统覆盖 SQL数据解决方法 [客户名称]:贵州铜仁市开天驾驶人培训中心 [软件名称]:用友T3普及版 [数据库版本]:MS SQL server 2000  [数据库大小]:1GB X 6  (3个账套 总共6个年度). [问题描述]:由于服务器中毒或卡顿,客户将服务器电脑送到 装机店 重做操作系统.未详细告知电脑用途,导致整个硬盘被维修店技术员 全盘格式化重新分区,并且重新做好了新的操作系统,

数据库基础查询方法

mysql表格查询方法: 查询: 1.简单查询 select * from Info --查所有数据select Code,Name from Info --查指定列的数据select Code as '代号',Name as '姓名' from Info --给列指定别名 2.条件查询 select * from Info where Code='p001'select * from Info where Sex='true' and Nation='n001' --多条件并的关系select

Django 数据库基本查询方法

基础查询方法 get 查询单一结果,模型类实例,如果不存在会抛出模型类 DoesNotExist 异常 filter 过滤出多个结果,返回 QuerySet 类型对象 exclude 排除掉符合条件剩下的结果,返回 QuerySet 类型对象 all 查询所有结果,返回 QuerySet 类型对象 count 查询结果数量 过滤条件 表达语法如下: 属性名称__运算符=值 语法 条件 id__exact=3 (省略写法: id=3) 查询id=3的数据 name__contains='e' 查询

SQL 数据库 子查询及示例

子查询,又叫做嵌套查询. 将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询. 子查询有两种类型: 一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数: 另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的数据表. 示例: --创建一个数据库,建立一个部门表格和部门人员表格 Create database gongs --创建一个gongs的数据库 go use

DataGridView连接Sql数据库 功能 查询 添加 删除 修改

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace _03大项目 { public partial cla