【python MySQL 笔记】MySQL 查询

这篇博客详细介绍了MySQL的查询操作,包括数据准备、基本查询、条件查询(比较运算符、逻辑运算符、模糊查询、范围查询、空判断)、排序、聚合函数、分组、分页、连接查询(内连接、右连接、左连接)、自关联查询和子查询的使用。内容涵盖数据表的创建、数据插入、查询条件设定、数据排序、统计分析以及复杂的数据连接和嵌套查询。
摘要由CSDN通过智能技术生成

【python MySQL 笔记】MySQL 查询

目录

1.数据准备和基本查询

1.1. 数据准备

1.2.基本查询

2. 条件查询

2.1. 比较运算符

2.2. 逻辑运算符

2.3. 模糊查询

2.4. 范围查询

2.5. 空判断

3. 排序

4. 聚合函数

5. 分组

6. 分页

7. 连接查询

8. 自关联

9. 子查询

小结


 

1.数据准备和基本查询

1.1. 数据准备

创建数据库、两个数据表,用于语句的验证学习。

-- 数据的准备
    -- 创建一个数据库
    create database python_test charset=utf8;

    -- 使用一个数据库
    use python_test;

    -- 显示使用的当前数据是哪个?
    select database();

    -- 创建一个数据表
    -- students表
    create table students(
        id int unsigned primary key auto_increment not null,
        name varchar(20) default '',
        age tinyint unsigned default 0,
        height decimal(5,2),
        gender enum('男','女','中性','保密') default '保密',
        cls_id int unsigned default 0,
        is_delete bit default 0
    );

    -- classes表
    create table classes (
        id int unsigned auto_increment primary key not null,
        name varchar(30) not null
    );

 

向数据表中插入数据:

-- 向students表中插入数据
insert into students values
(0,'小明',18,180.00,2,1,0),
(0,'小月月',18,180.00,2,2,1),
(0,'彭于晏',29,185.00,1,1,0),
(0,'刘德华',59,175.00,1,2,1),
(0,'黄蓉',38,160.00,2,1,0),
(0,'凤姐',28,150.00,4,2,1),
(0,'王祖贤',18,172.00,2,1,1),
(0,'周杰伦',36,NULL,1,1,0),
(0,'程坤',27,181.00,1,2,0),
(0,'刘亦菲',25,166.00,2,2,0),
(0,'金星',33,162.00,3,3,1),
(0,'静香',12,180.00,2,4,0),
(0,'郭靖',12,170.00,1,4,0),
(0,'周杰',34,176.00,2,5,0);

-- 向classes表中插入数据
insert into classes values (0, "python_01班"), (0, "python_02班"), (0, "python_03班");

 

1.2.基本查询

-- 基本查询--------------------------------------

	-- 查询所有字段
	-- select * from 表名;
	select * from students;
	select * from classes;
	select id, name from classes;

	-- 查询 【指定字段】
	-- select 列1,列2,... from 表名;
	select name, age from students;
	
	-- 使用 as 【给字段起别名】
	-- select 字段 as 名字.... from 表名;
	select name as 姓名, age as 年龄 from students;

	-- select 表名.字段 .... from 表名;  可用于有多个表的时候
	select students.name, students.age from students;

	
	-- 可以通过 as 【给表起别名】
	-- select 别名.字段 .... from 表名 as 别名;
	select students.name, students.age from students;
	select s.name, s.age from students as s;
	-- 注:起了别名后,用原表名会查询失败,如下:
	-- 失败:select students.name, students.age from students as s;


	-- 消除重复行,【去重】,相同的结果只显示一次
	-- distinct 字段
	-- select distinct 列1,... from 表名;
	select distinct gender from students;

 

 

2. 条件查询

使用where子句对表中的数据筛选,结果为true的行会出现在结果集中

  • 语法如下:select * from 表名 where 条件;

where后面支持多种运算符,进行条件的处理

  • 比较运算符
  • 逻辑运算符
  • 模糊查询
  • 范围查询
  • 空判断

2.1. 比较运算符

