MySql单表查询数据

首先创建表

CREATE TABLE `fruits1` (
  `f_id` CHAR(10) NOT NULL,
  `s_id` INT(11) NOT NULL,
  `f_name` CHAR(30) NOT NULL,
  `f_price` DECIMAL(8,2) NOT NULL,
  PRIMARY KEY (`f_id`)
);

1.单表查询

**1.1查询所有字段**,在SELECT 语句中使用(*)通配符查询所有字段。
	语法格式如下:
		**select * from 表名;**

1.2查询指定字段

查询表中的某一个字段,语法格式为:
SELECT 查询的列名 FROM 表名;

1.3查询多个字段

语法:SELECT 查询的列名1,查询的列名2,...查询的列名N FROM 表名;

1.4查询指定记录

在SELECT语句中可以使用WHERE 子句可以对数据进行过滤,语法如下:
SELECT  字段1,字段2,....,字段N;
FROM 表名
WHERE 查询条件
注:WHERE 条件判断符------》等于”=“,不相等”<>“,”!=“,小于”<“,大于”>“,大于等于”>=“,小于或者等于"<=",BETWEEN"位于两值之间"

1.5带IN的关键字查询

IN操作符用来查询满足指定范围内的条件的记录,使用IN操作符,将所有的检索条件用括号括起来,检索条件之间用逗号隔开,只要满足条件范围内的一个值即为匹配项
例:查询A表中的a.id为100,200,的记录,语句如下
SELECT * FROM A WHERE a.id IN (100,200); 
相反可以使用Not查询不再范围内的
SELECT * FROM A WHERE a.id NOT IN (100,200); 

1.6带BETWEEN AND 的范围查询

BETWEEN AND用来查询某个范围内的值,该操作符需要两个参数,即范围的开始和结束值,如果字段值满足指定的范围的查询条件,则这些记录被返回。

1.7带LIKE的字符匹配查询

通配符是一种在sql的where条件子句中拥有特殊意思的字符,sql语句中支持多种通配符,可以和LIKE一起使用的通配符有“%”和“_”;
1.7.1百分号通配符“%”,匹配所有任意长度的字符,甚至包括零字符
	例:查询所有以“b”字符开头的水果,sql语句如下

SELECT f_id,f_name FROM fruits WHERE f_name LIKE ‘b%’;

注:该语句查询结果返回所有以“b”开头的id和name,不管“b”后面有多少个字符。
在搜索匹配时通配符“%”可以放在任意位置。

例:查询f_name种包含g的记录,语句如下

SELECT f_id,f_name FROM fruits WHERE f_name LIKE ‘%g%’;

例::查询f_name种以b开头以y结尾的记录,语句如下:

SELECT f_id,f_name FROM fruits WHERE f_name LIKE ‘b%y’;

1.7.2 下划线通配符’‘ ,一次只能匹配任意一个字节
**"
“与”%"的区别,”%“可以匹配多个字符,”“只能匹配单个字符,若要匹配多个字符,则需要使用多个”“;**

例:查询以字符y开头后面有三个字目的记录;
SELECT f_id,f_name FROM fruits WHERE f_name LIKE ‘y___’;

1.8 查询空值

注:空值不同于0,也不同于空字符串,在查询语句中使用IS NULL子句,查询某字段内为空的记录

创建表---》读者自行插入数据

