mysql between and 包含边界吗_MySQL | SQL语法(一)
本篇使用的数据库管理工具是Navicat for MySQL,回复公众号【SQL】可获取本篇使用的3个数据源表。
本篇以3个数据源表table1,table2,table3为例,简单举例陈述SQL中数据查询语言的使用。
01DB、DBMS与SQL
DB(Database),即数据库,相当于一个仓库,用于有组织地存储数据。
DBMS(Database Management System),即数据库管理系统,用于操作和管理数据库。主要分为两大类:RDBMS、NoSQL。
RDBMS:关系型数据库管理系统,主要实现对结构化数据的管理,为二元关系模型。如Oracle、MySQL、SQL Server、DB2等。
NoSQL:非关系型数据库管理系统,弥补关系型数据库管理系统的不足。如Redis、MongoDB等。
SQL(Structured Query Language),即结构化查询语言,是关系型数据的一门通用语言,用于实现对数据库的查询、更新和管理。其语言主要分为四个部分:DDL、DML、DCL和DQL。
DDL(Data Definition Language),数据定义语言,它用来定义我们的数据库对象,包括数据库、数据表和列。通过使用DDL,我们可以创建、删除和修改数据库及表结构。
DML(Data Manipulation Language),数据操作语言,我们用它操作和数据库相关的记录,比如增加、删除、修改数据表中的数据。
DCL(Data Control Language),数据控制语言,我们用它来定义访问权限和安全级别。
DQL(Data Query Language),数据查询语言,我们绝大多数情况下都是在和查询打交道,因此学会编写正确且高效的查询语句非常重要。
三者的关系是:数据库管理系统(DBMS)使用SQL语句管理数据库(DB)。注:所有的DBMS使用的SQL语句基本相同,只存在个别不兼容。02DQL:数据查询语言1.查询表中所有的数据select * from table_name
select * from table1;
Navicat for MySQL运行结果如下:*代表所有列,table_name代表表的名称,结果显示table1中全部35条数据。2.查询表中指定字段的数据select column1,column2,... from table_name
select 股票简称,现价 from table1;
Navicat for MySQL运行结果如下:3.按条件查询表中的数据(单一条件)select * from table_name where column 运算符 value
select * from table1 where ROE均值 >30;
Navicat for MySQL运行结果如下:4.按条件查询表中的数据(组合and)select * from table_name where column1 运算符 value1 and column2 运算符 value2
select * from table1 where ROE均值 > 30 and 毛利率均值 >40 and 净利润现金含量均值 > 100 and 资产负债率均值 <60 ;
Navicat for MySQL运行结果如下:要全部符合and连接的条件才会被筛选出来,结果显示只有5条数据符合条件。5.按条件查询表中的数据(组合or)select * from table_name where column1 运算符 value1 or column2 运算符 value2
select * from table1 where 股票简称='贵州茅台' or 股票简称='海天味业';
Navicat for MySQL运行结果如下:符合or连接中的任意一个条件即可以被筛选出来,结果显示了指定的两条数据。6.按条件查询表中的数据(范围between)select * from table_name where column between value1 and value2
select * from table1 where ROE均值 between 30 and 35;
Navicat for MySQL运行结果如下:在MySQL中,between包含value1和value2边界值,结果显示了有5条数据在指定的范围内。7.按条件查询表中的数据(集合查询in)select * from table_name where column in (value1,value2,...)
select * from table1 where 上市年数 in ('3年','4年','5年');
Navicat for MySQL运行结果如下:
只要符合in后面中的任意条件就会被筛选出来,结果显示有19条数据符合括号内的条件。8.查询并定义别名(as)
as可省略
select column1 as name1,column2 as name2,... from table_name;
select column1,column2 from table_name as name
select 股票代码 as 代码,股票简称 as 股票 from table1;
Navicat for MySQL运行结果如下:展示表中,列名由“股票代码”变为“代码”,“股票简称”变为“股票”,有时候可以利用这种方法对列名进行重命名,以让数据更加清晰可观。9.查询并去除重复值(distinct)select distinct column from table_name
select distinct 上市年数 from table1;
Navicat for MySQL运行结果如下:
在table1表中有很多“上市年数”相同的数据,distinct可以去除列中重复的数值并将其展示出来。10.查询并进行空值筛选(null)
select * from table_name where column is null
select * from table_name where column is not null
select * from table1 where 现价 is null;
Navicat for MySQL运行界面如图所示:
null即是空值,如果想筛选非空值使用not null即可。11.模糊查询(like)1)查询以s开头的字段select * from table_name where column like 's%'2)查询以s结尾的字段select * from table_name where column like '%s'3)查询包含s的字段select * from table_name where column like '%s%'4)查询第二个字是s的字段select * from table_name where column like '_s%'
select * from table1 where 股票简称 like '%新材';
Navicat for MySQL运行结果如下:
%指代任意字符,_代表单个字符。12.排序查询(order by)select * from table_name order by column1 asc|desc,column2 asc|desc,...
select * from table1 order by ROE均值 desc;
Navicat for MySQL运行结果如下:
asc代表升序排列,desc代表降序排列,默认为升序排列。13.限制查询(limit)select * from table_name limit index,lines
select * from table1 limit 5;
Navicat for MySQL运行结果如下:限制查询可以按自定义查询要展示的行数据,lines代表要展示的行数,index代表要展示的行数从第几行开始算起,默认从0开始,即从首行数据开始展示。14.分组查询(group by)select avg(column1) from table_name group by column2
select 上市年数,avg(ROE均值) from table1 group by 上市年数;
Navicat for MySQL运行结果如下:group by按照列中相同的数据分为一组,接着对分组后的数值进行计算并展示。15.分组过滤查询(having)select avg(column1) from table_name group by column2 having avg(column1) 运算符 value
select 上市年数,avg(ROE均值) from table1 group by 上市年数 having avg(ROE均值)>30;
Navicat for MySQL运行结果如下:having的意思相当于where,在这里使用having是因为where无法对分组后的数据进行筛选(where的顺序在group by前面)。16.关联查询(join)1)内连接:通过同一个列中相同的值将表匹配起来,进行关联并展示。①使用条件where:该方法与inner join ... on ...结果相同select * from table_name1,table_name2 where table_name1.column = table_name2 .column
②inner join ... on ...
select * from table_name1
inner join
table_name2
on
table_name1.column = table_name2.column
select * from table1,table2 where table1.股票代码=table2.股票代码;
或
select * from table1 inner join table2 on table1.股票代码=table2.股票代码;
Navicat for MySQL运行结果如下:
table1有35条数据,table2有31条数据,两表中“股票代码”列相同的值只有31条,所以最后展示出来的只有31条数据。使用条件where和inner join ... on ... 结果相同,只不过最终会显示两个相同的列,若是想要合并该列,可使用以下第3种方法。
③合并列:inner join ... using ...
select * from table_name1
inner join
table_name2
using(column)
select * from table1inner join table2 using(股票代码);
Navicat for MySQL运行结果如下:
内连接的方法只能将列中相同的值的行数据合并在一起,如果想要合并更多的行数据,可以使用外连接。
2)外连接:以其中一张表为驱动表,与另外一张表的每条记录进行匹配,如果能够匹配则进行关联并展示,如果不能匹配则以null填充。
①左外连接:left join ... on
select * from table_name1
left join
table_name2
on
table_name1.column = table_name2.column
select * from table1 left join table2 on table1.股票代码=table2.股票代码;
Navicat for MySQL运行结果如下:
以table1为驱动表,table1有35条数据,table2有31条数据,table1最后几条比table2多的数据的剩余值将以null进行填充。
②右外连接:right join ... on
select * from table_name1
right join
table_name2
on
table_name1.column = table_name2.column
select * from table1 right join table2 on table1.股票代码=table2.股票代码;
Navicat for MySQL运行结果如下:
以table2为驱动表,table1有35条数据,table2有31条数据,结果以table2为准只查询出31条数据。
3)自连接
select * from table_name1 name1
left join
table_name1 name2
on
name1.column1 = name2.column2
与外连接同理,在同一张表中进行匹配,如果能够匹配的则进行关联并展示,不能匹配的则以null填充。
17.组合查询(union)
1)去除重复值
select * from table_name1
union
select * from table_name2
select * from table1 union select * from table3;
Navicat for MySQL运行结果如下:
table1有35条数据,table2在table1的基础上增加了16条共51条数据,使用union将两张表进行组合会去除其重复值,最后只显示51条数据。
2)保留重复值:
select * from table_name1
union all
select * from table_name2
select * from table1union all select * from table3;
Navicat for MySQL运行结果如下:
union all保留了两张表中共有的数据,所以最后显示有86条数据。
在看点这里
mysql between and 包含边界吗_MySQL | SQL语法(一)相关推荐
- mysql数据库迁移到瀚高数据库,包含数据迁移、sql语法、服务启动、部署、tomcat问题整理
文章目录 1.数据库迁移 2.数据库设置主键自增 2.1 数据库字段问题 2.2 存在即更新 2.3 清空数据表 2.4 瀚高数据库查询过程中显示转换 2.5 mybatis插入一条数据返回自增的主键 ...
- 黑马程序员MySQL数据库之基础篇笔记(SQL语法)(每日更新)
文章目录 0 SQL 1 SQL通用语法 2 SQL分类 2.1 DDL语句 2.1.1 DDL数据库操作 2.1.2 DDL表操作 2.1.3 DDL表操作数据类型 0 SQL SQL通用语法 SQ ...
- mysql between and 包含边界吗_10分钟让你明白MySQL是如何利用索引的
一.前言 在MySQL中进行SQL优化的时候,经常会在一些情况下,对MySQL能否利用索引有一些迷惑. 譬如: MySQL 在遇到范围查询条件的时候就停止匹配了,那么到底是哪些范围条件? MySQL ...
- mysql oracle 查询语句执行顺序_MySQL sql语句执行顺序
(8) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING ...
- mysql第二条减第一条_Mysql SQL优化
SQL优化规则 第一条: 尽量全值匹配,也就是说尽量使用等于 第二条: 最佳左前缀原则 如果是复合索引,要遵守最佳左前缀原则,指的是从最左侧列开始并且不跳过索引中的列 如果是按顺序使用的索引列,且有最 ...
- mysql按固定字符进行切割_MySQL:SQL按特定字符分隔切割或删除特定字符
1,先建表 DROP TABLE IF EXISTS `gongzi`; CREATE TABLE `gongzi` ( `id` int(11) NOT NULL AUTO_INCREMENT, ` ...
- mysql查其它用户的表_mysql sql查询如何实现发私信用户和其他用户的列表?要求消重所有重复的用户结果...
私信表结构如下: 建表语句和数据CREATE TABLE `message` ( `id` int(5) NOT NULL, `sender_id` int(5) DEFAULT NULL, `rec ...
- Mysql的sql注入_MySQL SQL注入
如果通过网页需要用户输入一些数据信息,并将其插入到MySQL数据库,这是一个引入SQL注入安全问题的机会.这一节将学习如何防止这种情况的发生,并帮助保护脚本和MySQL语句. 通常注入是在当要求用户输 ...
- mysql sql模式_MySQL SQL模式特点汇总
前言 MySQL服务器可以在不同的SQL模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于sql_mode系统变量的值.DBA可以设置全局SQL模式以匹配站点服务器操作要求,并且 ...
最新文章
- 求一个容器的最值的索引_殊途同归——从一道经典的多元最值问题说开
- linux查看安装的所有内核,Linux怎么查看系统已安装内核
- Excel制作图表的方法
- linux可以运行常规软件吗,Linux安装一些常规软件(浅显)
- 初中计算机基础知识教程考试,2017年职称计算机考试基础知识教程详解(三十一)...
- 2017年哪些网络安全威胁不容忽视?
- [转]vue项目中,main.js,App.vue,index.html如何调用
- 在Spring MVC应用程序中使用Bean Validation 1.1获得更好的错误消息
- java sql分页_mysql、sqlserver、oracle分页,java分页统一接口实现
- c语言编程软件开机自动启动,C语言实现程序开机自启动
- Java方法01 方法(函数)定义、调用、值传递、重载、命令行传递参数
- jenkins运行日志时间与linux,查看日志
- 苹果iOS 16将改进通知 添加新的健康追踪功能
- 【台词】严厉的愛Tough Love」(后妈茶话会)
- D3D游戏关于窗口中如何精确确定鼠标位置的相关讨论
- ListView刷新某一项Item
- 使用pyautogui自动刷微信表情
- 会员等级图标js脚本
- 处理团队人际关系的九大原则
- localhost拒绝连接解决办法
热门文章
- laravel 5.8 guzzle get 参数_Laravel速查表 Cache Cookie Request
- python进程数上限_python – 使用具有最大同时进程数的multipr...
- python二维数据读取对齐_从投影的二维直方图绘制对齐的x,y一维直方图
- mysql 分表全局id_MySQL分庫分表環境下全局ID生成方案
- CTF -杂项密码学,常见密码介绍(三)
- python中,如何将多行进行输出,同时将行尾的换行符去掉
- python打印log重复问题
- linux按键驱动中的结构体,linux 驱动之input子系统(gpio-keys)实现
- php new对象 调用函数,关于JS中new调用函数的原理介绍
- 检测点是否在两条平行线段之间_解决最值问题的利器——垂线段最短