文章目录

  • 一.构造数据
  • 二.常用的查询语句
    • 1.SELECT:字段表达式
    • 2.FROM 子句
    • 3.WHERE 子句:按指定条件过滤
    • 4.GROUP BY:分组查询
    • 5.HAVING
    • 6.ORDER BY:按字段排序
    • 7.LIMIT:限制取出数量
    • 8.DISTINCT:去重
    • 9.dual表
  • 三.函数
    • 1.聚合函数
    • 2.数值计算类函数
    • 3.日期计算类函数
    • 4.字符串相关函数
    • 5.其他函数
  • 四.多表查询
    • 1.UNION联合查询
    • 2.INNER JOIN:内连接
    • 3.LEFT JOIN:左连接
    • 4.RIGHT JOIN:右连接
    • 5.FULL JOIN:全连接
    • 6.子查询
  • 五.视图表
    • 1.视图表的特点
    • 2.创建视图

一.构造数据

为了操作方便, 先构造以下数据:
1.学生表
表结构:

create table `student` (`id` int unsigned primary key auto_increment,`name` char(32) not null unique,`gender` enum('男', '⼥') not null,`city` char(32) not null,`description` text,`birthday` date not null default '1995-1-1',`money` float(7, 2) default 0,`only_child` boolean
) charset=utf8mb4;

表数据:

insert into `student`
(`name`, `gender`, `city`, `description`, `birthday`, `money`, `only_child`)  values
('郭德纲', '男', '北京', '班⻓', '1997/10/1', rand() * 100, True),
('陈乔恩', '⼥', '上海', NULL, '1995/3/2', rand() * 100, True),
('赵丽颖', '⼥', '北京', '班花, 不骄傲', '1995/4/4', rand() * 100, False),
('王宝强', '男', '重庆', '超爱吃⽕锅', '1998/10/5', rand() * 100, False),
('赵雅芝', '⼥', '重庆', '全宇宙三好学⽣', '1996/7/9', rand() * 100, True),
('张学友', '男', '上海', '奥林匹克总冠军!', '1993/5/2', rand() * 100, False),
('陈意涵', '⼥', '上海', NULL, '1994/8/30', rand() * 100, True),
('赵本⼭', '男', '南京', '副班⻓', '1995/6/1', rand() * 100, True),
('张柏芝', '⼥', '上海', NULL, '1997/2/28', rand() * 100, False),
('吴亦凡', '男', '南京', '⼤碗宽⾯要不要?', '1995/6/1', rand() * 100, True),
('⿅晗', '男', '北京', NULL, '1993/5/28', rand() * 100, True),
('关晓彤', '⼥', '北京', NULL, '1995/7/12', rand() * 100, True),
('周杰伦', '男', '台北', '⼩伙⼈才啊', '1998/3/28', rand() * 100, False),
('⻢云', '男', '南京', '⼀个字:贼有钱', '1990/4/1', rand() * 100, False),
('⻢化腾', '男', '上海', '⻢云死对头', '1990/11/28', rand() * 100, False);

2.成绩表
表结构:

create table score ( `id` int unsigned primary key auto_increment, `math` float not null default 0, `english` float not null default 0
) charset=utf8mb4;

表数据:

insert into score (`math`, `english`) values
(49, 71), (62, 66.7), (44, 86), (77.5, 74), (41, 75),
(82, 59.5), (64.5, 85), (62, 98), (44, 36), (67, 56),
(81, 90), (78, 70), (83, 66), (40, 90), (90, 90);

二.常用的查询语句

1.SELECT:字段表达式

SELECT 既可以做查询,也可以做输出

select id, name from student;
select rand(); -- 随机数
select unix_timestamp(); -- 显示Unix时间戳

运行结果:

2.FROM 子句

语法:select 字段 from 表名;
FROM 后面是数据源,数据源可以写多个,数据源⼀般是表明,也可以是其他查询的结果。

select student.name,score.english from student,score;

3.WHERE 子句:按指定条件过滤

语法: select 字段 from 表名 where 条件;
WHERE 是做条件查询, 只返回结果为 True 的数据

select name from student where city = '北京';


空值判断:is null | is not null

select `name` from `student` where `description` is null;
select `name` from `student` where `description` is not null;


范围判断:between … and … | not between … and …

select id, math from score where math between 80 and 90;

4.GROUP BY:分组查询

按照某⼀字段进行分组,会把该字段中值相同的归为⼀组,将查询的结果分类显示,方便统计。
如果有 WHERE 要放在 WHERE 的后面
语法: select 字段 from 表名 group by 分组字段;

select city, group_concat(name) from student group by city;
select gender, group_concat(name) from student where city='北京' group by gender;


5.HAVING

