初学SQL数据库(4)

数据库查询语言–DQL

首先我们在数据库先创建测试表

USE test;

CREATE TABLE IF NOT EXISTS s(
id INT,#学号
NAME VARCHAR(20),#姓名
age INT,#年龄
sex VARCHAR(5),#性别
address VARCHAR(100),#地址
math INT,#数学
english INT#英语
);

DROP TABLE IF EXISTS s;

INSERT INTO s (id,NAME,age,sex,address,math,english) VALUES 
(1,'李华',18,'男','杭州',80,80),
(2,'小明',19,'男','深圳',75,60),
(3,'大雾',31,'男','美国',76,93),
(4,'王炸',27,'男','美国',65,NULL),
(5,'张三',16,'女','上海',90,98),
(6,'李四四',32,'男','上海',80,81);
	select  字段列表 
​	from  表名列表  
​	where  条件列表
   group by 分组字段
   having  分组之后的条件
   order by  排序
​	limit   分页限定

直接上干货

1.基础查询
查询该表中所有字段对应的数据
Select * from 表名;

##查询该表中所有字段对应的数据
Select 字段1,字段2...  from 表名;

##查询 姓名 和 年龄
SELECT NAME,age FROM s=;
##些公司会要求查询语句不能出现*,必须写字段名加注释
##查询姓名 和 年龄
SELECT 
	NAME,#姓名
	age  #年龄
FROM
	s;#学生表

2 去重查询
Select distinct 字段1,字段2,… from 表名

SELECT address FROM s;--有重复地名

SELECT DISTINCT address FROM s;

3.求和查询
Select distinct 字段1,字段2,(字段1+字段2),… from 表名

## 查询数学和英语成绩的总和
SELECT NAME,math,english,(math + english) FROM s;

##当字段中有null值参与运算时,结果也为null,可以使用ifnull()

SELECT NAME,math,english,(math + IFNULL(english,0)) FROM s;

##math+english 起别名	
SELECT NAME math,english,(math + IFNULL(english,0)) '总成绩' FROM s;
SELECT NAME math,english,(math + IFNULL(english,0)) AS '总成绩' FROM s;

4.条件查询
where子句后面跟的条件
运算符

  1. >, < , >= , <= , = , <>

  2. BETWEEN … AND

  3. IN(集合)

  4. LIKE:模糊查询
    占位符 :
    _ :一个任意字符
    %:多个任意字符

  5. IS NULL

  6. AND 或 &&

  7. OR 或 ||

  8. NOT 或 !

-- 查询年龄大于20的学生信息
SELECT * FROM s WHERE age >20;

-- 查询年龄大于20的学生信息,包括20岁
SELECT * FROM s WHERE age>=20;

-- 查询年龄等于20的学生信息
SELECT * FROM s WHERE age = 20;

-- 查询年龄不等于20岁的学生信息
SELECT * FROM s WHERE age != 20;
SELECT * FROM s WHERE age <>20;

-- 查询年龄大于等于20 小于等于30的学生信息
SELECT * FROM s WHERE age>=20 && age<=30;
SELECT * FROM s WHERE age>=20 AND age<=30;
SELECT * FROM s WHERE age BETWEEN 20 AND 30;

-- 查询年龄 16 ,18 ,19 的学生信息
SELECT * FROM s WHERE age = 16 OR age = 18 OR age = 19;
SELECT * FROM s WHERE age = 16 || age = 18 || age = 19;
SELECT * FROM s WHERE age IN (16,18,19);

-- 查询没有英语成绩的学生信息
SELECT * FROM s WHERE english IS NULL;

-- 查询有英语成绩的学生信息
SELECT * FROM s WHERE english IS NOT NULL;

5.模糊查询(like)

大多数搜索框都是模糊查询。

# like 查询
-- 查询 姓李的学生信息
SELECT * FROM s WHERE NAME LIKE '李%';

-- 查询第二字为炸的学生信息
SELECT * FROM s WHERE NAME LIKE '_炸%';