CREATE TABLE `customers` (
  `c_id` int(11) NOT NULL AUTO_INCREMENT,
  `c_name` char(50) NOT NULL,
  `c_address` char(50)  NULL,
  `c_city` char(50) NULL,
  `c_zip` char(50) NULL,
  `c_contact` char(5) NULL,
  `c_email` char(50) NULL,
  PRIMARY KEY (`c_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

例:查询表中c_email 为空记录的c_id,c_name,c_email字段值;

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

注:与IS NULL 相反的是NOT IS NULL,该关键字查询不为空的记录;

例:查询表中c_email 不为空记录的c_id,c_name,c_email字段值;

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

1.9带and的多条件查询

可以使用AND 连接两个甚至以上的条件。多个条件表达式之间用AND 分开。
例:
在fruits表中查询s_id=101,并且f_price大于等于5的水果价格和名称;

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

1.10 带OR关键字的多条件查询

OR也可以连接两个甚至多个查询条件,多个条件表达式之间用OR分开
例:查询s_id=101或则s_id=102 的水果供应商的f_price,f_name;
SELECT sid,f_name,f_price FROM fruits WHERE s_id=101 OR s_id=102;

1.11查询结果不重复
在select 语句中可以使用DISTINCT 消除重复值的记录值,语法如下:
select DISTINCT 字段名 FROM 表明;

例:查询frutits表中s_id字段的值,返回s_id 字段值且不重复;
select DISTINCT s_id FROM fruits;

1.11 对查询结果排序

mysql语句中可以通过order by 子句,对查询的结果进行排序;

1.11.1 单列排序

例:查询fruits表的f_name 字段值,并对其排序
SELECT f_name FROM fruits ORDER BY f_name;

1.11.2 多列排序

例:查询fruits表的f_name ,f_price字段值,并对其先f_name,f_price排序
SELECT f_name,f_price FROM fruits ORDER BY f_name,f_price;

1.11.3 指定排序方向

默认情况,查询数据按字母升序进行排序(A-Z),还可以使用 order by 对查询结果进行降序(z-a),通过关键字DESC实现。

例:查询fruits表的f_name ,f_price字段值,并对其f_price降序排序
SELECT f_name,f_price FROM fruits ORDER BY f_price DESC;

例:查询fruits表的f_name ,f_price字段值,对f_price升序序排序,按f_name升序排序:
SELECT f_name,f_price FROM fruits ORDER BY f_price DESC,f_name;

1.12 分组查询

分组查询是对数据按照某个或多个字段进行分组,mysql中使用Group by 关键字对数据进行分组,基本语法如下:
【GROUP BY 字段】 【HAVING <条件表达式>】
字段值为纪念性分组是所依据的列名称:“HAVING <条件表达式>” 指定满足表达式限定条件的结果将被显示。

1.12.1 创建分组

GROUP BY 经常与集合函数一起使用:MAX(),MIN();COUNT();SUM();AVG(); 

例:根据s_id 对fruits 表中的数据进行分组,sql语句如下:
SELECT s_id,COUNT(*) AS Total FROM fruits GROUP BY s_id;

例:根据s_id 对fruits 表中的数据进行分组,将每个供应商的水果名称显示出来,sql语句如下:
SELECT s_id,GROUP_CONCAT(f_name) AS NAMES FROM fruits GROUP BY s_id;
注:group_concat()函数将每个分组中的名称显示出来了,和count()相同;

1.12.2 使用HAVING 过滤分组

GROUP BY可以和HAVING 一起限定显示记录所需满足的条件,只有满足条件的分组才会被显示出来
例:根据s_id 对fruits 表中的数据进行分组,并显示水果种类大于1的分组信息,sql语句如下:

SELECT s_id,GROUP_CONCAT(f_name) AS NAMES FROM fruits GROUP BY s_id HAVING COUNT(f_name)>1;

知识点:HAVING关键字和Where 关键字都是用来过滤数据,两者什么区别?
HAVING在数据分组之后进行过滤来选择分组。
WHERE在分组之前用来选择记录。
另外where 排出的记录不在包括在分组中。

1.12.3 在GROUP BY 子句张使用WITH ROLLUP

使用WITH ROLLUP 关键字之后,在所有查出的记录之后增加一条记录,该记录查询出所有记录的总和,即统计记录数量。
例:根据s_id 对fruits 表中的数据进行分组,并显示记录数量,sql语句如下:
SELECT s_id,COUNT(*) AS Total FROM fruits GROUP BY s_id WITH ROLLUP;

1.12.4 多字段分组

使用GROUP by 进行多字段分组,关键字后面跟需要分组的字段,分组层次从左到右
例:根据s_id 和f_name对fruits 表中的数据进行分组,并显示记录数量,sql语句如下:
SELECT * FROM fruits GROUP BY s_id,f_name;

1.12.5 GROUP BY 和ORDER BY 一起使用

首先创建表-》读者可以自行插入数据

CREATE TABLE `orderitems` (
  `o_num` int(11) NOT NULL,
  `o_item` int(11) NOT NULL,
  `f_id` char(10) NOT NULL,
  `quantity` int(11) NOT NULL,
  `item_price` decimal(8,2) NOT NULL,
  PRIMARY KEY (`o_num`,`o_item`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

例:查询订单价格大于100的订单号和总订单价格,sql语句如下

SELECT o_num,SUM(quantity * item_price) AS orderTotal FROM orderitems GROUP BY o_num HAVING SUM(quantity*item_price) >=100 ORDER BY orderTotal;


注:GROUP BY子句按订单号对数据进行分组,sum()函数便可以返回总订单价格,HAVING()子句对分组数据进行过滤,使用order by 进行排序。
ROLLUP与ORDER BY子句相互排斥,不能同时使用;

1.12.6 使用LIMIT限制查询结果的数量(分页查询)

使用LIMIT 关键字 语法如下:
LIMIT [位置偏移量,] 行数

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

注:mysql查询下表第一个数代表0,即是和数组一样查询从零开始。

例:显示fruits 表查询结果返回第五个开始,长度为三的记录:
SELECT * FROM fruits LIMIT 4,3;

1.13 使用集合函数查询

| 函数 | 作用 |
| AVG() | 平均值 |
| COUNT() | 行数 |
| MAX() | 最大值 |
| MIN() |- 最小值 - |
| SUM() | 求和 |

1.13.1 COUNT()函数

  • COUNT(*)计算表中总的行数,不管某列有数值或者为空值
  • COUNT(字段名) 计算指定列下总的行数,计算时将忽略空值的行。

例:查询customers表中的总的行数
SELECT COUNT(*) FROM AS cust_num FROM customers;

例:查询customers表中的电子邮箱的行数
SELECT COUNT(c_email) FROM AS email_num FROM customers;

例:查询customers表中使用COUNT() 函数统计不同订单号中订购的水果种类 ,sql语句如下:
SELECT o_num,COUNT(f_id) FROM orderitems GROUP BY o_num;

1.13.2 sum()函数

sum()函数是一个求和函数,返回指定列值的总和。

例:在orderitems表中查询30005号订单的水果总量;
SELECT SUM(quantity) AS item_total FROM orderitems WHERE o_num=30005;

例:在orderitems表中使用sum()统计不同订单中订购的水果总量:
SELECT o_num,SUM(quantity) AS item_total FROM orderitems GROUP BY o_num;

1.13.3 AVG()函数

AVG函数 通过计算返回的行数和每一行数据的和,求得指定列数据的平均值

例:在fritus 表中,查询s_id=103的供应商的水果价格的平均值,sql语句如下:
SELECT AVG(f_price) AS avg_price FROM fruits WHERE s_id=103;

AVG可以与GROUP BY一起使用,计算每个分组的平均值;
例:在fritus 表中,查询每一个供应商的水果价格的平均值,sql语句如下:
SELECT s_id,AVG(f_price) AS avg_price FROM fruits GROUP BY s_id

1.13.4 MAX()函数

MAX()函数返回指定列的最大值

例:在fruits 表中查询价格最大的水果
SELECT MAX(f_price) AS max_price FROM fruits

max()也可以和GROUP BY 关键字一起使用,求每个分组中的最大值。
SELECT s_id,MAX(f_price) AS max_price FROM fruits GROUP BY s_id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值