MySQL:基础语法-2
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
语句, 可以省略 innerselect 字段名 from 左表 [inner] join 右表 on 条件;
总结内连接查询步骤
- 确定查询哪些表
- 确定表连接的条件
- 确定查询的条件
- 确定查询的字段
外连接
左外连接
使用
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的更多相关文章
- MYSQL基础语法的使用
喜欢的朋友可以关注下,粉丝也缺. MYSQL介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之 ...
- MYSQL从入门到放弃系列:mysql基础语法
Mysql基本语法 启动MySQL net start mysql 连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码 跳过权限验证登录MySQL mysqld --ski ...
- mysql基础语法之(全文索引)
1.概要 InnoDB引擎对FULLTEXT索引的支持是MySQL5.6新引入的特性,之前只有MyISAM引擎支持FULLTEXT索引.对于FULLTEXT索引的内容可以使用MATCH()…AGAIN ...
- Mysql 基础语法1
MySQL的软件架构 1.开启MySQL服务器:以windows服务的形式开启,在cmd下net startmysql|net stop mysql,在cmd下使用mysqld –default-fi ...
- 一. MySQL基础语法
1. 案例库表 2. DQL语言(数据查询) 2.1 基础查询 -- 进入指定的库 USE myemployees; DESC employees; -- 使用SELECT查询字段 # 1.查询表中的 ...
- mysql基础语法及拓展到web中的sql注入
本来是想写下javaweb的mvc(tomcat, spring, mysql)的搭建, 昨天搭到凌晨3点, 谁知道jdbcTemplate的jar包不好使, 想死的心都有了, 想想还是休息一下, ...
- mysql 基础语法
以下为自己学习mysql 的一些笔记,以方便查询 目录 一. ALTER的 语法 二. 表的完整性约束 三. 索引的操作(mysql 数据库支持至少 16 个索引) 四. 视图的操作 五. 触发器的操 ...
- MySQL基础语法命令
1. 建表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 通用语法: CREATE TABLE table_name (column_name column_type); 实例: ...
- Mysql基础语法-建库-建表(增、删、改、查、表关联及子查询)
前言:MySQL是一个数据库管理系统,也是一个关系数据库.它是由Oracle支持的开源软件,MySQL可以在各种平台上运行UNIX,Linux,Windows等.可以将其安装在服务器甚至桌面系统上. ...
- Mysql基础语法
mysql SELECT VERSION(), CURRENT_DATE, now();select user(); create database pets;show databases; use ...
随机推荐
- K8s 系列(三) - 如何配置 etcd https 证书?
在 K8s 中,kube-apiserver 使用 etcd 对 REST object 资源进行持久化存储,本文介绍如何配置生成自签 https 证书,搭建 etcd 集群给 apiserver 使 ...
- NOIP模拟14「队长快跑·影魔·抛硬币」
T1:队长快跑 基本思路: 离散化·DP·数据结构优化DP 这三个我都没想到....气死. 定义状态数组:\(c[i][j]\)表示在i时最小的a值是j时可以摧毁的最多的水晶数. 那么 ...
- Identity角色管理三(编辑角色)
因只有角色名能修改故继续使用创建角色的视图模型 using System.ComponentModel; using System.ComponentModel.DataAnnotations; na ...
- GIT:创建、查看分支命令(git branch -vv)
在开发过程中一般会用到Git进行版本管理,创建查看分支并与远程仓库交互是非常常见的操作. branch分支 是指在开发主线中分离出来的,做进一步开发而不影响到原来的主线. Git存储的不是一系列的更改 ...
- python库--pandas--DataFrame
转换 索引,迭代 运算符 功能应用,分组及窗口 计算/描述统计 重新索引/选择/标签操作 缺失数据处理 形状变换/排序/转置 组合/加入/合并 时间序列相关 ...
- Tars | 第0篇 腾讯犀牛鸟开源人才培养计划Tars实战笔记目录
腾讯犀牛鸟开源人才培养计划Tars实战笔记目录 前言 在2021年夏,笔者参加了腾讯首届开源人才培养计划的Tars项目,负责Subset流量管理规则的Java语言JDK实现.其中写作几篇开源实战笔记, ...
- 集合遍历数组三种常用方式(Collecton和Map)
Collection集合遍历数组的三种方式: 迭代器 foreach(增强for循环) JDK1.8之后的新技术Lambda 迭代器: 方法:public Iterator inerator():获取 ...
- PHP操作用户提交内容时需要注意的危险函数
对于我们的程序开发来说,用户的输入是解决安全性问题的第一大入口.为什么这么说呢?不管是SQL注入.XSS还是文件上传漏洞,全部都和用户提交的输入参数有关.今天我们不讲这些问题,我们主要探讨下面对用户的 ...
- Django边学边记—新手Django建项目各流程细节
一.准备虚拟环境 1)安装 virtualenv pip install virtualenv 2)virtualenvwrapper pip install virtualenvwrapper-wi ...
- 第三方api接口
做为一个软件测试工程师,你要学习接口测试,需要练习,那么就要有调用的api,可以参考以下的文章. 国内7款API供应平台功能对比及详细介绍 https://blog.csdn.net/ishxiao/ ...