MySQL:基础语法-2

记录一下 MySQL 基础的一些语法,便于查询,该部分内容主要是参考:bilibili 上 黑马程序员 的课程而做的笔记,由于时间有点久了,课程地址忘记了

上文MySQL:基础语法-1主要记录了 DDL、DML、DCL 相关操作,该文主要记录一下 DQL 内容

表与表之间的关系

表与表之间的三种关系 说明
一对多 最常用的关系:部门和员工
多对多 学生选课表 和 学生表, 一门课程可以有多个学生选择,一个学生选择多门课程
一对一 相对使用比较少:员工表 简历表, 公民表 护照表

一对多

一对多( 1:n) 例如:班级和学生,部门和员工,客户和订单,分类和商品

一对多建表原则: 在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键

多对多

多对多( m:n) 例如:老师和学生,学生和课程,用户和角色

多对多关系建表原则: 需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键

一对一

一对一( 1:1) 在实际的开发中应用不多.因为一对一可以创建成一张表

两种建表原则:

一对一的建表原则 说明
外键唯一 主表的主键和从表的外键(唯一),形成主外键关系,外键唯一 UNIQUE
外键是主键 主表的主键和从表的主键,形成主外键关系

数据查询语言:DQL

基本查询

  • 查询表所有行和列的数据:select * from 表名;

  • 查询指定列:select 字段名1, 字段名2, 字段名3, ... from 表名;

  • 指定列的别名进行查询:

    select 字段名1 as 别名1, 字段名2 as 别名1, 字段名3 as 别名1, ... from 表名 as 表别名;

  • 清除重复值:

    select distinct 字段名 from 表名;

  • 查询结果参与运算:

    • 某列数据和固定值运算

      select 列名1+固定值 from 表名;

    • 某列数据和固定值运算

      select 列名1+列名2 from 表名;

    注意: 参与运算的必须是数值类型

条件查询

条件查询的语法

select 字段名 from 表名 where 条件;

流程:取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回

比较运算符

比较运算符 说明
>、 <、 <=、 >=、 =、 <> <>在 SQL 中表示不等于,在 mysql 中也可以使用!= 没有==
between...and 在一个范围之内,如:
between 100 and 200 相当于条件在 100 到 200 之间,包头又包尾
in(集合) 集合表示多个值,使用逗号分隔
like '张%' 模糊查询
is null 查询某一列为 null 的值,注:不能写 =NULL

逻辑运算符

逻辑运算符 说明
and 、&& 与, SQL 中建议使用前者,后者并不通用。
or 、 ||
not 、 !

进一步:

  • in :select 字段名 from 表名 where 字段 in (数据1, 数据2, ...)

    里面的每个数据都会作为一次条件,只要满足条件的就会显示

  • 范围查询:select 字段名 from 表名 where 字段 between 数据1 in 数据2;

  • 模糊查询:select 字段名 from 表名 where 字段 like '通配符匹配串';

    通配符 说明
    % 匹配任意多个字符串
    _ 匹配一个字符

复杂查询

排序

select 字段名 from 表名 where 字段=值 order by 字段名 [asc|desc]

  • ASC: 升序,默认值
  • DESC: 降序

单列排序:只按某一个字段进行排序,单列排序

组合排序:同时对多个字段进行排序,如果第 1 个字段相等,则按第 2 个字段排序,依次类推

  • select 字段名 from 表名 where 字段=值 order by 字段1 [asc|desc], 字段2 [asc|desc]

聚合函数

使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值

SQL 中的聚合函数 作用
max(列名) 求这一列的最大值
min(列名) 求这一列的最小值
avg(列名) 求这一列的平均值
count(列名) 统计这一列有多少条记录
sum(列名) 对这一列求总和

select 聚合函数(列名) from 表名;

聚合函数对于 NULL 的记录不会统计,但如果需要把 NULL也统计进去

