第三节
掌握数据库操作
之查询
大数据系列课程
学习目标
掌握数据库查询的SQL命令(select
单表查询
多表查询
单表查询
不加条件的查询:
查询特定字段,语法
select <字段1,字段2...> from < 表名 >;
示例
查询会员表里所有用户的手机号码和可用余额
select MobilePhone,LeaveAmount from member;
查询所有字段
语法
select * from < 表名 >;
示例
查询会员表的所有用户信息。
select * from member;
单表查询
按条件进行查询:
多个条件需要同时成立,语法
select … from <表名> where 表达式A and 表达式B and … and 表达式N;
示例
查询会员表中类型为普通用户、且可用余额大于100000用户
select * from member where type=1 and LeaveAmount>100000.00
多个条件不需要同时成立,只需满足其中一个或多个,语法
select … from 表名 where 字段a = a or 字段b=b or 字段c=c
示例
查询会员表里用户id1或者2或用户名为Nick 的用户信息
select * from member where id=1 or id=2 or RegName=‘Nick'
思考
问题一:
对于不同类型的信息该怎么存储呢?是放一个表呢,还是不同类型数据放不同表
(结合仓库去理解)
放在一个表的缺点:
字段过多
难以维护
表数据庞大
数据冗余,重复数据多
问题二:
既然不同类型的数据放在了不同的表,那原本有联系的数据怎么保持原有的联系
呢?
解决方案:
设计表的时候两个表之间维持一个关联即可。
多表查询
member表中的id字段与loan表(借款标)的借款人编号MemberID
成一个关联,如下图所示:
多表查询
语法:
select  要查询的字段  from  1, 2…  where 关联条件和过滤条件
示例
查询 Id1001的用户的用户名、手机号码、可用余额以及该用户的借
款项目的编号、标题、借款金额
分析和步骤:
涉及表:用户表(member)项目(loan)
关联关系:member.Id= loan.MemberId
过滤条件:member.Id = 1001
查询的字段:会员表(RegName mobilephoneLeaveAmount)
项目表(idTitleAmount)
对查询结果进行排序(order by
对结果集进行排序
语法
select … from … order by 字段A asc(desc);  select … from … order by 
A asc(desc),字段B asc(desc)…;
asc:升序 ---ascend 默认的
desc:降序 --descend  --需要写
示例
查询用户表里所有普通用户信息,按可用余额升序、降序排列。
select * from member where type=1 order by LeaveAmount;
select * from member where type=1 order by LeaveAmount desc;
连接查询
语法
INNER JOIN
内连接
又称为等值连接,获取两个表中字段匹配关系的记录 --
关联查询
LEFT  JOIN
左连接
(左外链接)
读取左表全部数据,即使右表没有关联数据,左连接会从
左表产生一套完整的记录,和右表匹配的记录。如果右边
没有匹配记录,则右侧结果集字段为null
RIGHT JOIN
右连接
(右外链接)
以右表为基础,与LEFT JOIN相反  --
案例
id
u_name
age
1
周杰伦
36
2
胡歌
33
3
吴亦凡
22
4
刘德华
46
5
张杰
35
6
王俊凯
19
7
王源
18
8
易烊千玺
17
9
邓超
25
id
u_id
lover_name
1
1
昆凌
2
4
吴丽倩
3
5
谢娜
4
9
孙俪
用户信息表user
用户对象信息表user_lover
根据表A,表B写出以下SQL的查询结果集
d6d085bbecbea2e9654c11a661dab562
作业
为管理业务培训信息,建立3个表
S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号,学员姓名,所属单位,学员年龄
C(C#,CN)C#,CN分别代表课程编号,课程名称
SCC(S#,C#,G) S#,C#,G分别代表学号,所选的课程编号,学习成绩
1.查询选修课程名称为’税收基础’的学员学号和姓名?
2.查询选修课程编号为’C2’的学员姓名和所属单位?
谢谢!