数据库_MySQL单表_查询_多表

01.MySQL数据库_DQL查询语句_简单查询:
1).查询的基本语法:select 筛选字段名  from 表名  where 条件;
2).查询所有商品:
select * from product;
3).查询部分字段:
select category_id,pname,price from product;
   说明:字段可以不按定义顺序出现,多个字段中间用逗号分隔,最后一个字段后面没有逗号。
4).查询结果使用别名:
select category_id as '商品类别' , pname as '商品名称' , price as '价格' from product;
   说明:别名是查询结果的列别名,并没有更改表中原列名。
5).去掉重复值:
例如:查询所有的商品价格,对于重复的价格,只显示一次即可。
select distinct price from product;
6).对查询结果进行运算:
例如:查询所有的商品信息,要求显示商品名称,价格,并且要求所有价格 + 100显示:
select pname,price + 100 from product;
   说明:只对查询结果更改,并不修改表中记录的值。
02.MySQL数据库_DQL查询语句_条件查询:
1).比较运算符:
1).">":大于--用于"数值类型","日期类型"
例如:
1).查询所有商品价格大于2000元的商品
select * from product where price > 2000;
2).查询所有商品生产日期大于2017年02月01日的商品
select * from product where proDate > '2017-02-01';
2)."<":小于--用于"数值类型","日期类型"
例如:
1).查询所有商品价格小于2000元的商品
select * from product where price < 2000;
2).查询所有商品生产日期小于2017年02月01日的商品
select * from product where proDate < '2017-02-01';
3).">=":大于等于--用于"数值类型","日期类型"
例如:
1).查询所有商品价格大于等于2000元的商品
select * from product where price >= 2000;
2).查询所有商品生产日期大于等于2017年02月01日的商品
select * from product where proDate >= '2017-02-01';
4)."<=":小于等于--用于"数值类型","日期类型"
例如:
1).查询所有商品价格小于等于2000元的商品
select * from product where price <= 2000;
2).查询所有商品生产日期小于等于2017年02月01日的商品
select * from product where proDate <= '2017-02-01';
5)."=":等于--用于"数值","日期","字符串(中文)"
例如:
1).查询商品价格等于5000元的商品
select * from product where price = 5000;
2).查询商品生产日期等于2017年02月02日的
select * from product where proDate = '2017-02-02';
3).查询商品名称等于'面霸'的商品
select * from product where pname = '面霸';
6)."!=":不等于--用于"数值","日期","字符串(中文)"
例如:
1).查询商品价格不等于5000元的商品
select * from product where price != 5000;
2).查询商品生产日期不等于2017年02月02日的
select * from product where proDate != '2017-02-02';
3).查询商品名称不等于'面霸'的商品
select * from product where pname <> '面霸';
   或者
   "<>":
2).select ... from ... where ...执行顺序:
1).form
2).where
3).select
3).逻辑运算符:
1)."and" : 逻辑与,语义"并且"
例如:查询所有价格在2000元以下,并且生产日期在2017-02-01以后。
select * from product where price < 2000 and proDate > '2017-02-01';
2)."or"  : 逻辑或,语义"或者"
例如:查询所有的服装类、食品类商品
select * from product where category_id = '服装' or category_id = '食品';
3)."not" : 逻辑非,语义"不是...."
例如:查询所有的价格不是5000元的商品
select * from product where price != 5000;
或者
select * from product where not price = 5000;
4).范围查询:between(包含) ... and(包含) ....--用于"数值类型","日期类型"
例如:
1).查询商品价格在2000元(包含)到5000元(包含)的商品
select * from product where price >= 2000 and price<= 5000;
或者
select * from product where price between 2000 and 5000;
2).查询所有2017年02月份生产的商品
select * from product where proDate >= '2017-02-01' and proDate <= '2017-02-30';
或者:
select * from product where proDate between '2017-02-01' and '2017-02-30';
注意:between 小值 and 大值;
5).多个值的精确判断:in查询(用于代替多个or的判断)--用于任何数据类型
例如:
1).查询商品pid等于2,3,5,7,8,9的商品
select * from product where pid = 2 or pid = 3 or pid = 5 or pid = 7 or pid = 8 or pid = 9;
或者:
select * from product where pid in (2,3,5,7,8,9);
2).查询商品名称是"劲霸","面霸"的商品
select * from product where pname = '劲霸' or pname = '面霸';
或者:
select * from product where pname in ('劲霸','面霸');
6).模糊查询:like 通配符:1)"%":通配任何长度的任何字符 2)"_":通配1个长度的任何字符。
例如:
1).查询商品名称中包含"霸"字的商品:
select * from product where pname like '%霸%';
2).查询商品名称以"花"开头的商品
select * from product where pname like '花%';
3).查询2017年02月生产的商品
select * from product where proDate like '2017-02%';
4).查询商品名称是两个字,以"霸"结尾的商品
select * from product where pname like '_霸';
5).查询商品名称以"花"开头,但全名是四个字符的商品
select * from product where pname like '花___';
7).NULL状态查询:
1).添加时:
insert into product values(14,'篮球',230,null,'2017-10-10');//不是null值,是null状态
   查询时:
