mysql 基础篇-数据查询(1)

一、查询数据的概念:查询数据、筛选数据、确定数据的以什么样的格式输出。

二、数据查询的基本语句

1、基本语句格式 :select 字段列表  FROM 表或者视图  where 查询条件

2.1 单表查询的内容:查询所有字段、查询指定字段、查询指定记录、查询空值、多条件的查询

对查询结果进行排序。

2.1.1  查询所有字段,通过* 通配符来实现。

SELECT * FROM fruits;(*代表所有的表中的字段,fruits是表名)

数据返回的时候按照定义表时候的顺序显示的。

一般不推荐使用*查询所有的数据,不然会降低查询和所使用得应用程序的效率

2.1.2 查询指定单个字段:

SELECT f_name FROM fruits (f_name 是fruits表中的一个列)

2.1.3 查询多个字段:

SELECT f_name, f_price FROM fruits;(f_name,f_price 都是fruits的一个列)。

不同字段名称之间要用逗号分隔开。

2.2通过where来写条件 进行数据的过滤筛选

SELECT 字段名1...n FROM 表名 WHERE 查询条件

2.2.2  条件判断符  大于(>), 小于(<) ,大于等于 (>=) ,小于等于(<=)  ,不等于(!= <>) ,之间(BETWEEN).

2.2.3 等于 (用来比较字符串和数值)

SELECT f_name, f_price FROM fruits WHERE f_price =10.2;

SELECT f_name, f_price FROM fruits WHERE f_name=‘apple‘;

2.2.4 小于

SELECT f_name,f_price FROM fruits WHERE f_price <10.00;

2.2.5 带 IN关键字的查询   用来查询满足指定范围内的条件的记录,只要满足条件范围内的一个值即为匹配。

SELECT s_id, f_name, f_price FROM fruits  WHERE s_id IN(101,102) ORDER BY f_name;

NOT IN:

SELECT s_id ,f_name, f_price FROM fruits WHERE  s_id IN(101,102)  ORDER BY f_name;

2.2.6  between ... and ...

SELECT f_name ,f_price FROM fruits WHERE f_price BETWEEN 2.00 AND 10.20;

not between .... and....

SELECT f_name ,f_price FROM fruits WHERE f_price NOT BETWEEN  2.00 AND 10.20;

2.3.1 LIKE 的字符匹配查询, 配合LIKE 使用的通配符是 %   和 _。

2.3.2 % 匹配任意长度的字符,甚至包括零字符,%可以放在不同的位置。

SELECT f_id, f_name FROM fruits WHERE f_name LIKE ‘b%‘; (查找以b 字开头的水果)

SELECT f_id , f_name FROM fruits WHERE f_name  LIKE ‘%g%‘(查找名字中含g的水果)

2.3.3  _ 下划线通配符,一次只能匹配任意一个字符。

SELECT f_id, f_name FROM fruits WHERE f_name LIKE ‘____y‘;

2.4.1 查询空值 : 空值不同于0,也不同于空字符串,,空值一般表示数据未知,不适用或将在以后添加数据。

SELECT c_id, c_name, c_email FROM customers WHERE c_email IS NULL;

NOT IS NULL:

SELECT c_id,c_name,c_email FROM customers WHERE c_email NOT IS NULL;

2.5.1  AND 操作符限定只有满足所有查询条件的记录才会被返回,可以使用AND 链接多个甚至多个查询条件,多个条件之间用AND分开。

SELECT f_id, f_price ,f_name FROM fruits WHERE s_id =‘101‘ AND f_price >=5;

可以有多个过滤条件,  增加条件的同时增加一个关键字AND

SELECT  f_id ,f_price ,f_name FROM fruits

WHERE s_id IN(101,102)   AND f_price >=5 AND f_name= ‘apple‘;

2.6.1 OR 表示只需要满足其中一个条件的记录即可返回数据,OR可以连接多个甚至多个查询条件,多个条件表达式之间使用OR分开。

SELECT s_id ,f_name,f_price FROM fruits WHERE s_id =101 OR s_id =102;

IN 和 OR 的操作符使用后结果是一样的,但是使用IN操作符使得检索语句更加简明,并且IN执行的速度要快于OR ,使用IN操作符,可以执行更加复杂的嵌套查询。

AND 的优先级高于 OR。

2.7.1 查询结果不重复   distinct 消除重复的值

SELECT DISTINCT  s_id FROM fruits;

2.8.1 对查询结果进行排序

SELECT f_name FROM fruits ORDER BY f_name;   默认应该都是升序。

2.8.2  多列排序  对多列数据 进行排序,需将需要排序的列之间用逗号隔开。

SELECT f_name, f_price FROM fruits ORDER BY f_name, f_price;

在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第一列数据中的所有值都是唯一的,将不再对第二列进行排序。

2.8.3 指定排序的方向  通过关键字DESC来实现

SELECT f_name ,f_price FROM fruits ORDER BY f_price DESC;  降序

ASC 是升序, 在排序的时候 ASC是作为默认的排序方式,所以加不加都可以。

