1、排序(order by)

select *

from stu

order by age; -- 默认升序

升序 ASC 降序DESC

-- DESC 具有查看表的结构的功能

desc stu; 不同于oracle,可以在查询窗口使用,oracle只能在命令窗口使用

例题:

按年龄升序
SELECT *
FROM stu
ORDER BY age ASC;
按年龄降序
SELECT *
FROM stu
ORDER BY age DESC;
按奖金降序,奖金相同按id升序
SELECT *
FROM stu
ORDER BY tuition DESC,sid ASC;

按第六列降序排序(相对位置排序)

select *

from emp

order by 6 desc;

2、常用的聚合函数

函数:做某些事情的方法

聚合:把多个值变成一个值

count(): 计数,不计算null值,统计指定列不为NULL的记录行数;

max(): 求最大值,若为字符串类型,按字符串排序运算

min(); 求最小值,若为字符串类型,按字符串排序运算

sum(): 求和,不是数值类型则为0

avg(): 求平均,不是数值类型则为0

例题:

-- 当需要纵向统计时可以使用COUNT(),查询emp表中记录数:
SELECT COUNT(*) '记录数'
FROM emp;

-- 查询emp表中有佣金的人数:
SELECT COUNT(*) '有佣金的人数'
FROM emp
WHERE comm IS NOT NULL;

SELECT COUNT(comm) '有佣金的人数'  -- 处理非空数据
FROM emp;

-- 查询emp表中月薪大于2500的人数:
SELECT count(*)
FROM emp
WHERE sal>2500;

-- 统计月薪与佣金之和大于2500元的人数:
SELECT COUNT(*)
FROM emp
WHERE sal+IFNULL(comm,0) > 2500;

-- 查询有佣金的人数以及有领导的人数:
SELECT COUNT(comm) '有佣金的人数', COUNT(mgr) '有领导的人数'
FROM emp

-- 需要纵向求和时使用sum()函数。
-- 查询所有雇员月薪和:
SELECT SUM(sal)
FROM emp;

-- 查询所有雇员月薪和,以及所有雇员佣金和:
SELECT SUM(sal),SUM(comm)
FROM emp;

-- 查询所有雇员月薪+佣金和:
SELECT SUM(sal+IFNULL(comm,0))
FROM emp;

SELECT SUM(sal) + SUM(COMM)
FROM emp;

-- 统计所有员工平均工资:
SELECT AVG(sal) '平均工资'  -- 有工资的平均工资,假如没工资就不算进去
FROM emp;

SELECT SUM(sal)/COUNT(*)    -- 具体业务具体分析
FROM emp;

-- 查询最高工资和最低工资:
SELECT MAX(sal) '最高工资', MIN(sal) '最低工资'
FROM emp;

SELECT COUNT(0)
FROM dual;  -- 1

select sum(sname) from stu;  -- 0,字符串求和为0

3、分组

-- 分组查询group by

-- select 后面只能写聚合函数和分组的参照列

例题:

查询每个部门的部门编号和每个部门的工资和:

SELECT deptno, SUM(sal) FROM emp GROUP BY deptno;

查询每个部门的部门编号以及每个部门的人数:

SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;

查询每个部门的部门编号以及每个部门工资大于1500的人数:

SELECT deptno,COUNT(*) FROM emp WHERE sal>1500 GROUP BY deptno;

having

having:跟where一样都是进行过滤,区别在于where在分组前处理分组前的条件

having在分组后处理分组后的条件

where 后面不能使用聚合函数 而having可以

例题:

查询工资总和大于9000的部门编号以及工资和:

SELECT deptno, SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal) > 9000;

4、分页查询
-- LIMIT num1(从哪里开始),num2(展示多少数据)
SELECT *
FROM emp
LIMIT 5,5;  -- 1006-1010

-- LIMIT NUM: 默认从0开始查看num条记录
SELECT *
FROM emp
LIMIT 5

-------------------------------------------------------------------------------------------------------------

5、union

CREATE TABLE t1(
    a INT,
    b VARCHAR(10)
);

CREATE TABLE t2(
    c INT,
    d VARCHAR(10)
);

INSERT INTO t1 VALUES
(1,'a'),(2,'b'),(3,'c'),(4,'d');

INSERT INTO t2 VALUES
(4,'d'),(5,'e'),(6,'g');

-- UNION合并结果集
-- 第二句的结果去掉列名拼在第一条语句的下面
-- 默认去除重复的记录,不排序

-- 要求两条语句列数相同并且对应的数据类型一致

例题:
SELECT *
FROM t1
UNION
SELECT *
FROM t2;

-- UNION ALL 合并结果集不去重
SELECT * FROM t1
UNION ALL
SELECT * FROM t2;

