4. MySQL语法:DQL

准备工作
# 商品表
create table product(
	pid int primary key auto_increment, # 自增加
	pname varchar(20), # 商品名称
	price double, # 商品价格
	pdate date, # 日期
	cid int # 分类ID
);

# 目录表
create table category(
	id int primary key,
	cname varchar(100)
);

INSERT INTO product VALUES(NULL,'泰国大榴莲', 98, NULL, 1);
INSERT INTO product VALUES(NULL,'泰国大枣', 38, NULL, 1); 
INSERT INTO product VALUES(NULL,'新疆切糕', 68, NULL, 2); 
INSERT INTO product VALUES(NULL,'十三香', 10, NULL, 2); 
INSERT INTO product VALUES(NULL,'泰国大枣', 20, NULL, 2); 
insert into product values(null,'泰国大枣',98,null,20); #没有对应 
insert into product values(null,'iPhone手机',800,null,30);#没有对应

INSERT INTO category VALUES(1,'国外食品'); 
INSERT INTO category VALUES(2,'国内食品'); 
INSERT INTO category VALUES(3,'国内服装');
完整DQL语法顺序
SELECT DISTINCT
	<select_list>
FROM
	<left_table> <join_type>
JOIN <right_table> ON <join_condition>
WHERE
	<where_condition>
GROUP BY
	<group_by_list>
HAVING
	<having_condition>
ORDER BY
	<order_by_condition>
LIMIT <limit_number>
简单查询
  1. 查询所有的商品
select * from product;
  1. 查询商品名和商品价格
select pname, price from product;
  1. 别名查询,使用的as关键字,as可以省略的
1. 表别名
select * from product as p;
2. 列别名
select pname as pn from product;
  1. 去掉重复值
select distinct price from product;
  1. 查询结果是表达式(运算查询):将所有商品的价格+10进行显示
select pname, price+10 from product;
条件查询
  1. 查询商品名称为十三香的商品所有信息
select * from product where pname = '十三香';
  1. 查询商品价格>60的所有的商品信息
select * from product where price > 60;
比较运算符> >= < <= = <>大于、大于等于、小于、小于等于、等于、不等于
between … and …显示在某一区间的值,包含头和尾
in (set)显示在in列表中的值, in (10, 20)
like ‘张_’模糊查询,like 语句中,% 代表零个或多个任意字符,_代表一个字符,
is null判断是否为空
逻辑运算符and多个条件同时成立
or多个条件任一成立
not不成立
排序
  1. 查询所有的商品,按价格进行排序(asc-升序,desc-降序)
select * from product order by price;
  1. 查询名称有新的商品的信息并且按价格降序排序
select * from product where pname like '%新%' order by price desc;
聚合函数
  • 特点:只对单列进行操作

  • 常用的聚合函数:

    1. 求某一列的和
    sum()
    2. 求某一列的平均值
    avg()
    3. 求某一列的最大值
    max()
    4. 求某一列的最小值
    min()
    5. 求某一列的元素个数
    count()
    
  1. 获得所有商品的价格的总和:
select sum(price) from product;
  1. 获得所有商品的平均价格
select avg(price) from product;
  1. 获得所有商品的个数
select count(*) from product;
分组
  1. 根据cno字段分组,分组后统计商品的个数
select cid, count(*) from product group by cid;
  1. 根据cno分组,分组统计每组商品的平均价格,并且平均价格>60;
select cid, avg(price) from product group by cid having avg(price) > 60;
  • 注意事项:
    • select语句中的列(非聚合函数列),必须出现在group by 子句中
    • group by 子句中的列,不一定要出现在select语句中
    • 聚合函数只能出现select语句中或者having语句中,一定不能出现在where语句中。
分页查询
  • limit关键字不是SQL92标准提出的关键字,它是MySQL独有的语法。

  • 分页分为逻辑分页和物理分页

    逻辑分页:将数据库中的数据查询到内存之后再进行分页。
    物理分页:通过LIMIT关键字,直接在数据库中进行分页,最终返回的数据,只是分页后的数据。
    
  • 格式:

    select * from table limit [offset] rows
    
    • offset: 偏移量

    • rows: 每页多少行记录

子查询
  • 定义
子查询允许把一个查询嵌套在另一个查询当中。

子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询。

子查询可以包含普通select可以包括的任何子句,比如:distinct、group by、 order by、limit、join和union等;

对应的外部查询必须是以下语句之一:select、insert、update、delete.
  • 位置
select中、from后、where中

group by和order by 中无实用意义
其他查询语句
union 集合的并集(不包含重复记录)
union all 集合的并集(包含重复记录)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值