3.3 数据查询

第三节  数据查询

(一)格式

select [all|distinct] <目标列表达式>[,<目标列表达式>]...
from <表名或视图名>[,<表名或视图名>]...
[where<条件表达式>]
[group by<列名1>[having <条件表达式>]]
[order by<列名2>[asc|desc]]

1.目标列表达式*/表名.*/count(*)/字段名表达式

2.条件表达式

(二)分类介绍查询命令

单表查询、连接查询、嵌套查询、集合查询

一、单表查询

1.选择表中的若干列

1 select Sno,Sname from Student;
2 select * from Student;
3 select Sname,200-Sage from Student;

2.选择表中的若干元组

 1 select Sname from Student where Sdept=‘cs‘;
 2 select Sname from S where Sage beteween 20 and 30;
 3 select Sname from S where Sage IN(‘CS‘,‘MA‘,‘IS‘);
 4 select * from S where Sno like ‘200215121‘;
 5 select * from S where Sno=‘200215121‘;如果like后边不跟通配符,like可以等于=
 6 select Sname from S where Sname like ‘刘%‘;  刘贝  刘小明
 7 select Sname from S where Sanme like ‘刘_‘;      刘贝 刘明
 8 select * from Course  where Cname like ‘DB\_%I__‘escape‘\‘;查询以DB_开头,且倒数第3个字符是i的课程
 9 select Sno from SC where Grade IS NULL;  IS不能写成=
10 AND高于OR

3.对查询结果排序

select Sno from SC where Cno=‘3‘order by Grade desc;

4.使用库函数

selsect average(*)from SC;

5.对查询结果进行分组

select Sno from SC group by Sno having count(*)>3;

二、连接查询

1.格式:

1 [<表名1>.]<列名1><比较运算符>[<表名2>,]<列名2>
2 [<表名1>.]<列名1>between[<表名2>.]<列名2>and[<表名3>.]<列名3>

1.等值与非等值连接

查询每个学生及其选修课程的情况
selece Student.*,SC.* from Sthdent,SC where Student.Sno=SC.Sno;

2.自身连接

Course(Cno课程号, Cname课程名称, Cpno先行课, Ccredit学分)

因为Course表中只有直接先行课,没有间接先行课,所以需要为Corse取两个别名,分别是first和second,即first(Cno, Cname, Cpno, Ccredit)    second(Cno, Cname, Cpno, Ccredit)

查询每一门课程的间接选修课
select first.Cno ,second.Cpno from Course first,Course second where first.Cpno=second.Cno;

3.外连接:左外连接、右外连接

外连接:在通常的连接中,只能满足连接条件的元组才能作为结果输出。比如Student中有200215123和200215125两个学生没有选课,在SC表中,就没有相应的选课记录,

所以当需要列出所有学生的选课信息时,就会舍弃200215123和200215125两个学生(左连接)。

若是某个学生并没有选课,扔想把舍弃的Student元组保存在结果关系中,并在SC表的属性上填写null,这时就需要用外连接。

左外连接列出做边关系的所有元组,右外连接列出右边关系的所有元组

列出所有学生的选课信息,包括没有选课的学生
select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student LEFT OUT JOIN SC ON(Student.Sno=SC.Sno);

4.复合条件连接

where中有多个连接条件

查询2号课程且成绩在90分以上的所有学生
select Student.* from Student,SC where Student.Sno=SC.Sno and SC.Cno=‘2‘ and SC.Grade>90;

三、嵌套查询

将一个查询嵌套在另一个查询快的where语句或者是having短语的条件中的查询成为嵌套查询

1.带IN的查询

查询与“刘晨”在同一个系学习的学生
select Sno,Sname,Sdept from Student where Sdept IN(select Sdept from Student where Sname="刘晨");

当然,本题同样可以用自身查询来做:

select S1.Sno,S1.Sname,S1.Sdept from Student S1, Student S2 where S1.Sdept=S2.Sdept and S2.Sname="刘晨":

2.带比较运算符的子查询

同样,假设一个学生只能在一个系里面学习,所以上边的in可以用=来代替

select Sno,Sname,Sdept from Student where Sdept=(select Sdept from Student where Sname="刘晨");

3.带any some all等谓语的子查询

查询其他系中比计算机科学系某一学生年龄小的学生姓名和年龄
select Sname,Sage from Student where Sage<any (select Sage from Student where Sdept=‘CS‘) and Sdept <>‘CS‘;
查询其他系中比计算机科学系所有学生年龄都小的学生姓名和年龄
select Sname,Sage from Student where Sage<all(select Sage from Student where Sdept=‘CS‘) and Sdept<>‘CS‘;

4.带有exists谓语的子查询

exists代表存在量词,带有exists不返回任何数据,而是返回flase或true

查询所有选修了1号课程的学生姓名
select Sname from Student where Sno=(select Sno from SC where Cno=‘1‘));
select Sname from Student where exsts (select *from SC where Sno=Student.Sno and Cno=‘1‘);

四、集合查询

集合查询主要包括了并运算union、交运算intersect、差运算except。注意!参加集合运算的各查询结果的列数必须是相同的,对应项的数据类型也必须是相同的

