MYSQL查询DQL&多表关系

– 使用数据库day02
USE day02;

sql简单查询语句:
使用关键字 select(查询) from(从) where(哪里)

格式一:查询指定的列
	select 列名1,列名2... from 表名;

– 查询商品名称和商品价格的所有信息
SELECT pname,price FROM product;

格式二:查询所有列的数据
	select 列出所有的列 from 表名;
	select * from 表名;
注意:
		工作很少用,查询的数据多,效率慢

SELECT pid,pname,price,category_id FROM product;
SELECT * FROM product;

格式三:过滤重复的数据
	select distinct 字段1,字段2.. from 表名;
注意:
		distinct关键字之后只有一个字段,那么就会过滤掉这个字段中重复的数据
		distinct关键字之后如果有多个字段,那么多个字段必须同时满足才会过滤掉

– 查询商品价格,过滤掉重复的价格
SELECT DISTINCT price FROM product;

格式四:别名查询
1.给表起别名:多表查询时使用
	select *|字段 from 表名 [as] 别名;
2.给表中的字段起别名
	select 字段1 [as] 别名,...字段n [as] 别名 from 表名;
注意:
		1.别名只是对查询的结果临时起一个名字,不会改变表中原有的名字
		2.别名中如果有特殊符号或者空格,那么必须使用引号包裹起来

条件查询语句:

格式:
		select 字段|* from 表名 [where 条件]
1.比较运算符
		基本的比较运算符: >,<,>=,<=,=,<>(!=)
		表示查询区间的: between...and 并且的关系,相当于 >= && <=
		表示多个条件的: in(....) 或者关系 in(10,20)  10 || 20
		表示为空的:is null
		模糊查询:使用关键字like
			%:多个任意字符
			_:1个任意字符
2.逻辑运算符:
			与: and &&
			或: or ||
			非: not !

使用 between...and 优化sql语句
注意:
	1.小的值要写在前边,大的值写后边
	2.可以对时间的区间进行查询  '2018-01-01' 到 '2018-09-14'
	
	模糊查询:使用关键字like
		%:多个任意字符
		_:1个任意字符

*/
**排序查询语句:**对查询的结果进行排序

使用关键字: order by [ASC]|DESC
格式:
	select *|字段 from 表名 [where 条件] order by 被排序字段 [ASC]|DESC;
	ASC:升序,不写默认
	DESC:降序
注意:
		无论sql语句多么复杂,排序语句必须写在sql语句的末尾

/*
聚合查询语句:对某列的数据进行查询,结果返回一个单一的值,会忽略null值

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

格式:
	select count(字段|*),sum(字段),max(字段),min(字段),avg(字段) from 表名;

/*
分组查询语句:
格式:
select 被分组的字段,(求和,平均值,个数,最大,最小) from 表名 [where 条件] group by 被分组的字段 [having 条件]

注意:被分组的字段,一般都写在select语句的后边,作为查询条件,方便查看结果
	where:用于分组前进行条件过滤
	having:用于分组后,对分组的数据进行条件过滤

– 按照商品类别分组,统计各个分组商品的个数,只查询每组商品价格大于200的商品
例子:
– 先where过滤,在分组,在统计
SELECT category_id,COUNT(*) FROM product WHERE price>200 GROUP BY category_id;

– 按照商品类别分组,统计各个分组商品的个数,且只显示统计个数等于3的信息
– 先where过滤,在分组,在统计,在having过滤
SELECT category_id,COUNT() FROM product GROUP BY category_id HAVING COUNT()=3;

分页查询语句(了解)
使用关键字:limit
格式:
只要前n条数据
select *|字段 from 表名 limit n;

	分页查询
		select *|字段 from 表名 limit m,n;
		m:每页开始行的索引,变化的
		n:每页显示的数量,不变的
注意:
			数据库行的索引从0开始,列的索引从1开始

1对多关系
建表原则:从表使用主表的主键作为外键

添加外键约束:
格式:使用修改表结构,添加列
	alter table 从表名 add [constraint 外键名称] foreign key(从表中的外键字段) references 主表名(主键);

作用:保证数据的准确性和完整性
	主表中有的数据,从表可以有,可以没有
	主表中没有的数据,从表中也不能有
	删除主表中的数据,必须保证从表没有使用

*/
删除外键约束:使用修改表结构,删除列
alter table 从表名 drop foreign key 外键名称;

商品表和订单表的多对多关系

建表原则:创建一张中间表,使用两个主表的主键作为外键
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值