欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库的查询

程序员文章站 2024-03-15 20:16:30
...

数据库查询

语法

select [distinct]  * | 列名,列名  from 表  where 条件

简单查询(SELECT  selectfrom

  1. 查询指定字段信息

    select 字段1,字段2,...from 表名;

    例如:

    select id,zname from zhangwu;

  2. 查询表中所有字段

           select * from 表名;

     例如:

           select * from zhangwu;

            注意:使用"*"在练习、学习过程中可以使用,在实际开发中,不推荐使用。原因,要查询的字段信息不明确,若字段数量很多,会导致查询速度很慢。

       3.distinct用于去除重复记录

         select distinct 字段 from 表名;

          例如:

                    select distinct zmoney from zhangwu;

      4.别名查询,使用的as关键字,as可以省略的.

别名可以给表中的字段,表设置别名。 当查询语句复杂时,使用别名可以极大的简便操作。 

 

     表别名格式:

          select * from 表名 as 别名; 或  select * from 表名 别名;

     列别名格式: select 字段名 as 别名 from 表名;  或 select 字段名 别名 from 表名;

例如

表别名:

select * from zhangwu as zw;

列别名:

select zmoney as m from zhangwu;

select zmoney m from zhangwu;

5.我们在sql语句的操作中,可以直接对列进行运算。

select (1+2);

例如:将所有账务的金额+10000元进行显示.

select zname,zmoney+10000 from zhangwu;

条件查询

数据库的查询

select [distinct]*(所有)|字段名,...字段名 from 表名 [where 条件过滤]

比较运算符

>  <  >=  <=  =  <>  (!=)   is null 是否为null

逻辑运算符

与 and  或 or   非 not

模糊查询

like

      %:任意多个字符       _:单个字符

#查询商品名称为“花花公子”的商品所有信息:
    SELECT * FROM product WHERE pname = '花花公子'

#查询价格为800商品
SELECT * FROM product WHERE price = 800

#查询价格不是800的所有商品
SELECT * FROM product WHERE price != 800
SELECT * FROM product WHERE price <> 800
SELECT * FROM product WHERE NOT(price = 800)

#查询商品价格大于60元的所有商品信息
SELECT * FROM product WHERE price > 60;


#查询商品价格在200到1000之间所有商品
SELECT * FROM product WHERE price >= 200 AND price <=1000;
# 小的数值必须写在前边,可以多日期进行查询
SELECT * FROM product WHERE price BETWEEN 200 AND 1000;

#查询商品价格是200或800的所有商品
SELECT * FROM product WHERE price = 200 OR price = 800;
SELECT * FROM product WHERE price IN (200,800);

#查询名称以'香'开头的所有商品
SELECT * FROM product WHERE pname LIKE '香%';

#查询名称含有'霸'字的所有商品
SELECT * FROM product WHERE pname LIKE '%霸%';

#查询出名称中是五个字的所有商品
SELECT * FROM product WHERE pname LIKE '_____';

#查询名称第二个字为'想'的所有商品
SELECT * FROM product WHERE pname LIKE '_想%';

#查询商品名称是null的值
SELECT * FROM product WHERE pname IS NULL;

#查询商品名称不是null的值
SELECT * FROM product WHERE pname IS NOT NULL;

排序查询

通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。

格式:

SELECT * FROM 表名 ORDER BY 排序字段 ASC|DESC;

ASC 升序 (默认)

DESC 降序

#1.使用价格排序(升/降序)
SELECT * FROM product ORDER BY price DESC;
#2.显示商品的价格(去重复),并排序(降序)
SELECT DISTINCT price FROM product ORDER BY price DESC;
#4.显示商品的价格大于1000的商品所有信息,并排序(降序)
SELECT * FROM products WHERE price >1000 ORDER BY price DESC; 
#5.根据商品名称排序 默认使用编码表排序
SELECT * FROM products ORDER BY pname DESC;

distinct(去重)的用法: 放在查询select之后  他后面跟去重后要显示的内容,order by后面跟要排序的选项

聚合查询

之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。

今天我们学习如下五个聚合函数:

  1. count:统计指定列不为NULL的记录行数;
  2. sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
  3. max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
  4. min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

      5.avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

格式:select 聚合函数(字段) from 表名

#1 查询商品的总条数

SELECT COUNT(*) FROM products;-- 13

SELECT COUNT(pname) FROM products;--  (对非数值字段进行统计时忽略空值)

SELECT COUNT(price) FROM products;-- 13

#2 查询价格大于200商品的总条数

SELECT COUNT(*) FROM products WHERE price >200;

#3. 对商品表查询,对所有的金额求和计算

SELECT SUM(price) FROM products;

# 对非数值字段求和结果为0

SELECT SUM(pname) FROM products;

#4.对商品表查询,对所有的金额计算平均值

SELECT AVG(price) FROM products;

#5. 统计出商品表中价钱的最大与最小值

SELECT MAX(price),MIN(price) FROM products;

SELECT MAX(price)最大值,MIN(price)最小值 FROM products;

分组查询

分组查询是指使用group by字句对查询信息进行分组。

  1. 格式:

SELECT 字段1,字段2… FROM 表名GROUP BY分组字段 HAVING 分组条件;

分组的字段必须写在 select 后面

分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。

  1. having与where的区别:
    1. having是在分组后对数据进行过滤.

where是在分组前对数据进行过滤

    1. having后面可以使用分组函数(统计函数)

               where后面不可以使用分组函数。

需求:

    根据商品名称相同,对数据进行分组,对每组数据进行求和

SELECT pname,SUM(price) FROM products GROUP BY pname;

 

-- 需求:对分组求和的结果进行过滤,只显示求和结果大于1000的商品

-- 先查询出价格大于1000的商品,对大于1000的商品进行分组求和

SELECT pname,SUM(price) s FROM products GROUP BY pname

HAVING s>1000;

SELECT pname,SUM(price) s FROM products GROUP BY pname

HAVING SUM(price)>1000;

分页查询

可以使用关键字 limit m,n

m:可以变化页码1,2,3,4

n:固定不变的分页数(每页5条)

数据库的数据是从0开始

数据库的查询

--一共几页(向上取整)

select ceil(count(*)/6.0) from products;

-- 只要前5条数据

SELECT * FROM products LIMIT 5;

-- 要0开始到5结束的数据(第一页的数据)

-- 从0开始要5个数据

SELECT * FROM products LIMIT 0,5;

-- 要6开始到10结束的数据(第二页的数据)

-- 从6开始要5个数据

SELECT * FROM products LIMIT 5,5;

-- 要11开始到15结束的数据(第三页的数据)

-- 从10开始要5个数据

SELECT * FROM products LIMIT 10,5;

例:

SELECT * FROM zhangwu

-- 就要3条

SELECT * FROM zhangwu LIMIT 3

-- 从0开始要3条

SELECT * FROM zhangwu LIMIT 0,3

-- 从3开始要3条

SELECT * FROM zhangwu LIMIT 3,3

-- 从6开始要3条

SELECT * FROM zhangwu LIMIT 6,3