Mysql数据库DQL 语言学习一

mysql单表查询语句

基础查询
条件查询(where)
分组查询(group by)
排序查询(order by)
分页查询(limit)

// 查询语句语法
select 
字段列表
from 表名列表
where 条件列表
group by 分组列表
having 分组后条件
order by 排序字段
limit 分页限定  

基础查询

查询多个字段

select 
字段列表
from 表名列表
//查询所有数据
select * from 表名

去重复记录

select  distinct
字段列表
from 表名列表
//查询所有数据
select * from 表名

重命名

as
drop table if exists stu;
CREATE TABLE stu (
	id INT,-- 编号
	NAME VARCHAR (20),-- 姓名
	age INT,-- 年龄
	sex VARCHAR (5), -- 性 别
	address VARCHAR (100),-- 地址
	math DOUBLE (5, 2),-- 数学成绩
	english DOUBLE (5, 2),-- 英语成绩
	hire_date date-- 入学时间
);

INSERT INTO stu(id,NAME,age,sex,address,math,english,hire_date)
VALUES
(1,'马云',55,'男','杭州',66,78,'1995-09-01'),
(2,'马化腾',55,'女','深圳',66,48,'1895-02-01'),
(3,'马斯克',55,'男','香港',23,78,'1995-03-01'),
(4,'流白',55,'男','湖南',66,58,'1994-09-04'),
(5,'留情',55,'女','湖南',66,NULL,'1595-09-01'),
(6,'刘德华',55,'男','香港',76,78,'1695-09-02'),
(7,'张学友',55,'男','香港',64,28,'1795-09-05'),
(8,'德玛西亚',55,'女','南京',96,78,'1195-09-09');
-- 查询所有列可以用*但是最好不用
SELECT * FROM stu;
-- 基础查询 ===============================

-- 查询name,age两列
SELECT NAME,age FROM stu;

-- 查询地址信息 

select address from  stu;

-- 去除重复记录
select DISTINCT address from stu;

-- 查询姓名,数学成绩,英语成绩利用as重命名
select name ,math as 数学 ,english as 英语 from stu;

条件查询

条件查询语法:

select 字段列表 from 表名 where 条件列表;
符号功能
>大于
<小于
<=小于等于
>=大于等于
=等于
<>或!=不等于
between…and…在某个范围之内都包含
in()多选一
like 占位符模糊查询,_单个任意字符,%多个任意字符
is null是null
is not null不是null
and 或 &&并且
or 或或者
not或!非不是
-- 条件查询 ===========================
-- 1. 查询年龄大于20岁学员信息
select * from stu where age > 20 ;

-- 2. 查询年龄大于等于20岁的学员年龄 信息
select * from stu where age>=20;
-- 3.查询年龄大于等于20岁并且年龄小于等于30岁的学员信息
select * from stu where age>=20 AND age <= 30;
select * from stu where age  between 20 and 30;

-- 4. 查询入学日期在'1998-09-01'到'1999-09-01'之间的学员信息

select * from stu where age  between '1998-09-01' and '1999-09-01';
-- 5. 查询年龄等于18岁学员的信息
SELECT * FROM stu WHERE age = 18;
-- 6. 查询年龄不等于18岁学员的信息
SELECT * from stu where age != 18;
SELECT * from stu where age <> 18;
-- 7. 查询年龄等于18岁或者年龄等于20岁或者年龄等于22岁学员的信息
SELECT *FROM stu WHERE age = 18 OR age = 20 OR age = 22;
SELECT * FROM stu WHERE age = {18,20,22};
-- 8.查询英语成绩为null的学员信息
-- 注意:null 值比较不能用 = != 需要使用 is is NOT
SELECT * FROM stu where english = null ;-- 错误方法
select * FROM stu WHERE english is NULL;
SELECT * FROM stu WHERE english IS NOT NULL;

模糊查询

通配符:

  1. _ :代表单个任意字符
  2. %:代表多个任意字符
-- 模糊查询==================
-- 1.查询姓'马'的学员信息
SELECT * FROM stu WHERE NAME LIKE '马%';