查询选修了1号课程或2号课程的学生姓名
select Sname from Student where Sno=(select Sno from SC where Cno=‘1‘or Cno=‘2‘);
select Sname from Student where Sno=(select Sno from SC where Cno in (‘1‘,‘2‘));
select Sname from Student where Sno=(select Sno from SC where Cno=‘1‘ union select Sno from SC where Cno=‘2‘ );
时间: 2024-10-29 12:50:57

3.3 数据查询的相关文章

MongoDB数据查询

启动MongoDB:sudo service mongodb start,mongo 经测试,键可加引号也可不加,但是值一般要加引号,数值类型除外 MongoDB区分大小写,命名通常采用驼峰式命名法 MongoDB在使用数据库,插入集合等情况下,若数据库/集合不存在将自动创建 数据查询find() db.<集合名>.find({<键名>:<值>,...}) 格式化结果集:后加.pretty()即db.<CollectionName>.find({key:'v

用python操作mysql数据库(之数据查询结果返回字典类型)

#!/usr/bin/env python # -*- coding: utf-8 -*- import MySQLdb #建立连接 conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1qaz#EDC',db='test_db') cur = conn.cursor(MySQLdb.cursors.DictCursor) #建立游标时,加上"MySQLdb.cursors.DictCursor",让数据查询结果返回字

SharePoint服务器端对象模型 之 使用CAML进展数据查询

SharePoint服务器端对象模型 之 使用CAML进行数据查询 一.概述 在SharePoint的开发应用中,查询是非常常用的一种手段,根据某些筛选.排序条件,获得某个列表或者某一些列表中相应的列表条目的集合. 除去列表上的查询之外,在SharePoint中还大量存在着各种各样的查询,比如针对回收站的SPRecycleBinQuery.针对审计的SPAuditQuery.针对变更的SPChangeQuery等等,不过这些查询在实际项目中使用到的频率并不是很高.本章节还是着重介绍列表查询功能.

6、SQL Server 数据查询

一.使用SELECT检索数据 数据查询是SQL语言的中心内容,SELECT 语句的作用是让数据库服务器根据客户要求检索出所需要的信息资料,并按照规定的格式进行整理,返回给客户端. SELECT 语句的基本结构 [WITH<common_tale_expression>] SELECT select_list [INTO new_table_name] [FROM table_source][where search_condition] [GROUP BY group_by_expressio

数据库 简单的数据查询

简单的数据查询 1.查询的基本结构: select[distinct] */列名 from table 表名 [where condition] [order by] 2.投影的操作:指定查询结果中能够显示的列 语法:select 列名列表 from 表名; (1):选择多列查询,列名之间用“,”隔开 (2):单列时,只单个. (3):若选择所有列,则用*代替. 3.表名前缀:本列无多大意义,但在复杂的多表查询的情况下,很有用. 语法:select 列名表名 from 表名; 4.列别名(as)

Hibernate数据查询(转)

Hibernate Query Language(HQL)Criteria QueryNative SQL下面对其分别进行解释Hibernate Query Language:HQL提供了是十分强大的功能,它是针对持久化对象,用取得对象,而不进行update,delete和insert等操作.而且HQL是面向对象的,具备继承,多态和关联等特性.from子句:from子句是最简单的HQL,例如from Student,也可以写成 select s from Student s.它简单的返回Stud

我们曾经心碎的数据库之 数据查询基础

第九章  数据查询基础 1.记录集: 记录集是符合查询条件的记录组织在一起的类似于表结构的查询结果 2.使用select语句进行查询 语法: select 列名 from 表名 where 查询条件表达式 order by 排序的列名 [asc或desc] 1.查询所有的数据行和列 select * from students 2.查询部分行和列 select 列名  from 表名 where  查询条件表达式 3.在查询中使用列的别名 select scode as 学生编号,sname a

数据查询和管理

对数据表的插入.更新.删除操作    --数据查询和管理--取消重复元组distinctselect distinct 民族 from 学生信息go--查询前几列数据select top 6 * from 学生信息select top 6 学号,姓名,民族 from 学生信息go--查询计算列select 教师编号 as 'sno',姓名 as 'sname',2015-年龄 as 'sbrisday' from 教师信息go--使用别名查询,在列表中的名称,可使用的方法:空格,as,=,别名用

二级缓存 对数据查询

二级缓存:存放公有数据 1.适用场合: 1.数据不能频繁更新 2.数据能公开,私密性不是很强 2.hibernate本身并没有提供二级缓存的解决方案 3.二级缓存的实现是依赖于第三方供应商完成的 ehcache oscache jbosscache swamchache 4.二级缓存的操作 1.二级缓存存在sessionFactory中 2.生命周期:与sessionFactory保持一致 3.使用二级缓存的步骤 1.在hibernate.cfg.xml <property name="c

Oracle EBS-SQL (MRP-7):检查MRP计划运行报错原因之超大数据查询2.sql

The following scripts can be used to check for huge line numbers: -- PO Requisitions select * from PO_REQUISITION_LINES_ALL where LINE_NUM > 1000000000; -- PO Lines select * from PO_LINES_ALL where LINE_NUM > 1000000000; -- Receiving Supply SELECT *