ifnull(列名,默认值); --如果列名不为空,返回这列的值。如果为 NULL,则返回默认值。

eg:select count(ifnull(id,0)) from student;

分组

分组查询是指使用 group by 语句对查询信息进行分组,相同数据作为一组

select 字段1, 字段2, ... from 表名 group by 分组字段 [having 条件];

group by 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。

分组的目的就是为了统计, 一般分组会跟聚合函数一起使用

注意:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的

对分组查询的结果再进行过滤:需要使用 having 而不是 where

having 与 where 的区别

子名 作用
where 子句 1. 对查询结果进行分组前, 将不符合 where 条件的行去掉, 即在分组之前过滤数据, 即先过滤再分组;
2. where 后面不可以使用聚合函数
having 子句 1. having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤
2. having 后面可以使用聚合函数

限制

limit 是限制的意思,所以 limit 的作用就是限制查询记录的条数

limit 语法格式:limit offset,length;

  • offset:起始行数,从 0 开始计数,如果省略,默认就是 0

    如果第一个参数是 0 可以省略不写

  • length: 返回的行数

表连接查询

表连接查询即多表查询:

多表查询的分类:

  • 内连接

    • 隐示内连接
    • 显示内连接
  • 外连接
    • 左外连接
    • 右外连接

内连接

用左边表的记录去匹配右边表的记录,如果符合条件的则显示。如:从表.外键=主表.主键

  • 隐式内连接

    看不到 join关键字,条件使用 where 指定

    select 字段名 from 左表, 右表 where 条件;

  • 显式内连接

    使用 inner join ... on 语句, 可以省略 inner

    select 字段名 from 左表 [inner] join 右表 on 条件;

总结内连接查询步骤

  1. 确定查询哪些表
  2. 确定表连接的条件
  3. 确定查询的条件
  4. 确定查询的字段

外连接

  • 左外连接

    使用 left outer join ... on, outer 可以省略

    select 字段名 from 左表 left [outer] join 右表 on 条件;

    用左边表的记录去匹配右边表的记录,如果符合条件的则显示;否则,显示 NULL

    可以理解为:在内连接的基础上保证左表的数据全部显示

  • 右外连接

    使用 right outer join ... on, outer 可以省略

    select 字段名 from 左表 right [outer] join 右表 on 条件;

    用右边表的记录去匹配边左表的记录,如果符合条件的则显示;否则,显示 NULL

    可以理解为:在内连接的基础上保证右表的数据全部显示

子查询

概念

一个查询的结果做为另一个查询的条件;

一个查询的结果做为另一个查询的条件;

子查询要使用括号

三种情况

  • 子查询的结果是单行单列
  • 子查询的结果是多行单列
  • 子查询的结果是多行多列

子查询的结果是单行单列

子查询结果只要是单行单列, 肯定在 where 后面作为条件, 父查询使用:比较运算符, 如: > 、 <、 <>、 = 等

select 查询字段 from 表 where 字段=(子查询结果);

子查询结果是多行单列的时候

子查询结果是单例多行,结果集类似于一个数组,父查询使用 in 运算符

select 查询字段 from 表 where 字段 in (子查询结果);

子查询的结果是多行多列

子查询结果只要是多列,肯定在 from 后面作为表

select 查询字段 from (子查询结果) as 表别名 where 条件;

子查询作为表需要取别名,否则这张表没有名称则无法访问表中的字段

子查询小结

  • 子查询结果只要是单列,则在 WHERE 后面作为条件
  • 子查询结果只要是多列,则在 FROM 后面作为表进行二次查询