-- 查询名字中包含明字的学生信息
SELECT * FROM s WHERE NAME LIKE '%明%';

-- 查询名字是3个字的学生信息
SELECT * FROM s WHERE NAME LIKE '___';

6.排序查询
排序查询有升序和降序
- ASC :升序 (默认)
- DESC: 降序
语法: order by 排序字段1,排序方式1 ,排序字段2,排序方式2

-- 查询学生信息,并按照数学成绩升序排列
SELECT * FROM s ORDER BY math;
SELECT * FROM s ORDER BY math ASC;

-- 查询学生信息,并按照数学成绩降序排列
SELECT * FROM s ORDER BY math DESC;

-- 查询学生信息,并按照数学成绩升序排列,如果数学成绩相同就按英语成绩升序排列
SELECT * FROM s ORDER BY math ASC ,english ASC ;
SELECT * FROM s WHERE english IS NOT NULL ORDER BY math ASC ,english ASC ;

7.聚合函数
聚合函数就是将一列数据作为一个整体,进行纵向计算
语法:`select 聚合函数(列名)[别名] from 表名
常见的几种聚合函数 统计、最大值、最小值、求和、计算平均值

  1. 统计:count:计算个数
SELECT count(id) FROM s;
  1. max:计算最大值
-- 求学生中数学成绩最高分
SELECT MAX(math) FROM s;
  1. min:计算最小值
-- 求学生中英语成绩最低分
SELECT MIN(IFNULL(english,0)) FROM s;
  1. sum:求和
-- 求学生的学生数学总成绩
SELECT SUM(math) FROM s;
  1. avg:计算平均值
-- 求学生的学生数学平均分
SELECT AVG(math) FROM s;
``
 
8.分组查询(group by)
   语法:	group by 分组字段
  
```sql
##分组之后查询的字段:分组字段,聚合函数
SELECT * FROM s GROUP BY sex;-- 没有任何意义结果:查出局部数据

-- 按照性别分组,分别查询男,女同学的数学平均分
SELECT * FROM s GROUP BY sex;-- 没有任何意义
SELECT sex,AVG(math) FROM s GROUP BY sex;

-- 按照性别分组,分别查询男,女同学的数学平均分,及相应性别对应的人数
SELECT sex,AVG(math),COUNT(id) FROM s GROUP BY sex;

-- 分组前添加一些限定条件
-- 按照性别分组,分别查询男,女同学的英语平均分,及相应性别对应的人数,分组要求:分数小于60的不参与统计
SELECT sex,AVG(IFNULL(english,0)),COUNT(id) FROM s WHERE english >60 GROUP BY sex;
SELECT sex,AVG(IFNULL(english,0)),COUNT(id) FROM s GROUP BY sex HAVING english >60;-- 错误,因为条件是分组前的条件,having只对分组后的结果进行条件添加

-- 按照性别分组,分别查询男,女同学的英语平均分,及相应性别对应的人数,分组要求:分数小于60的不参与统计,并且只查看人数大于2的分组数据
SELECT sex,AVG(IFNULL(english,0)),COUNT(id) FROM s WHERE english >60 GROUP BY sex HAVING  COUNT(id)>2;
-- 另一种写法
SELECT sex,AVG(IFNULL(english,0)),COUNT(id) 人数 FROM s WHERE english >60 GROUP BY sex HAVING 人数>2;				
  1. 分页查询(limit)
    分页公式:开始的索引 = (当前页码-1)* 每页显示的条数
-- 每页显示2条数据
SELECT * FROM s LIMIT 0,2;-- 第1页
SELECT * FROM s LIMIT 2,2;-- 第2页
SELECT * FROM s LIMIT 4,2;-- 第3页
SELECT * FROM s LIMIT 6,2;-- 第4页

以上就是数据库查询语言的基本语法和例子

欢迎酷爱编程的你们和我一起讨论学习!

加油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安宁#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值