6、连接查询(多表查询)

-- 连接查询
SELECT *
FROM t1,t2;  -- 产生大量笛卡尔积

-- 等值连接
-- 一般是通过主外键相等的关系消除笛卡尔积

-- 主键:一条记录的唯一身份标识(1.不能为空 2.不能重复)
-- 外键:跟另外一张表建立联系列(一定是另外一张表的主键)

SELECT *
FROM emp,dept
WHERE emp.deptno=dept.deptno;

-- 内连接
SELECT *
FROM emp INNER JOIN dept
ON emp.deptno = dept.deptno;

-- INNER 可以省略

-- 等值连接和内连接不满足等值条件的不会显示出来(被过滤掉了)

-- 外连接
-- 主表不满足条件的会显示出来,从表用null值匹配,从表不满足条件的不会显示出来
-- 左外连接 LEFT JOIN ... ON
SELECT *
FROM emp LEFT OUT JOIN dept
ON emp.deptno = dept.deptno;

-- 关键字outer可以省略

-- 右外连接
SELECT *
FROM emp RIGHT OUTER JOIN dept
ON emp.deptno = dept.deptno;

-- 自然连接
-- 不需要手动指定等值关系,系统会根据同名的列进行等值匹配,
-- 同名列合并,居左显示(同名列,主表内容,从表内容)

-- 自然连接内的内连接
SELECT * FROM emp NATURAL JOIN dept;
-- 自然连接内的左连接
SELECT * FROM emp NATURAL LEFT JOIN dept;
-- 自然连接内的右连接
SELECT * FROM emp NATURAL RIGHT JOIN dept;

-- n张表至少需要n-1个连接

-- 子查询
-- 子查询-单行单列
1. 工资高于甘宁的员工。
SELECT ename
FROM emp
WHERE sal > (SELECT sal FROM emp WHERE ename = '甘宁');

-- 子查询-多行单列:
2.工资高于30部门所有人工资   -- ALL所有 ANY任意(比其中一个大)
SELECT ename,sal
FROM emp
WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30)

-- 子查询-单行多列:
查询工作和工资与殷天正完全相同的员工信息分析:
SELECT *
FROM emp
WHERE (job,sal)=(SELECT job, sal FROM emp WHERE ename='殷天正')
AND ename!='殷天正';

-- 子查询-多行多列(1)
查询员工编号为1006的员工名称、员工工资、部门名称、部门地址

SELECT e.ename,e.sal,d.dname, d.loc
FROM (SELECT empno,ename,sal,deptno FROM emp) e JOIN dept d on e.deptno=d.deptno
WHERE e.empno = 1006

7、 完整性约束-主键
-- 主键:一条记录的唯一身份标识(1.不能为空 2.不能重复)
-- 创建表的时候指定主键
CREATE TABLE test2(
    sid INT PRIMARY KEY,
    sname VARCHAR(20)
);

-- 表已经创建则通过修改表去添加主键
ALTER TABLE test1 ADD PRIMARY KEY(sid);

-- 删除主键
-- 非空属性还是存在 
ALTER TABLE test2 DROP PRIMARY KEY;

-- 主键自增 auto_increment 根据最后一个数字开始自增长
-- oracle无此特性, oracle引入序列的对象
CREATE TABLE test3(
    sid INT PRIMARY KEY auto_increment,
    sname VARCHAR(10)
);
SELECT * FROM test3;
-- 去除自增属性
-- CHANGE一定要改列的名字
ALTER TABLE test3 CHANGE sid sid INT;  -- 后面这个sid可以改名  id
 
-- MODIFY 不用改名字
ALTER TABLE test3 MODIFY sid INT;

-- UNION 唯一约束
-- 非空约束 NOT NULL

CREATE TABLE test4(
    sid INT,
    sname VARCHAR(10) UNIQUE,
    age VARCHAR(10) NOT NULL
);

-- 外键约束
-- 将t_section中的master_id列设置成关联t_user 表uid 的外键

创建t_section表,指定sid为主键列,u_id为相对t_user表的uid列的外键:
CREATE TABLE t_section(
        sid    INT PRIMARY KEY AUTO_INCREMENT,
        sname    VARCHAR(30),
        u_id    INT,
        CONSTRAINT fk_t_user FOREIGN KEY(u_id) REFERENCES t_user(uid)
);
修改t_section表,指定u_id为相对t_user表的uid列的外键:
ALTER TABLE t_section ADD CONSTRAINT fk_t_user FOREIGN KEY(u_id) REFERENCES t_user(uid);
修改t_section表,删除u_id的外键约束:
ALTER TABLE t_section DROP FOREIGN KEY fk_t_user;