select * from product where category_id is null;
2).添加时:
insert into product values(15,'足球',280,'','2017-10-10');//不建议这样添加
   查询时:
select * from product where category_id = '';
03.MySQL数据库_DQL查询语句_排序:
1).例如:查询所有商品信息,要求按价格升序(从小到大)排序
select * from product order by price asc;
2).排序语句:
order by 排序字段名 asc(升序--默认) / desc(降序)
3).可以操作"数值类型","日期类型"(如果是中文字符串,就按照字符在字符集中的顺序排序)4
4).对多列进行排序:
   例如:查询所有商品,要求按价格降序排序,如果价格相同,按生产日期升序排序。
select * from product order by price desc,proDate asc;
   注意:多列排序的执行规则:先按第一列排序,如果第一列的值不同,就忽略第二个排序列。
                             如果第一列的值相同,然后再按第二列排序。
5).编写顺序:
select ... from ... where .... order by ....
6).执行顺序:
1).from
2).where
3).select
4).order by
04.MySQL数据库_DQL查询语句_聚合函数
1).count(*/列名):统计指定列不为NULL的记录行数;(为NULL状态的行不参与计数,所以建议使用count(*))
例如:查询统计所有"电脑"类商品共有多少种:
select count(*) from product where category_id = '电脑';
2).sum(列名--数值类型):计算指定列的"数值"和,如果指定列类型不是数值类型,那么计算结果为0;
例如:查询所有"服装"类商品的总价格:
select sum(price) from product where category_id = '服装';
3).max(列名--数值类型,日期类型):计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
例如:查询"服装"类商品中最贵的价格
select max(price) from product where category_id = '服装';
      查询"服装"类商品中最大的生产日期
select max(proDate) from product where category_id = '服装';
4).min(列名--数值类型,日期类型):计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
例如:查询"服装"类商品中最低的价格
select min(price) from product where category_id = '服装';
      查询"服装"类商品中最早的生产日期
select min(proDate) from product where category_id = '服装';
5).avg(列名--数值类型):计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
例如:查询"服装"类商品的平均价格
select avg(price) from product where category_id = '服装';
注意:此结果= sum() / count() ,而count()是不计算NULL的记录的。
6).注意事项:
聚合的查询结果都是计算后的结果,跟某行记录无关。
所以:聚合函数查询的查询结果字段,只能包含"聚合函数"的结果,不要包含其他字段。否则也是无意义的。
05.MySQL数据库_DQL查询语句_分组查询:
1).需求:一条语句查询每个类别商品的总价格是多少?
select category_id,sum(price) from product group by caetgory_id;
2).分组语句:
group by 分组字段名;
3)."分组字段"中的"相同值"的记录,将会作为一组。
4)."分组"通常只是"手段",目的是在分组的基础上,进行"聚合汇总"查询。
5)."分组查询"的结果字段中(select ....) 只能出现"分组字段","聚合字段",不能出现其他字段,否则是无意义的。
6).练习:
学员信息表:
id 姓名 性别 年龄 学科
1 张三 20 JavaEE
2 李四 22 JavaEE
3 王五 23 IOS
4 周六 22 JavaEE
   练习1:查询学员男同学和女同学各有多少人?
select 性别,count(*) from 学员信息表 group by 性别;
结果:
性别 count(*)
3
1
   练习2:查询每科学员的同学各多少人
select 学科,count(*) from 学员信息表 group by 学科;
结果:
学科 count(*)
JavaEE 3
IOS 1
   练习3:查询每科学员的男、女同学各多少人?--对多列进行分组