HAVING 与 WHERE 在 SQL 中增加 HAVING 子句原因是:WHERE 关键字无法与聚合函数⼀起使用
语法:SELECT 字段 FROM 表名 HAVING 条件;
WHERE:后面不能加上聚合函数,只能写在数据源的后面
HAVING:条件字段必须要在结果集中出现, HAVING 可以写在 GROUP BY 的后面

select `id`,`name` from `student` having `id` >= 10;
select id,name,city from student where id>=3 having city='上海';
select city, group_concat(name),group_concat(birthday) from student group by city having min(birthday) > '1995-1-1';



6.ORDER BY:按字段排序

ORDER BY 主要作用是排序
ORDER BY 写在 GROUPBY 后面,如果有 HAVING 也要写在 HAVING 的后面
语法: select 字段 from 表名 order by 排序字段 asc | desc;
   分为升序 asc 降序 desc, 默认 asc (可以不写)

select name,birthday from student order by birthday;
select name,birthday from student order by birthday desc;


7.LIMIT:限制取出数量

语法

select 字段 from 表名 limit m; --从第 1 行到第 m 行
select 字段 from 表名 limit m, n; -- 跳过前 m 行,往下取 n ⾏
select 字段 from 表名 limit m offset n; -- 跳过前 n ⾏, 取后⾯的 m ⾏

我这里是因为表中数据id不是升序,为了可以方便观看limit功能,使用order by将id升序


8.DISTINCT:去重

select distinct city from student;

9.dual表

dual 是⼀个虚拟表, 仅仅为了保证 select … from … 语句的完整性,无实际意义

select now() from dual;

三.函数

1.聚合函数


部分截图:

2.数值计算类函数


部分截图:


3.日期计算类函数


部分截图:


4.字符串相关函数


部分截图:


5.其他函数


部分截图:

四.多表查询

1.UNION联合查询

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
union要求:

  1. 两边 select 语句的字段数必须⼀样
  2. 两边可以具有不同数据类型的字段
  3. 字段名默认按照左边的表来设置

union用法:

SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2;


源一,源二,源三是student2中的数据

2.INNER JOIN:内连接

INNER JOIN 关键字在表中存在至少⼀个匹配时返回行。

SELECT column_name(s) FROM table1 JOIN table2 ON table1.column_name=table2.column_name;

3.LEFT JOIN:左连接

LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name=table2.column_name;

为了使展示效果更加明显,我在添加了一些数据及排序

# 学生表中添加:
insert into `student` (`name`, `gender`, `city`, `description`, `birthday`, `money`, `only_child`) values ('源一', '男', '北京', '班⻓', '1997/10/1', rand() * 100, True), ('源二', '⼥', '上海', NULL, '1995/3/2', rand() * 100, True);  # 成绩表中添加:
insert into score (`id`,`math`, `english`) values (20, 49, 71), (21, 62, 66.7);

4.RIGHT JOIN:右连接

RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。

SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name=table2.column_name;

5.FULL JOIN:全连接

FULL JOIN 的连接方式是只要左表(table1)和右表(table2)其中⼀个表中存在匹配,则返回行。相当于结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
特别注意: MySQL 并不⽀持 full join

SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name=table2.column_name;

6.子查询

查询的语句中还有⼀个查询:子查询

select name from student where id in (select id from score where math > 80);

五.视图表

1.视图表的特点

1.视图是数据的特定子集,是从其他表里提取出数据而形成的虚拟表,或者说临时表。
2.创建视图表依赖⼀个查询。
3.视图是永远不会自己消失的除非手动删除它。
4.视图有时会对提高效率有帮助。临时表不会对性能有帮助,是资源消耗者。
5.视图⼀般随该数据库存放在⼀起,临时表永远都是在 tempdb 里的。
6.视图适合于多表连接浏览时使用;不适合增、删、改,这样可以提高执行效率。
7.⼀般视图表的名称以 v_ 为前缀,用来与正常表进行区分。
8.对原表的修改会影响到视图中的数据。

2.创建视图

 create view 视图名 as 查询语句

例:

create view v_stu as select student.*,score.math,score.english from student left join score on student.id=score.id;

创建好后,可以使用show tables;进行查看:

也可以通过select *from v_stu;查看表数据

