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. 植入式Web前端开发方法

    上一篇,我讲述了植入式Web前端开发的基本情况,本篇就来探究其开发方法.以下假定CMS只能植入前端代码,并且需求规模是任意大小的. 代码形式 HTML代码是直接植入的毫无疑问,但除非植入的代码非常简短 ...

  2. freeswitch python模块

    概述 freeswitch支持多种语言的业务开发,包括C/C++,java,python,js,lua,Golang等等.freeswitch在使用python做业务开发时,有俩种接入方式,一种是ES ...

  3. ElasticSearch集成SpringData史上最全查询教程

    1.简单介绍 springboot 使用springdata操作es,ElasticsearchRepository使用QueryBuilder构造查询条件 2.集成es //maven集成 < ...

  4. Linux目录同步到阿里云OSS工具ossutil

    Linux目录同步到阿里云OSS工具ossutil 背景 ​ 最近公司服务用户激增,常规文件服务器不能满足需求,严重影响性能,决定将静态文件迁移到阿里云OSS,用来解决性能问题,提高用户体验.毕竟之前 ...

  5. Excel删除重复数据及用公式筛选重复项并标记颜色突出显示

    当表格记录比较多时,常常会有重复数据,而重复记录往往只希望保存一条,因此需要把多余的删除:在 Excel 中,删除重复数据有两种方法,一种是用"删除重复数据"删除,另一种是用&qu ...

  6. 进程代数CSP基础知识总结(Communicating sequencing process)

    进程代数(Process Algebra) Process Algebra 理论 提出者 理论名称 缩写 论文链接 简介 C. A. R. Hoare/Tony Hoare Communicating ...

  7. 如何写出安全又可靠的PHP脚本

    前言 咔咔目前所做的项目是一个saas系统,在开发新功能之后,需要为用户角色添加相应的权限,这时整个系统的所有用户都需要添加相应的权限. 因为以前系统的缺陷现在只能用脚本来处理这些工作,所以接下来咔咔 ...

  8. 判断手机浏览器还是微信浏览器(PHP)

    //判断是否 微信浏览器 function isWeixin1() { if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== fa ...

  9. mysql给数据库表里某个字段赋随机值

    UPDATE sxz_goods set sales_volume_base = round(rand() * 50) + 1 where sales_volume_base =0 ORDER BY ...

  10. 微信小程序自动化测试

    使用官方工具 使用webview测试方法,当2019年被微信封禁 使用native定位