要对多列都进行降序排序,必须要在每一列的列名后面都要加DESC 关键字

SELECT f_price, f_name FROM fruits ORDER BY f_price DESC ,f_name DESC;

2.9.1 分组查询  分组查询是对数据按照某个或者多个字段进行分组。 使用GROUP BY 关键字对数据进行分组。

2.9.2 基本语法: GROUP BY 字段 HAVING 条件表达式

字段值为进行分组时所依据的列名称;‘HAVING(条件表达式)’ 指定满足表达式限定条件的结果将被显示。

2.9.3 GROUP BY 关键字通常和集合函数一期使用 如:MAX()、 MIN()、COUNT()、SUM()、AVG()

SELECT s_id, COUNT(*)  AS total FROM fruits GROUP BY s_id;

SELECT s_id,GROUP_CONCAT(f_name) AS Names FROM fruits GROUP BY s_id;

2.9.4  GROUP BY 可以和HAVING 一起限定显示记录所需满足的条件,只有满足条件的分组才能会被显示。

SELECT s_id, GROUP_CONCAT(f_name) AS Names

FROM fruits

GROUP BY s_id HAVING COUNT(f_name)>1 ;

2.9.5 HAVING 和WHERE 的区别 :HAVING在数据分组之后进行过滤来选择分组,而WHERE 在分组之前用来选择记录,在WHERE 排除的记录不在包括在分组内。

2.9.6 GROUP BY 中使用 WITH ROLLUP

使用WITH ROLLUP 后,在所有查询出的分组之后增加一条记录,该记录计算查询出的所有记录的综合,即统计数量。

SELECT s_id ,COUNT(*) AS Total FROM fruits GROUP BY s_id WITH ROLLUP;

2.9.7 多字段分组   实验无法成功。

2.9.8 GROUP BY 和 ORDER BY 一起使用

SELECT o_num, SUM(quantity* item_price)  AS orderTotal

FROM orderitems

GROUP BY o_num

HAVING SUM(quantity*item_price) >=100;

3.1.1 LIMIT 限制查询结果的数量

SELECT * FROM fruits LIMIT 4;  显示查询结果的前4行

SELECT * FROM fruits LIMIT4,3; 显示从第五行开始后的三条记录。

4.1.1 使用聚合函数查询

功能:计算数据表中记录行数的总数、计算某个字段列下数据的总和,以及计算表中某个字段下的最大值、最小值或者平均值。

AVG (某列的平均数) COUNT (某列的行数) MAX (某列的最大值)MIN(某列的最小值) SUM(某列值得和)

4.1.2 COUNT()函数

COUNT(*) 计算表中总的行数,不管某列有数值或者为空值。

SELECT COUNT(*)   AS cust_num FROM customers;

COUNT(字段名) 计算机指定列下总的行数,计算时忽略空值的行

SELECT COUNT(o_email)   AS email_num FROM customers;

4.1.2   COUNT  GROUP BY

SELECT o_num, COUNT(f_id)

FROM orderitems

GROUP BY o_num;

GROUP BY 关键字先按照哦订单号进行分组,然后计算每个分组中的总记录数。

4.1.3 SUM

SELECT SUM(quantity)  AS items_total

FROM orderitems

WHERE o_num =30005;

SELECT o_num ,SUM(quantity)   AS items_total

FROM orderitems

GROUP BY o_num;

count 行的总和, sum 是列的值得总和。

4.1.4 AVG

SELECT AVG(f_price)   AS avg_price

FROM fruits

WHERE s_id=103;

SELECT s_id, AVG(f_price )   AS avg_price

FROM  fruits

GROUP BY s_id;

AVG()函数使用时,其参数为要计算的列名称,如果要得到多个列的多个平均值,则需要在每一列上使用AVG()函数

4.1.5 MAX() 函数

SELECT MAX(f_price)  AS max_price FROM fruits;

SELECT s_id, MAX(f_price)   AS max_price FROM fruits GROUP BY s_id;

SELECT MAX(f_name)   FROM fruits;

MAX  可以对字母进行大小判断,并返回最大的字符或者字符串值。

4.1.6   MIN()函数

SELECT MIN(f_price)  AS min_price FROM fruits;

SELECT s_id ,MIN(f_price)   AS min_price

FROM fruits

GROUP BY s_id;

GROUP BY 关键字 根据 s_id 字段对记录进行分组,然后计算出每个分组中的最小值。

5.1.1  连接是数据库模型的主要特点。主要包含内连接,外连接等。

5.1.2 内连接查询

使用标胶运算符进行表间某列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新记录。

SELECT suppliers.s_id, s_name,f_name, f_price

FROM fruits ,suppliers

WHERE  fruits.s_id =suppliers.s_id;

SELECT后面指定的列分别属于两个不同的表。 WHERE 子句作为过滤条件,指明只有两个表中的s_id字段值相等的时候才符合连接查询的条件。

SELECT suppliers.s_id,s_name, f_name, f_price

FROM fruits INNER JOIN suppliers

