主题
DQL单表查询
一、单表查询
通用语法:select 列名 from 表名
sql
# 查询单列
select 指定列
from 库.表名;
# 查询多列
select 指定列, 指定列
from 库.表名;
# 查询所有列
select *
from 库.表名;
# distinct, 写在select后面,列前面,可以实现去重
select distinct 指定列
from 库.表名;
# as 给列活着表起别名,写在列或表后面,可以省略
select distinct p.指定列 as '价格'
from 库.表名 as p;
# 省略as
select distinct p.指定列 '价格'
from 库.表名 p;1. 条件查询
1.1 比较运算符
a. 相等性:>大于 <小于 >=大于等于 <=小于等于 =等于 !=不等于
b. 区间:between 数1 and 数2 数1到数2之间,包含边界
in(数1,数2,数3,...) 数1或者数2或者数3...
c. 相似度:like '_xx%' %表示0或任意个字符,_表示一个字符
d. 非空:is null 为空 is not null 不为空
1.2 逻辑运算符
与 and 或 or 非 not
1.3 补充
cast:针对查询的结果, 修改对应列的字段类型
sql
# 语法:cast(字段 as 数据类型)
select cast(salary * 1.1 as decimal(10, 2)) as '涨薪10%'
from company_db.employee;2. 排序查询
sql
# 语法:
order by 字段1 asc(升序)|desc(降序), 字段1 asc(升序)|desc(降序) # 在字段1排序的基础上,以字段2排序注:1. 字符串比对时:逐个字符比对
2. order by 可以结合where使用,先写where后写order by
3. 聚合查询
聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空(NULL)值。
sql
# 语法:
select count(字段) from 库.表名
# 常见的聚合函数
count 求数据的行数
max 求数据的最大值
min 求数据的最小值
sum 求数据的总和
avg 求数据的平均值注:查询时聚合了,只展示聚合的,故聚合和聚合使用,不聚合和不聚合使用
count(1)和count(*):统计行数的写法
count(1):不会去表里挨个查数据是不是null,直接拿1做判断,性能更好
count(*):判断所有数据都为空时忽略,一般数据库中不会有,故可以用来统计行数
4. 分组查询
sql
# 语法:(group by 字段)
# 按年级加班级分组,查询班级平均分
select grade '年级', class '班级', cast(avg(score) as decimal(10, 2)) '班级平均分', sum(score) '班级总分'
from company_db.scholl
group by grade, class;注: 1. 分组(整合数据:以组为单位)必聚合(查看组的信息)
- 以什么分组就以什么查询,查询的列必须是分组的字段或者是聚合的字段
- having与where:都是条件查询,having适合分组后的情况,where适合不分组的情况
5. 查询内容插入新表
sql
# 语法:(已有表添加数据)
insert into 库.表名(字段1,字段2,...) select (字段a,字段b,...) from 库.表名注: 1. 查询的结果 和 保存到目标表的结构要保持一致
- 查询的结果的字段顺序要和目标表的字段的顺序保持一致, 当然类型、长度也要一致
sql
# 另一种写法:(直接创表并添加数据)
create table 库.新表
[( 字段1 数据类型,
字段2 数据类型,
字段3 数据类型,
...
)]
as
select
字段1 ,
字段2 ,
字段3 ,
...
from 库.表名 where 条件;6. 分页查询(mysql方言)
sql
# 语法:
limit [从那开始(默认是0,表示第一条数据)] 取多少条(查询数量可以大于数据的数量)
# 查询前十条数据
select *
from company_db.scholl
limit 10;
# 查询第7到19条数据
select *
from company_db.scholl
limit 6 , 13;7. 扩展
sql
# 如果列用了字符串类的数据,那么每一行都将用这个字符进行填充,如果表头想自定义还可以用as起个别名
-- 排序查询:按成绩降序查看所有数学成绩
select '数学' as '科目' ,score
from school_db.student_scores
where subject = '数学'
order by score desc;二、多表查询(概念)
一次性从好几张有关系的表里把我们需要的数据“拼”在一起查出来,核心思想是通过一个共同的“桥梁”字段(通常是主键和外键)把多张表连接起来。
1. 外键
假设有两张表A和B,B表的某列的值引用了A表的主键列的值,则B表的这一列称为B表的外键列 (Foreign Key),其中A表称为主表,B表称为从表。
1.1 外键约束
sql
# 语法:
[constraint 约束名] foreign key (外键字段) reference 主表名(主键)
放置位置:
建从表的时候, 在整个字段的最后面1.2 外键约束的作用:
保证插入数据的准确性:从表中外键的值在主表主键中必须有对应的值
保证删除数据的完整性:主表的主键值被从表外键引用之后,主表中对应的记录不能被删除
2. 表与表之间的关系
2.1 一对一
A表一行 → B表一行
B表一行 → A表一行
2.2 一对多
A表一行 → B表多行
B表一行 → A表一行
2.3 多对多
A表一行 → B表多行
B表一行 → A表多行