百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

MySQL 03查询表

toyiye 2024-06-21 12:13 10 浏览 0 评论

一.单表查询

1.查询所有数据(SELECT * FROM tb_name;)

SELECT 后面跟上要查询的字段,* 号代表所有的字段,一般来说,查询所有字段是最耗时长的,所以今后查询数据尽可能按需索取。

mysql> select * from `student`;
+------+---------+------+------+----------+
| id   | name    | age  | sex  | class_id |
+------+---------+------+------+----------+
| 1000 | yige    | NULL |    0 |        1 |
| 1001 | liangge | NULL |    0 |        1 |
| 1002 | sange   | NULL |    0 |        2 |
| 1003 | sige    | NULL |    0 |        2 |
+------+---------+------+------+----------+

2.查询部分字段数据(SELECT col_name1,col_name2 FROM tb_name;)

查询字段尽可能查询部分字段,不需要的字段就要不查询出来

mysql> select `id`,`name` from `student`;
+------+---------+
| id   | name    |
+------+---------+
| 1000 | yige    |
| 1001 | liangge |
| 1002 | sange   |
| 1003 | sige    |
+------+---------+

3.带条件查询(SELECT col_name FROM tb_name WHERE 你的要求

条件查询条件可以是大于等于不等于(>,=,<>)等等,也可以是更加复杂的判断都是可以的。

mysql> select `id`,`name` from `student` where `id`=1000;
+------+------+
| id   | name |
+------+------+
| 1000 | yige |
+------+------+

4.取别名(SELECT col_name AS new_name FROM tab_name AS new_name2)

如果列名或者表名太长,可以给它们取一个别名,可以方便取使用

mysql> SELECT `s`.`name` FROM `student` AS `s`;
+---------+
| name    |
+---------+
| yige    |
| liangge |
| sange   |
| sige    |
+---------+

二.多表查询

1.内连接

对两个表格进行链接,并进行带条件的查询(同时查询两个表格中的个别元素)。

(1)对两个表格进行合并(join)

mysql> SELECT * FROM `student` join `class`;
+------+---------+------+------+----------+----+-------+--------+
| id   | name    | age  | sex  | class_id | id | name  | slogan |
+------+---------+------+------+----------+----+-------+--------+
| 1000 | yige    | NULL |    0 |        1 |  1 | cls-1 | NULL   |
| 1000 | yige    | NULL |    0 |        1 |  2 | cls-2 | NULL   |
| 1001 | liangge | NULL |    0 |        1 |  1 | cls-1 | NULL   |
| 1001 | liangge | NULL |    0 |        1 |  2 | cls-2 | NULL   |
| 1002 | sange   | NULL |    0 |        2 |  1 | cls-1 | NULL   |
| 1002 | sange   | NULL |    0 |        2 |  2 | cls-2 | NULL   |
| 1003 | sige    | NULL |    0 |        2 |  1 | cls-1 | NULL   |
| 1003 | sige    | NULL |    0 |        2 |  2 | cls-2 | NULL   |
+------+---------+------+------+----------+----+-------+--------+

(2)对合并后的表格进行查询

mysql> SELECT `student`.`name`,`student`.`id`,`class`.`name` FROM `student`,`class`;
+---------+------+-------+
| name    | id   | name  |
+---------+------+-------+
| yige    | 1000 | cls-1 |
| yige    | 1000 | cls-2 |
| liangge | 1001 | cls-1 |
| liangge | 1001 | cls-2 |
| sange   | 1002 | cls-1 |
| sange   | 1002 | cls-2 |
| sige    | 1003 | cls-1 |
| sige    | 1003 | cls-2 |
+---------+------+-------+

(3)缩写(适合表格名长的)

mysql> SELECT `s`.`name`,`s`.`id`,`c`.`name` FROM `student` as `s` join `class` as `c`;
+---------+------+-------+
| name    | id   | name  |
+---------+------+-------+
| yige    | 1000 | cls-1 |
| yige    | 1000 | cls-2 |
| liangge | 1001 | cls-1 |
| liangge | 1001 | cls-2 |
| sange   | 1002 | cls-1 |
| sange   | 1002 | cls-2 |
| sige    | 1003 | cls-1 |
| sige    | 1003 | cls-2 |
+---------+------+-------+

(4)对合并后表格进行带条件查询(on)

mysql> SELECT `s`.`name`,`s`.`id`,`c`.`name` FROM `student` as `s` join `class` as `c` on `s`.`class_id`=`c`.`id`;
+---------+------+-------+
| name    | id   | name  |
+---------+------+-------+
| yige    | 1000 | cls-1 |
| liangge | 1001 | cls-1 |
| sange   | 1002 | cls-2 |
| sige    | 1003 | cls-2 |
+---------+------+-------+

2.外连接(左连接)

(1)左连接

A LEFT JOIN B 会以左边的表为主,展式左边表的所有数据,展式右边表中符合ON子句中条件的数据,没有则为空。

 mysql> select * from `student` join `student_detail` on `student`.`id`=`student_detail`.`student_id`;
+------+---------+------+------+----------+----+-------------+---------+------------+
| id   | name    | age  | sex  | class_id | id | phone       | address | student_id |
+------+---------+------+------+----------+----+-------------+---------+------------+
| 1000 | yige    | NULL |    0 |        1 |  1 | 12345678911 | NULL    |       1000 |
| 1001 | liangge | NULL |    0 |        1 |  2 | 12345678912 | NULL    |       1001 |
| 1002 | sange   | NULL |    0 |        2 |  3 | 12345678913 | NULL    |       1002 |
| 1003 | sige    | NULL |    0 |        2 |  4 | 12345678914 | NULL    |       1003 |
+------+---------+------+------+----------+----+-------------+---------+------------+

(2)右连接

与左连接相反

mysql> select * from `student` right join `student_detail` on `student`.`id`=`student_detail`.`student_id`;
+------+---------+------+------+----------+----+-------------+---------+------------+
| id   | name    | age  | sex  | class_id | id | phone       | address | student_id |
+------+---------+------+------+----------+----+-------------+---------+------------+
| 1000 | yige    | NULL |    0 |        1 |  1 | 12345678911 | NULL    |       1000 |
| 1001 | liangge | NULL |    0 |        1 |  2 | 12345678912 | NULL    |       1001 |
| 1002 | sange   | NULL |    0 |        2 |  3 | 12345678913 | NULL    |       1002 |
| 1003 | sige    | NULL |    0 |        2 |  4 | 12345678914 | NULL    |       1003 |
+------+---------+------+------+----------+----+-------------+---------+------------+

(3)全连接

UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。

mysql> select `name` from `student` union select `name` from `course`;
+---------+
| name    |
+---------+
| yige    |
| liangge |
| sange   |
| sige    |
| wuge    |
| liuge   |
| qige    |
| python  |
| linux   |
| mysql   |
+---------+

3.子表查询

在一个SQL语句中出现两个SQL语句,就是子表查询,下面这个子表查询是在JOIN这个地方建立查询。(就是对两个不相干的表格进行查询,所有需要使用到第三个表格进行连接。)

mysql> select `s`.`name`,`e`.`name` from `student` as `s` left join (select `c`.`name`,`cs`.`student_id` from `course` as `c` join `course_student` as `cs`on `c`.`id`=`cs`.`course_id`) as `e` on `s`.`id`=`e`.`student_id`;
+---------+--------+
| name    | name   |
+---------+--------+
| yige    | python |
| yige    | linux  |
| yige    | mysql  |
| liangge | mysql  |
| sange   | mysql  |
| sige    | NULL   |
| wuge    | NULL   |
| liuge   | NULL   |
| qige    | NULL   |
+---------+--------+

4.排序

对查询出来的结果进行排序,ASC升序(默认) DESC降序

(1)排序

mysql> select * from `student` order by `class_id`;
+------+---------+------+------+----------+
| id   | name    | age  | sex  | class_id |
+------+---------+------+------+----------+
| 1000 | yige    | NULL |    0 |        1 |
| 1001 | liangge | NULL |    0 |        1 |
| 1004 | wuge    | NULL |    0 |        1 |
| 1002 | sange   | NULL |    0 |        2 |
| 1003 | sige    | NULL |    0 |        2 |
| 1005 | liuge   | NULL |    0 |        2 |
| 1006 | qige    | NULL |    0 |        2 |
+------+---------+------+------+----------+

(2)降序

mysql> select * from `student` order by `class_id` desc;
+------+---------+------+------+----------+
| id   | name    | age  | sex  | class_id |
+------+---------+------+------+----------+
| 1002 | sange   | NULL |    0 |        2 |
| 1003 | sige    | NULL |    0 |        2 |
| 1005 | liuge   | NULL |    0 |        2 |
| 1006 | qige    | NULL |    0 |        2 |
| 1000 | yige    | NULL |    0 |        1 |
| 1001 | liangge | NULL |    0 |        1 |
| 1004 | wuge    | NULL |    0 |        1 |
+------+---------+------+------+----------+

5.限制行数

对查询出来的结果限制显示的行数

mysql> select * from `student` order by `class_id` desc limit 3;
+------+-------+------+------+----------+
| id   | name  | age  | sex  | class_id |
+------+-------+------+------+----------+
| 1006 | qige  | NULL |    0 |        2 |
| 1005 | liuge | NULL |    0 |        2 |
| 1002 | sange | NULL |    0 |        2 |
+------+-------+------+------+----------+

6.分组

分组是个常见的操作,常用于分组统计,使用GROUP BY后,会按照GROUP BY后面的字段进行分组,且必须是明确的字段,不能是*,因此SELECT后面也不能是*.其次可以使用 HAVING 可以对分组之后的结果进行筛选,注意:HAVING 后的字段必须是SELECT后出现过的

mysql>  select `c`.`id`,`c`.`name`,count(*) from `class` `c` left join `student` `s` on `c`.`id`=`s`.`class_id` group by `c`.`id`,`c`.`name`;
+----+-------+----------+
| id | name  | count(*) |
+----+-------+----------+
|  1 | cls-1 |        3 |
|  2 | cls-2 |        4 |
+----+-------+----------+

可将查询出的数据进行按条件查询(having)

mysql>  select `c`.`id`,`c`.`name`,count(*) from `class` `c` left join `student` `s` on `c`.`id`=`s`.`class_id` group by `c`.`id`,`c`.`name` having count(*)>3;
+----+-------+----------+
| id | name  | count(*) |
+----+-------+----------+
|  2 | cls-2 |        4 |
+----+-------+----------+

三.MySQL函数

例如:ABS,MAX,MIN,ROUND,AVG,SUM
如:最大值(max)

mysql> select max(`age`) from `student`;
+------------+
| max(`age`) |
+------------+
|         29 |
+------------+

四.SQL优化

模糊查询(lke)

mysql> select * from `student` where `name` like '%i%';
+------+---------+------+------+----------+
| id   | name    | age  | sex  | class_id |
+------+---------+------+------+----------+
| 1000 | yige    | NULL |    0 |        1 |
| 1001 | liangge | NULL |    0 |        1 |
| 1003 | sige    | NULL |    0 |        2 |
| 1005 | liuge   | NULL |    0 |        2 |
| 1006 | qige    | NULL |    0 |        2 |
| 1008 | jiuge   |   29 |    0 |        1 |
+------+---------+------+------+----------+

五.事务

一个连续不断的过程,如果中途被打断则整个程序都不会被执行。(例如银行取钱)
开始事务:begin;
结束事务:commit;
回滚事务:rollback;(撤销之前操作)

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码