ON fruits.s_id = suppliers.s_id;

INNER JOIN 是标准规范

5.1.3 在一个连接查询中,涉及的两个表都是同一个表,这种查询称为自连接查询。自连接查询是一种特殊的内 连接,它是指相互连接的表在物理上为同一张表,但在逻辑上分为两张表。

SEELCT f1.f_id ,f1.f_name

FROM fruits AS f1 , fruits AS f2

WHERE f1.s_id = f2.s_id AND f2.f_id = ‘a1‘;

时间: 2024-10-01 15:54:56

mysql 基础篇-数据查询(1)的相关文章

MySQL语句测试——数据查询

MySQL语句测试--数据查询 3.4 数据查询 一.单表查询 /*1.选择表中的若干列,各个列的先后顺序和语句中列名从左到右的顺序一致 select 目标表达式 from 表名; */ /*(1)select 列名 from 模式名.表名;*/ select Sno,Sname from zyl.student; /*(2)若要查询全部列可用*代替*/ select * from student; /*(3)查询经过计算的值(目标表达式:列名/表达式/字符串常量/函数等)*/ select S

mysql 基础篇5(mysql语法---数据)

6 增删改数据 -- ********一.增删改数据********* --- -- 1.1 增加数据 -- 插入所有字段.一定依次按顺序插入 INSERT INTO student VALUES(1,'张三','男',20); -- 注意不能少或多字段值 -- INSERT INTO student VALUES(2,'李四','女'); -- 插入部分字段 INSERT INTO student(id,NAME) VALUES(2,'李四'); -- 1.2 修改数据 -- 修改所有数据(建

mysql基础篇 - SELECT 语句详解

基础篇 - SELECT 语句详解 SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELECT 语句的用法. 二.实验准备 在正式开始本实验内容之前,需要先下载相关数据库表,搭建好一个名为mysql_shiyan 的数据库(有三张表:department,employee,project),并向其中插入数据. 具体操作如下,首先输入命令进入 /home/shiyanlou/Desktop 目录: cd /

MySQL基础篇(02):从五个维度出发,审视表结构设计

本文源码:GitHub·点这里 || GitEE·点这里 一.数据场景 1.表结构简介 任何工具类的东西都是为了解决某个场景下的问题,比如Redis缓存系统热点数据,ClickHouse解决海量数据的实时分析,MySQL关系型数据库存储结构化数据.数据的存储则需要设计对应的表结构,清楚的表结构,有助于快速开发业务,和理解系统.表结构的设计通常从下面几个方面考虑:业务场景.设计规范.表结构.字段属性.数据管理. 2.用户场景 例如存储用户基础信息数据,通常都会下面几个相关表结构:用户信息表.单点登

mysql基础篇 - 数据库及表的修改和删除

基础篇 - 数据库及表的修改和删除 修改和删除 一.实验简介 本节实验中,我们将学习并实践如何对数据库的内容做修改,删除,重命名等操作. 二.实验准备 在正式开始本实验内容之前,需要先下载相关代码. 该代码可以新建两个数据库,分别名为 test_01 和mysql_shiyan ,并在 mysql_shiyan 数据库中建 4 个表(department,employee,project,table_1),然后向其中插入数据. 具体操作如下,首先输入命令进入 /home/shiyanlou/De

MySql基础教程(三)——查询训练

在MySql两轮基础的学习之后,来一波实战演习... 三张表:学生表,课程表,成绩表. 建表详细信息见 MySql基础教程(一)

MySQL基础篇(01):经典实用查询案例,总结整理

本文源码:GitHub·点这里 || GitEE·点这里 一.连接查询 图解示意图 1.建表语句 部门和员工关系表: CREATE TABLE `tb_dept` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `deptName` varchar(30) DEFAULT NULL COMMENT '部门名称', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT C

MySQL基础篇(04):存储过程和视图,用法和特性详解

本文源码:GitHub·点这里 || GitEE·点这里 一.存储过程 1.概念简介 存储程序是被存储在服务器中的组合SQL语句,经编译创建并保存在数据库中,用户可通过存储过程的名字调用执行.存储过程核心思想就是数据库SQL语言层面的封装与重用性.使用存储过程可以较少应用系统的业务复杂性,但是会增加数据库服务器系统的负荷,所以在使用时需要综合业务考虑. 2.基本语法格式 CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characterist

MySQL基础篇(05):逻辑架构图解和InnoDB存储引擎详解

本文源码:GitHub·点这里 || GitEE·点这里 一.MySQL逻辑架构 1.逻辑架构图 基于下面的逻辑架构图,可以大致熟悉MySQL各个架构组件之间的协同工作关系. 很经典的C/S架构风格,即客户端/服务端模式. 2.分层描述 客户端连接 通常会进行连接池管理,连接用户权限认证,安全管理等操作. 可以通过如下命令查看连接配置信息:SHOW VARIABLES LIKE '%connect%';可以看到最大连接和每个连接占用的内存等相关配置. 核心功能 第二层架构封装MySQL一系列核心