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 ...
随机推荐
- 前端--jstree--异步加载数据
利用回调来处理服务器返回的数据, 默认只能解析固定格式的返回值 <div class=""> <div id="div-jstree"> ...
- Java XXE漏洞典型场景分析
本文首发于oppo安全应急响应中心: https://mp.weixin.qq.com/s?__biz=MzUyNzc4Mzk3MQ==&mid=2247485488&idx=1&am ...
- java版gRPC实战之四:客户端流
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 定时器及PWM
1 定时器 1.1 定时器分类 对于STM32来说,定时器可分为基本定时器.通用定时器.高级定时器三类,后者包括前者的全部功能.以stm32f1系列为例,TIM6和TIM7为基本定时器,TIM2~TI ...
- shell中的$0 $n $# $* $@ $? $$
$0当前脚本的文件名 $n传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $#传递给脚本或函数的参数个数. $*传递给脚本或函数的所有参数. $@传 ...
- Dockerfile 自动制作 Docker 镜像(三)—— 镜像的分层与 Dockerfile 的优化
Dockerfile 自动制作 Docker 镜像(三)-- 镜像的分层与 Dockerfile 的优化 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云 ...
- 洛谷P1449——后缀表达式(栈模拟)
题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3*(5–2)+7对应 ...
- Webpack的配置项
Webpack配置选项 经历了考研以后,接下来的时间里准备捡起来这些以前学的东西,并且继续向着前端的方向出发,给自己多一条路的选择.话不多说,直接开始. moudule.exports = { / ...
- 学习PHP中的国际化日期格式化操作
对于国际化功能来说,日期相关的格式化操作也是一块重头戏,毕竟不同的时区,不同的国家对于日期的表示方式都会有些不同.今天我们主要来学习的就是国际化地表示日期相关的信息内容. 日期格式化 首先就是最直接的 ...
- DS博客作业04--图
这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业04--图 这个作业的目标 学习图结构设计及相关算法 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1. ...