mysql数据库(排序,聚合函数,分组,分页查询,union,连接查询,主键外键)相关推荐

  1. MySQL数据库——day26 数据库安装,卸载,概念,msq的介绍,安装,连接,DDL,DML,DQL模糊查询,字段控制(别名和运算),排序,聚合函数,分组查询(where和having),分页查询

    学到mysql的时候非常的快,感觉前面的没有很巩固,还是要复习前面的博客 常见的数据库 MySQL , Oracle , SQL Server , SQLite , DB2 , - SQL Serve ...

  2. MySQL数据库-笔记06【SQL的4种连接查询、事务】

    学习地址:一天学会 MySQL 数据库      MySQL安装教程      MySQL专栏

  3. MySQL学习笔记(四)——分组函数,分组查询,连接查询

    MySQL学习笔记(四)--分组函数,分组查询,连接查询 作者:就叫易易好了 日期:2020/11/18 一.分组函数 功能:用作统计使用,又称为聚合函数或统计函数 分类: sum函数 avg函数 m ...

  4. mysql 连接 分组_MySQL 基础 (四) 分组查询及连接查询

    MySQL 基础 (四) 分组查询及连接查询 MySQL 基础(四) 进阶 5 分组查询 语法: SELECT 分组函数, 列(要求出现在 group by 的后面) FROM 表 [where 筛选 ...

  5. MySQL || 结果排序--聚集函数讲解

    MySQL 结果排序-- 聚集函数 一.环境准备 二.查询结果排序 三.查询的分组与汇总 3.1.查一下 学生们平均年龄 3.2.查一下总人数是多少 3.3.查一下每个年龄有多少人 3.4.查出最大年 ...

  6. mysql 嵌套查询性能_MySQL数据库之嵌套查询与连接查询的性能详解

    本文主要向大家介绍了MySQL数据库之嵌套查询与连接查询的性能详解 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 嵌套查询与连接查询的性能:连接查询一般较快:子查询很难被优化. ...

  7. MySQL 案例实战--MySQL数据库 存储过程 存储函数

    MySQL数据库 存储过程 & 存储函数 前言 一.什么是存储过程 & 存储函数 二.存储过程的创建和调用 三.存储函数的创建和调用 前言 本环境是基于 Centos 7.8 系统构建 ...

  8. mysql数据库 常用函数_《MySQL数据库》常用函数整理

    原标题:<MySQL数据库>常用函数整理 以下内容,是我整理出来的比较常用的字符串函数,数值函数,日期函数. 第一类:字符串函数 1.conv(n,from_base,to_base):对 ...

  9. mysql的查询、子查询及连接查询(商城查询常用)

    mysql的查询.子查询及连接查询 一.mysql查询的五种子句 where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 1.whe ...

最新文章

  1. python与excel做数据可视化-python操作Excel、读取CVS与数据可视化
  2. JAVA删除临时文件
  3. pom文件报错_maven-resources-plugin修改了我的文件
  4. python仿真智能驾驶_基于Python的3R机器人运动仿真
  5. git 命令详解_再次学习Git版本控制工具
  6. 温习了一下java线程状态方面的知识总结一
  7. WGCNA分析,简单全面的最新教程(可以在线做了)
  8. vrp 节约算法 c++_滴滴技术:浅谈滴滴派单算法
  9. 深入探讨运维驱动的可监控性设计
  10. C语言求1+2!+3!+...+20!
  11. 计算机网络英文缩写汇总,计算机网络名词英文缩写解释大全
  12. PS透明婚纱抠图(超详细)
  13. 体育用品商城小程序开发功能
  14. 【历史上的今天】9 月 2 日:互联网的“诞生日”;三星逐步跌落神坛;世界上第一个 ATM 自动取款机
  15. c语言共有几种运算符_C语言的运算符和表达式有哪些
  16. allow control allow origin_热分析/红外光谱联用的数据分析方法 第7部分 在Origin软件中三维红外光谱图的作图方法...
  17. Linux篇面试宝典
  18. Android手机修改hosts文件
  19. Linux-SSH反向连接(内网穿透,打洞)
  20. RoadFlow ASP.NET Core工作流引擎IIS部署

热门文章

  1. Linux系统之dd命令详解
  2. 基于python3 pyppeteer的漫画爬虫及下载项目PiaoManga
  3. Python 如何添加注释
  4. 如果x≥0,则,否则。编写程序,输入一个整数x,计算后输出对应的y值。
  5. Android护眼模式(argb)
  6. “可用不可见”: 新技术开辟数据安全共享新蓝海
  7. Sql 查询近几天、近几个月数据没有补0,当月天数
  8. Codeforces J. A Simple Task(多棵线段树)
  9. win10怎样重置电脑
  10. 计算机制作灯笼,coreldraw简单制作新年快乐的灯笼