点击上方“Python编程小记未来持续推送学习分享,欢迎关注!

本篇使用的数据库管理工具是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语法(一)相关推荐

  1. mysql数据库迁移到瀚高数据库,包含数据迁移、sql语法、服务启动、部署、tomcat问题整理

    文章目录 1.数据库迁移 2.数据库设置主键自增 2.1 数据库字段问题 2.2 存在即更新 2.3 清空数据表 2.4 瀚高数据库查询过程中显示转换 2.5 mybatis插入一条数据返回自增的主键 ...

  2. 黑马程序员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 ...

  3. mysql between and 包含边界吗_10分钟让你明白MySQL是如何利用索引的

    一.前言 在MySQL中进行SQL优化的时候,经常会在一些情况下,对MySQL能否利用索引有一些迷惑. 譬如: MySQL 在遇到范围查询条件的时候就停止匹配了,那么到底是哪些范围条件? MySQL ...

  4. mysql oracle 查询语句执行顺序_MySQL sql语句执行顺序

    (8)     DISTINCT (1)     FROM (3)      JOIN (2)     ON (4)     WHERE (5)     GROUP BY (6)     HAVING ...

  5. mysql第二条减第一条_Mysql SQL优化

    SQL优化规则 第一条: 尽量全值匹配,也就是说尽量使用等于 第二条: 最佳左前缀原则 如果是复合索引,要遵守最佳左前缀原则,指的是从最左侧列开始并且不跳过索引中的列 如果是按顺序使用的索引列,且有最 ...

  6. mysql按固定字符进行切割_MySQL:SQL按特定字符分隔切割或删除特定字符

    1,先建表 DROP TABLE IF EXISTS `gongzi`; CREATE TABLE `gongzi` ( `id` int(11) NOT NULL AUTO_INCREMENT, ` ...

  7. mysql查其它用户的表_mysql sql查询如何实现发私信用户和其他用户的列表?要求消重所有重复的用户结果...

    私信表结构如下: 建表语句和数据CREATE TABLE `message` ( `id` int(5) NOT NULL, `sender_id` int(5) DEFAULT NULL, `rec ...

  8. Mysql的sql注入_MySQL SQL注入

    如果通过网页需要用户输入一些数据信息,并将其插入到MySQL数据库,这是一个引入SQL注入安全问题的机会.这一节将学习如何防止这种情况的发生,并帮助保护脚本和MySQL语句. 通常注入是在当要求用户输 ...

  9. mysql sql模式_MySQL SQL模式特点汇总

    前言 MySQL服务器可以在不同的SQL模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于sql_mode系统变量的值.DBA可以设置全局SQL模式以匹配站点服务器操作要求,并且 ...

最新文章

  1. 求一个容器的最值的索引_殊途同归——从一道经典的多元最值问题说开
  2. linux查看安装的所有内核,Linux怎么查看系统已安装内核
  3. Excel制作图表的方法
  4. linux可以运行常规软件吗,Linux安装一些常规软件(浅显)
  5. 初中计算机基础知识教程考试,2017年职称计算机考试基础知识教程详解(三十一)...
  6. 2017年哪些网络安全威胁不容忽视?
  7. [转]vue项目中,main.js,App.vue,index.html如何调用
  8. 在Spring MVC应用程序中使用Bean Validation 1.1获得更好的错误消息
  9. java sql分页_mysql、sqlserver、oracle分页,java分页统一接口实现
  10. c语言编程软件开机自动启动,C语言实现程序开机自启动
  11. Java方法01 方法(函数)定义、调用、值传递、重载、命令行传递参数
  12. jenkins运行日志时间与linux,查看日志
  13. 苹果iOS 16将改进通知 添加新的健康追踪功能
  14. 【台词】严厉的愛Tough Love」(后妈茶话会)
  15. D3D游戏关于窗口中如何精确确定鼠标位置的相关讨论
  16. ListView刷新某一项Item
  17. 使用pyautogui自动刷微信表情
  18. 会员等级图标js脚本
  19. 处理团队人际关系的九大原则
  20. localhost拒绝连接解决办法

热门文章

  1. laravel 5.8 guzzle get 参数_Laravel速查表 Cache Cookie Request
  2. python进程数上限_python – 使用具有最大同时进程数的multipr...
  3. python二维数据读取对齐_从投影的二维直方图绘制对齐的x,y一维直方图
  4. mysql 分表全局id_MySQL分庫分表環境下全局ID生成方案
  5. CTF -杂项密码学,常见密码介绍(三)
  6. python中,如何将多行进行输出,同时将行尾的换行符去掉
  7. python打印log重复问题
  8. linux按键驱动中的结构体,linux 驱动之input子系统(gpio-keys)实现
  9. php new对象 调用函数,关于JS中new调用函数的原理介绍
  10. 检测点是否在两条平行线段之间_解决最值问题的利器——垂线段最短