select 学科 , 性别 , count(*) from 学员信息表 group by 学科,性别;
结果:
学科 性别 count(*)
JavaEE 2
JavaEE 1
IOS 1
7).编写顺序:
select ... from ... where ... group by ... order by ....
8).执行顺序:
1).from
2).where
3).group by
4).聚合函数
5).select
6).order by
06.MySQL数据库_DQL查询语句_having子句:
1).需求:查询每种商品的总价格,要求结果只显示总金额大于等于1000元的记录。
select category_id , sum(price) from product where sum(price) >= 1000 group by category_id;//错误的
   注意:对"聚合"后的结果进行筛选,不能使用where,因为where先执行,那时候还没执行聚合函数。
2).要对聚合函数的结果进行筛选,使用:having子句:
select category_id, sum(price) from product group by category_id having sum(price) >= 1000;
3).编写顺序:
select ... from ... where ... group by ... having ... order by ...;
4).执行顺序:
1).from
2).where
3).group by
4).聚合函数
5).having
6).select
7).order by
07.MySQL数据库_客户端工具SQLYog的简单操作
08.MySQL数据库_客户端工具SQLYog_数据库的备份和恢复:
1).备份和恢复的目的:
1).数据迁移:把我的数据库和数据给你;
2).数据备份:把数据库中的数据转出来,存储到一个文件中。
09.MySQL数据库_多表操作_为什么使用多表:
1).假如,我让你们做两个表格,要存储学员的信息(姓名,性别,年龄,科目),教师信息(姓名,性别,年龄,科目)
学员信息表:(从表)
id 姓名 性别 年龄 科目ID(外键)
1 张三 20 1
2 李四 22 2
3 王五 18 1
4 周六 28 1
教师信息表:(从表)
id 姓名 性别 年龄 科目ID(外键)
1 周日 30 1
2 周一 18 2
3 周二 33 1
科目表:(主表)
id 科目名称 创建日期 课时
1 JavaEE 2007-01-01 150
2 IOS 2008-01-01 120
2).两个概念:
1).主表:被其它表引用的表;
2).从表:引用主表的表。
3).从表引用主表,要引用主表的"主键"字段,这时,主表发生更改,从表中不需要做任何修改。
10.MySQL数据库_多表操作_外键的概念:
1)."从表"中引用主表中主键字段的字段,叫:外键字段
2).外键字段的取值:规则上,这个值必须在"主表"的"主键字段"中出现,否则应该是一个无效数据。
3).外键约束:为了防止在"外键"中出现"主表的主键字段没有的值",我们可以添加"外键约束",让数据库软件为我们监控"外键字段"的值
             必须要参考"主表的主键字段"的值。
4).创建外键约束:
alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);
例如:
alter table student add constraint fk_student foreign key (kmid) references km(id);
5).删除外键约束:
alter table 从表 drop foreign key 外键名称
例如:
alter table student drop foreign key fk_student;
11.MySQL数据库_多表操作_表和表之间的关系:
当一个表引用另一个表之后,表和表之间就产生了关系:
1).一对多关系【应用频率最高】:
1).例如:商品表、类别表(前提:一个商品只属于一个类别),从主表(类别)到从表(商品表)--1对多,反向:从表--主表:1对1:这时:就可以说它们的关系是"1对多的关系"
         商品表:(从表)
id 商品名称 价格 生产日期 类别ID(外键)
类别表:(主表)
id 类别名称 描述
2).建表规则:在从表中创建一个"外键字段",引用主表的主键。
2).多对多关系【应用频率较低】:
1).例如:订单和商品,一个订单可以包含多个商品,一个商品可以出现在多个订单中,这时就可以表示为:多对多的关系
订单表:
id 订单号 订单日期   商品总额   
1 d001 2017-10-11 1000       
2 d002 2017-10-11 2000       
商品表:
id 商品名称 价格 生产日期  
1
2
3
4
5
..
40
订单_商品的关系表:
订单ID 商品ID
1 1
1 2
1 3
1 4
2 1
2 3
2 4
2).多对多关系,实际上就是通过"关系表"拆分为两个"1对多"关系;
3).一对一关系【基本不用】:两个表可以合为一个表
客户表:
id name province  city address 客户ID
1 zhangsan 北京   北京 顺义   1
2 lisi ...............................
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值