-- 比较运算符-------------
	-- select .... from 表名 where .....
	-- >
	-- 查询大于18岁的信息
	select * from students where age>18;
	select id,name,gender from students where age>18;

	-- <
	-- 查询小于18岁的信息
	select * from students where age<18;

	-- >=
	-- <=
	-- 查询小于或者等于18岁的信息
	select * from students where age<=18;

	-- =
	-- 查询年龄为18岁的所有学生的名字
	select * from students where age=18;

	-- != 或者 <> 不等于

 

2.2. 逻辑运算符

-- 逻辑运算符-------------
	-- 与【and】
	-- 18到28之间的所以学生信息
	select * from students where age>18 and age<28;
	-- 失败select * from students where age>18 and <28;


	-- 18岁以上的女性
	select * from students where age>18 and gender="女";
	select * from students where age>18 and gender=2;


	-- 或【or】
	-- 18以上或者身高查过180(包含)以上
	select * from students where age>18 or height>=180;


	-- 非【not】
	-- 不在 18岁以上的女性 这个范围内的信息
	-- select * from students where not age>18 and gender=2;
	select * from students where not (age>18 and gender=2);

	-- 年龄不是小于或者等于18 并且是女性
	select * from students where (not age<=18) and gender=2;

 

2.3. 模糊查询

-- 模糊查询----------------
	-- 【like】
	-- % 表示0个或者多个字符
	-- _ 表示1个字符
	
	-- 查询姓名中 以 "小" 开始的名字
	-- select name from students where name="小"; --只能查出name="小"的
	select name from students where name like "小%";

	-- 查询姓名中 包含 "小" 的所有名字
	select name from students where name like "%小%";

	-- 查询有2个字的名字(用两个下划线替代)
	select name from students where name like "__";

	-- 查询有3个字的名字
	select name from students where name like "___";

	-- 查询至少有2个字的名字
	select name from students where name like "__%";


	-- 【rlike】 正则表达式
	
	-- 查询以 周开始的姓名
	select name from students where name rlike "^周.*";

	-- 查询以 周开始、伦结尾的姓名
	select name from students where name rlike "^周.*伦$";

 

2.4. 范围查询

-- 范围查询-----------------
	-- 【in】(1, 3, 8)表示在一个非连续的范围内
	-- 查询 年龄为18、34的姓名
	select name,age from students where age=18 or age=34;
	select name,age from students where age=18 or age=34 or age=12;
	select name,age from students where age in (12, 18, 34);


	
	-- 【not in】 不非连续的范围之内
	-- 年龄不是 12、18、34岁之间的信息
	select name,age from students where age not in (12, 18, 34);


	-- 【 between ... and ... 】表示在一个连续的范围内
	-- 查询 年龄在18到34之间的的信息
	select name, age from students where age between 18 and 34;

	
	-- 【not between ... and ...】表示不在一个连续的范围内
	-- 查询 年龄不在在18到34之间的的信息
	select * from students where age not between 18 and 34;
	select * from students where not age between 18 and 34;
	-- 失败:select * from students where age not (between 18 and 34);

 

2.5. 空判断

-- null 空判断----------------------
		
	-- 注意:null与''是不同的
	-- 判空【 is null 】
	-- 查询身高为空的信息
	select * from students where height is null;
	select * from students where height is NULL;

	-- 判非空【 is not null 】
	select * from students where height is not null;

 

3. 排序

为了方便查看数据,可以对数据进行排序

语法select * from 表名 order by 列1 asc|desc [,列2 asc|desc,...]

说明

  • 将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推
  • 默认按照列值从小到大排列(asc)
  • asc从小到大排列,即升序
  • desc从大到小排序,即降序
-- 【 order by 】 字段
-- 【 asc 】从小到大排列,即升序
-- 【 desc 】从大到小排序,即降序

-- 查询年龄在18到34岁之间的男性,按照年龄从小到到排序
-- 默认排序
select * from students where (age between 18 and 34) and gender=1;
-- 按照年龄排序
select * from students where (age between 18 and 34) and gender=1 order by age;
select * from students where (age bet
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值