-- 2. 查询第二个字是'化'的学员信息
SELECT * FROM stu WHERE NAME LIKE '_化%';

-- 3. 查询名字中包含'德'的学员信息

SELECT * FROM stu WHERE NAME LIKE '%德%';

排序查询

排序查询语法

select 字段列表 from 表名 order by  排序字段名 [排序方式],排序字段名2 [排序方式2]...;

排序方式:
ASC:升序排列(默认)
DSC:降序排列
注意:如果有多个排序条件,当前面的条件值一样 时,才会根据第二条件进行排序。

-- 排序查询=========================
-- 1. 查询学生信息,按照年龄升序排列

SELECT * FROM stu ORDER BY age ASC;
-- 2. 查询学生信息,按照数学成绩降序排列
SELECT * from stu ORDER BY math DESC;
-- 3. 查询学生信息,按照数学成绩降序排列,如果数学成绩一样,在按照英语成绩升序排列
select * from stu order by math DESC, english ASC;

聚合函数

概念:将一列数据作为一个整体,进行纵向计算。
聚合函数分类:

函数名功能
count(列名)统计数量一般选用不为null的列
max(列名)最大值
min(列名)最小值
sum(列名)求和
avg(列名)平均值
聚合函数语法:
select 聚合函数名(列名)from```
**注意:**null 值不参与所有 聚合函数的运算,count中取值一般为主键或* 。
```sql
-- 聚合函数 =====
-- 1. 统计班级一共有多少个学生
SELECT * FROM stu;
SELECT COUNT(id) FROM stu; -- count 统计的列不能为null

-- 2.查询数学成绩最高分
SELECT MAX(math) FROM stu;

-- 3.查询数学成绩最低分
SELECT MIN(math) FROM stu;
-- 4.查询数学成绩的总分
SELECT sum(math) FROM stu;
-- 5.查询数学成绩的平均分
SELECT avg(math) FROM stu;
-- 6.查询英语成绩的最低分 
SELECT Min(english) FROM stu; 

分组查询

分组查询语法:

select 字段列表 from 表名 [where 分组前条件限定]group by 分组字段名[分组后条件过滤];

**注意:**分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义。
where和having区别:

  • 执行机制不一样:where是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
  • 可判断的条件不一样:where不能对聚合函数进行判断,having 可以。
    执行顺序: where >聚合函数 >having
-- 分组查询 ====================
SELECT * FROM stu;
-- 1. 查询男同学和女同学各自数学的数学平均分
SELECT sex,AVG(math) FROM stu GROUP BY sex;

-- 2. 查询男同学和女同学各自数学平均分,以及各自人数
SELECT sex,AVG(math),COUNT(*) FROM stu GROUP BY sex;
-- 3. 查询男同学和女同学各自数学平均分,以及各自人数,要求:分数低于70分的不参与分组
SELECT sex,AVG(math),COUNT(*) FROM stu WHERE math > 70 GROUP BY sex;

-- 4. 查询男同学和女同学各自数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于两个
SELECT sex,AVG(math),COUNT(*) FROM stu WHERE math > 70 GROUP BY sex having COUNT(*) > 2;

分页查询

分页查询语法

select 字段列表 from 表名 limit 起始索引,查询条目数; 

起始索引:从0开始
计算公式:起始索引= (当前页码-1)*每页显示的条数
注意:

  • 分页查询limit是mysql数据库的方言
  • oracle分页查询使用rownumber
  • sql server 分页查询使用top
-- 分页查询 ========================
select * from stu;
-- 1. 从0开始查询,查询3条语句
SELECT * FROM  stu LIMIT 0,3;

-- 2. 每页显示3条数据,查询第一页数据
SELECT * FROM  stu LIMIT 0,3;
-- 3. 每页显示3条数据,查询第二页数据
SELECT * FROM  stu LIMIT 3,3;
-- 4. 每页显示3条数据,查询第三页数据
SELECT * FROM  stu LIMIT 6,3;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值