MySQL数据库的查询:常用查询语句、MySQL函数、多表查询、视图表相关推荐

  1. sqlserver2012(and mysql)数据库简单内外连接-双表-三(多)表查询

    背景: 1:学习B站数据库多表查询,解决一些实际问题 参考: 1:[尚学堂]MySQL数据库多表查询_多表连接查询视频教程_哔哩哔哩_bilibili 2:https://www.cnblogs.co ...

  2. sql操作mysql数据库_一些常用的操作MySQL数据库的sql语句

    创建数据库:create database 数据库名; 删除数据库:drop datebase 数据库名; 查看数据库:show databases;(所有数据库) 使用数据库:use 数据库名;(之 ...

  3. MySQL用户管理、常用SQL语句、MySQL数据库备份恢复

    mysql用户管理 1.创建一个普通用户并授权 [root@gary-tao ~]# mysql -uroot -p'szyino-123' Warning: Using a password on ...

  4. concat mysql sql注入_sql注入-mysql注入基础及常用注入语句

    最近在教学中,关于SQL注入,总发现学生理解起来有些难度,其实主要的原因是对各类数据库以及SQL语句不熟悉,今天先介绍mysql注入需要掌握的基础, Mysql内置information_schema ...

  5. MYSQL数据库 增删改查基础语句

    MYSQL数据库 增删改查基础语句 **********************DDL 语句 *********************   ( DDL 是数据定义语言的缩写,简单的说,就是对数据库内 ...

  6. c# mysql executescalar_C# 操作MySQL数据库, ExecuteScalar()方法执行T-SQL语句, COUNT(*), 统计数据...

    C# 操作My SQL数据库需要引用"MySql.Data", 可通过两种方式获取. 1.从NuGet下载"Install-Package MySql.Data -Ver ...

  7. [CentOS Python系列] 三.阿里云MySQL数据库开启配置及SQL语句基础知识

    从2014年开始,作者主要写了三个Python系列文章,分别是基础知识.网络爬虫和数据分析. Python基础知识系列:Pythonj基础知识学习与提升 Python网络爬虫系列:Python爬虫之S ...

  8. executescalar mysql_C# 操作MySQL数据库, ExecuteScalar()方法执行T-SQL语句, COUNT(*), 统计数据...

    C# 操作My SQL数据库需要引用"MySql.Data", 可通过两种方式获取. 1.从NuGet下载"Install-Package MySql.Data -Ver ...

  9. MySQL数据库之互联网常用架构方案(全)

    作者:尜尜人物 本文包含数据库架构原则.常见的四种架构方案.两种一致性解决方案.以及作者个人的一些见解. 一.数据库架构原则 1.高可用 2.高性能 3.一致性 4.扩展性 二.常见的架构方案 方案一 ...

  10. mysql伪列的使用,mysql伪列的妙用,mysql获取近几天的日期用来连表查询

    文章目录 写在前面 伪列的使用 初步 获取前几行 获取近几天的日期(用于关联查询) 配合UNION的妙用 UNION获取几行数据 获取近50天的日期(不使用其他表) 举一反三 写在前面 我们都知道or ...

最新文章

  1. php转word插件下载不了,不用软件pdf转word的方法
  2. 使用 CXF 做 webservice 简单例子
  3. C++学习之路 | PTA乙级—— 1061 判断题 (15 分)(精简)
  4. python tkinter Checkbutton控件
  5. 报表默认执行查询及汉字无法查询原因处理
  6. oracle 主键自动地址实现
  7. Android数据库框架-ORMLite
  8. mysql4语法_4 MySQL 语法技巧
  9. Excel自定义格式详解
  10. html input文字缩进,使用HTML Tidy来缩进HTML代码?
  11. Oracle GoldenGate for Oracle 11g(Solaris 10 x86-64) to Oracle 10g(CentOS 4.8) configuration
  12. 11G_RAC扩容方案
  13. 域名的分类:com,cn,net的区别
  14. java植物大战僵尸_JAVA课程设计——植物大战僵尸(团队)
  15. html5 邮箱后缀自动填写,Ant Design Vue AutoComplete 通过自定义选项search实现如自动补充邮箱后缀功能...
  16. 《Intriguing properties of neural networks》代码实现——Pytorch
  17. 高等数学:第五章 定积分(1)概念与性质 中值定理 微积分基本公式
  18. 鸿蒙归蝶的反弹,副本攻略-鸿蒙试炼
  19. Typora工具免费版下载
  20. Typescript 笔记

热门文章

  1. OO-Unit3-Summary
  2. 小米10开始抓取日志怎么关闭_小米10手机降价,原因原来在这里
  3. matlab安装方法以及在重复弹出mathwoks software activation界面的解决办法(需要的license.lic文件内容)
  4. 常见排序算法(C语言实现)
  5. Java富文本设置行间距,如何解决富文本设置行间距的单行带间距问题
  6. 中倍健未来数智药房首获红杉基金1千万美元天使轮融资
  7. c语言 A21—求3*5矩阵每列最大值,输出矩阵和最大值
  8. 为什么数学是创造力的源泉:一位数学家的思考与信仰
  9. excel数据导入python后不对齐_Python处理Excel文件的实用姿势
  10. modprobe加载异步加载