MySQL:基础语法-2的更多相关文章

  1. MYSQL基础语法的使用

    喜欢的朋友可以关注下,粉丝也缺. MYSQL介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之 ...

  2. MYSQL从入门到放弃系列:mysql基础语法

    Mysql基本语法 启动MySQL net start mysql 连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码 跳过权限验证登录MySQL mysqld --ski ...

  3. mysql基础语法之(全文索引)

    1.概要 InnoDB引擎对FULLTEXT索引的支持是MySQL5.6新引入的特性,之前只有MyISAM引擎支持FULLTEXT索引.对于FULLTEXT索引的内容可以使用MATCH()…AGAIN ...

  4. Mysql 基础语法1

    MySQL的软件架构 1.开启MySQL服务器:以windows服务的形式开启,在cmd下net startmysql|net stop mysql,在cmd下使用mysqld –default-fi ...

  5. 一. MySQL基础语法

    1. 案例库表 2. DQL语言(数据查询) 2.1 基础查询 -- 进入指定的库 USE myemployees; DESC employees; -- 使用SELECT查询字段 # 1.查询表中的 ...

  6. mysql基础语法及拓展到web中的sql注入

    本来是想写下javaweb的mvc(tomcat, spring, mysql)的搭建,  昨天搭到凌晨3点, 谁知道jdbcTemplate的jar包不好使, 想死的心都有了, 想想还是休息一下, ...

  7. mysql 基础语法

    以下为自己学习mysql 的一些笔记,以方便查询 目录 一. ALTER的 语法 二. 表的完整性约束 三. 索引的操作(mysql 数据库支持至少 16 个索引) 四. 视图的操作 五. 触发器的操 ...

  8. MySQL基础语法命令

    1. 建表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 通用语法: CREATE TABLE table_name (column_name column_type); 实例: ...

  9. Mysql基础语法-建库-建表(增、删、改、查、表关联及子查询)

    前言:MySQL是一个数据库管理系统,也是一个关系数据库.它是由Oracle支持的开源软件,MySQL可以在各种平台上运行UNIX,Linux,Windows等.可以将其安装在服务器甚至桌面系统上. ...

  10. Mysql基础语法

    mysql SELECT VERSION(), CURRENT_DATE, now();select user(); create database pets;show databases; use ...

随机推荐

  1. 前端--jstree--异步加载数据

    利用回调来处理服务器返回的数据, 默认只能解析固定格式的返回值 <div class=""> <div id="div-jstree"> ...

  2. Java XXE漏洞典型场景分析

    本文首发于oppo安全应急响应中心: https://mp.weixin.qq.com/s?__biz=MzUyNzc4Mzk3MQ==&mid=2247485488&idx=1&am ...

  3. java版gRPC实战之四:客户端流

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  4. 定时器及PWM

    1 定时器 1.1 定时器分类 对于STM32来说,定时器可分为基本定时器.通用定时器.高级定时器三类,后者包括前者的全部功能.以stm32f1系列为例,TIM6和TIM7为基本定时器,TIM2~TI ...

  5. shell中的$0 $n $# $* $@ $? $$

    $0当前脚本的文件名 $n传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $#传递给脚本或函数的参数个数. $*传递给脚本或函数的所有参数. $@传 ...

  6. Dockerfile 自动制作 Docker 镜像(三)—— 镜像的分层与 Dockerfile 的优化

    Dockerfile 自动制作 Docker 镜像(三)-- 镜像的分层与 Dockerfile 的优化 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云 ...

  7. 洛谷P1449——后缀表达式(栈模拟)

    题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3*(5–2)+7对应 ...

  8. Webpack的配置项

    Webpack配置选项 ​ 经历了考研以后,接下来的时间里准备捡起来这些以前学的东西,并且继续向着前端的方向出发,给自己多一条路的选择.话不多说,直接开始. moudule.exports = { / ...

  9. 学习PHP中的国际化日期格式化操作

    对于国际化功能来说,日期相关的格式化操作也是一块重头戏,毕竟不同的时区,不同的国家对于日期的表示方式都会有些不同.今天我们主要来学习的就是国际化地表示日期相关的信息内容. 日期格式化 首先就是最直接的 ...

  10. DS博客作业04--图

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业04--图 这个作业的目标 学习图结构设计及相关算法 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1. ...