Mysql 查询语句

本文介绍了SQL查询的基本用法,包括ORDER BY子句实现的排序查询,COUNT、MAX、MIN、SUM和AVG等聚合函数在统计分析中的应用,以及WHERE与HAVING子句在分组查询中的区别。此外,还探讨了数据库设计中的外键约束,通过实例展示了如何使用外键关联解决数据冗余问题。
摘要由CSDN通过智能技术生成

DQL:查询语句

准备sql

CREATE TABLE student3 (
 id int, -- 编号
 name varchar(20), -- 姓名
 age int, -- 年龄
 sex varchar(5), -- 性别
 address varchar(100), -- 地址
 math int, -- 数学
 english int -- 英语
);

INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','
杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩
',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港
',99,99),(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);

1 排序查询

*语法 * order by 子句
* order by 排序字段1 排序方式1 , 排序字段2 ,排序方式2
-- 查询数学成绩升序排序(默认查询顺序就是ASC这里可以不写)
SELECT * FROM student3 ORDER BY math ASC;

-- 查询数学成绩降序排序
SELECT * FROM student3 ORDER BY math DESC;

-- 查询数学成绩按照升序排序,如果数学成绩一样就按英语成绩排序
SELECT * FROM student3 ORDER BY math ASC , english ASC ;

2.聚合函数

  • 将一列数据作为一个整体,进行纵向的计算
  • 1.count: 计算个数
  • 2.max:计算最大值
  • 3.min:计算最小值
  • 4.sum:计算和
  • 5.avg: 计算平均
    注意:所有的聚合函数都是排除的非空的字段
-- 计算总人数
SELECT COUNT(NAME)  FROM student3;

-- 计算数学的平均值
select avg(math) from student3;

-- 计算数学的最大值
SELECT max(math) FROM student3;

-- 计算数学的最小值
SELECT MIN(math) FROM student3;

-- 计算数学的总成绩
SELECT SUM(math) FROM student3;

-- 如果以英语成绩查询总的人数但是英语成绩有一列是空的所以需要判断
SELECT COUNT(IFNULL(english,0)) FROM student3;

分组查询

-- 按照性别分组,分别查询男女的数学平均分
SELECT sex, AVG(math) FROM student3 GROUP BY sex ;

-- 按照性别分组,分别查询男女的数学平均分,以及男女的人数
SELECT sex, AVG(math) ,count(id)  FROM student3 GROUP BY sex ;

-- 按照性别分组,分别查询男女的数学平均分,以及男女的人数,如果数学成绩大于70才参数分组
SELECT sex, AVG(math) ,count(id)  FROM student3 WHERE math>70 GROUP BY sex ;

-- 按照性别分组,分别查询男女的数学平均分,以及男女的人数,如果数学成绩大于70才参数分组,分组之后组员小于2个不参与分组
SELECT sex, AVG(math) ,count(id) as c FROM student3 WHERE math>70 GROUP BY sex HAVING c>2;

注意:分组之后,在select后 要么加分组的字段,要么加聚合函数

经典面试题
where 和having 的区别?

  • where在分组之前进行判定,如果不满足条件,就不参与分组
  • having在分组之后进行判定,如果不满足条件,就不会被查询出来
    注意:where之后不能跟聚合函数的判定,having之后可以跟聚合函数的判定

外键约束

准备sql

CREATE TABLE emp (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30),
age INT,
dep_name VARCHAR(30),
dep_location VARCHAR(30)
);
-- 添加数据
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('张三', 20, '研发部', '广州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('李四', 21, '研发部', '广州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('王五', 20, '研发部', '广州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('老王', 20, '销售部', '深圳');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('大王', 22, '销售部', '深圳');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('小王', 18, '销售部', '深圳');

在这里插入图片描述
数据有冗余,需要建立外键关联
决解方案,建立多张表与主表关联

-- 创建部门表(id,dep_name,dep_location)
-- 一方,主表
create table department(
id int primary key auto_increment,
dep_name varchar(20),
dep_location varchar(20)
);
-- 创建员工表(id,name,age,dep_id)
-- 多方,从表
create table employee(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int -- 外键对应主表的主键
)
-- 添加 2 个部门
insert into department values(null, '研发部','广州'),(null, '销售部', '深圳');
select * from department;
-- 添加员工,dep_id 表示员工所在的部门
INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);
select * from employee;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL是一种常用的关系型数据库管理系统,它支持使用SQL语言进行数据的查询、插入、更新和删除等操作。以下是一些常见的MySQL查询语句: 1. SELECT语句:用于从数据库中检索数据。 示例:SELECT * FROM 表名; 2. WHERE子句:用于在SELECT语句中添加条件筛选。 示例:SELECT * FROM 表名 WHERE 条件; 3. ORDER BY子句:用于对查询结果进行排序。 示例:SELECT * FROM 表名 ORDER BY 列名 ASC/DESC; 4. LIMIT子句:用于限制查询结果的数量。 示例:SELECT * FROM 表名 LIMIT 数量; 5. JOIN语句:用于在多个表之间建立关联。 示例:SELECT * FROM 表1 JOIN 表2 ON 表1.列 = 表2.列; 6. GROUP BY子句:用于对查询结果进行分组。 示例:SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名; 7. HAVING子句:用于在GROUP BY子句后添加条件筛选。 示例:SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名 HAVING 条件; 8. INSERT INTO语句:用于向数据库中插入新的数据。 示例:INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2); 9. UPDATE语句:用于更新数据库中的数据。 示例:UPDATE 表名 SET 列名 = 值 WHERE 条件; 10. DELETE FROM语句:用于从数据库中删除数据。 示例:DELETE FROM 表名 WHERE 条件; 这些只是MySQL查询语句的一部分,还有很多其他的语句和功能可以用于满足不同的需求。如果你有具体的问题或者需要更详细的介绍,请告诉我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值