什么是MySQL?
由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开拓环境。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开拓,目前属于 Oracle 旗下产品。MySQL 是最盛行的关系型数据库管理系统之一,在 WEB 运用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 运用软件。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速率并提高了灵巧性。
MySQL所利用的 SQL 措辞是用于访问数据库的最常用标准化措辞。MySQL 软件采取了双授权政策,分为社区版和商业版,由于其体积小、速率快、总体拥有本钱低,尤其是开放源码这一特点,一样平常中小型网站的开拓都选择 MySQL 作为网站数据库。
a.关系型数据库
informix IBM+HP 政、运、银、军
db2 IBM 政、运、银、军
oracle oracle 集群 中大型企业
mysql oracle 互联网企业
sqlserver 微软
b.非关系型数据库
mongodb 大数据剖析
redis 缓存 新浪微博
cassandra facebook
2.Mysql数据库
a.根本
mysql的管理员:root
mysql的端口:3306
常用软件版本:5.5 5.6
b.管理mysql的工具
sqlyog(小海豚)
navicat
toad
dbeaver
c.命令
mysqld.exe mysql的主理事
mysql.exe mysql的客户端
d.客户端上岸
mysql
mysql -u root -p 管理员登录本地数据库
mysql -u root -h 127.0.0.1 -p 管理员登录ip为127.0.0.1的数据库
e.根本命令(登录后)
一个数据库软件中可以有多个数据库的数据
数据库是由表组成,表是由数据组成
show databases; 查看当前软件中有哪些数据库
select database(); 查看当前数据库的名字
use test; 切换当前数据库为test
show tables; 查看当前数据库中有哪些表
desc ecs_goods; 查看ecs_goods表的表构造
select from ecs_goods; 查看表ecs_goods中的所有数据
3.表
a.数据类型
字符类型 char varchar
数字类型 int
日期类型 date
把稳:char是定长、varchar是变长。
b.建表
语法:create table 表(
字段 数据类型,
字段 数据类型
...
);
创建表stu(学生),里面3个列,一个为name,字符类型,最多10个字符,一个为age,数字类型,一个为birth,日期类型
create table stu(
name char(10),
age int,
birth date
);
4.数据的新增
a.把稳
字符类型、日期类型必须加单引号
数字类型不用处理
列的数据类型和值的数据类型必须同等
b.向表中所有列新增数据
语法:insert into 表 values(值1,值2...);
向stu表中新增数据,name为 gogo,age为19,birth为2000-01-01
insert into stu values('gogo',19,'2000-01-01');
c.向表中指定列新增数据
语法:insert into 表(列1,列2) values(值1,值2);
向stu表中新增数据,name为simida
insert into stu(name) values('simida');
d.新增多条数据
INSERT INTO stu VALUES('a',10,'2018-01-01'),('b',20,'1998-09-09');
5.数据的删除
a.delete和truncate差异
delete 可以删除指天命据 删除数据可以找回 DML
truncate 只能删除全表 删除数据无法找回 DDL
b.delete
语法:delete from 表 where 条件;
删除stu表中name是gogo的所有数据
delete from stu where name='gogo';
删除stu表中所有数据
delete from stu;
c.truncate
语法;truncate table 表;
删除stu表中所有数据
truncate table stu;
6.SQL的分类
SQL:构造化查询措辞
DDL 数据库定义措辞 create atler drop truncate
DML 数据库操作措辞 insert update delete
DCL 数据库掌握措辞 grant revoke
DQL 数据库查询措辞 select
7.数据的修正
a.修正指天命据
语法:update 表 set 列=值 where 条件;
stu表中age为10的name修正为gaga
update stu set name='gaga' where age=10;
b.修正列中所有数据
语法:update 表 set 列=值;
stu表中age列设置为100
update stu set age=100;
8.数据的查询
a.分类
大略查询(1张表)
分组查询
子查询
多表查询
b.大略查询
语法:select 列 from 表 where 条件;
把稳:查询可以查询指定的列,指定的行,指定行的列
查询可以查询单个列也可以查询多个列
查询stu表中所有信息
select from stu;
select name,age,birth from stu;
把稳:代表所有列
查询stu表中name列的所有信息
select name from stu;
把稳:select 后面 from前面是和列干系的,where条件是和行干系的
c.where 条件
把稳:where后面跟的是真或者假,列的数据类型和值的数据类型必须同等
查询stu表中name为gaga的所有信息
select from stu where name='gaga';
查询stu表中age为100的所有信息
select from stu where age=100;
d.比较
>
<
=
>=
<=
!=
<>
查询ecs_goods表中市场价格高于2000的商品的名称和市场价格
selecct goods_name,market_price from ecs_goods where market_price>2000;
查询ecs_goods表中市场价格不即是4440的商品的所有信息
select from ecs_goods where market_price!=4440;
select from ecs_goods where market_price<>4440;
e.关系
and 同时知足条件
or 知足一个条件即可
not 不知足条件
查询ecs_goods表中市场价格大于2000并且小于3000的所有的商品信息
select from ecs_goods where market_price>2000 and market_price<3000;
查询ecs_goods表中商品名称是KD876或者市场售价高于3000的商品的所有信息
select from ecs_goods where goods_name='KD876' or market_price>3000;
f.区间
between ...and ...
把稳,小在前,大在后,包括两个端点
查询ecs_goods表中市场价格范围在2000和3000的所有信息
select from ecs_goods where market_price>=2000 and market_price<=3000;
select from ecs_goods where market_price between 2000 and 3000;
g.模糊查询
模糊查询一样平常是和字符类型一起利用
like
_ 一个字符
% 任意个字符
查询ecs_goods表中商品名称以诺基亚开头的所有信息
select from ecs_goods where goods_name like '诺基亚%';
查询ecs_goods表中商品名称以5结尾的所有信息
select from ecs_goods where goods_name like '%5';
查询ecs_goods表中商品名称是5个字符的商品名称
select goods_name from ecs_goods where goods_name like '_____';
h.空
空类似于未知数x,没有任何数据类型,没有任何数值,
null>null
null+1>null
null10000<null
空不能用于比较和运算,查询时候利用is null 或者is not null
查询stu表中age是空的所有信息
select from stu where age is null;
查询stu表中age不为空的所有信息
SELECT FROM stu WHERE age IS NOT NULL;
i.in
在...里面,知足条件的出结果
查询ecs_goods表中商品名称是KD876或者是诺基亚N85的所有信息
select from ecs_goods where goods_name in('KD876','诺基亚N85');
============================================================
多表查询
一张表无法知足条件时候,须要多张表
a.笛卡儿积
两张表没有做任何关联查询出来的语句
select from ecs_goods;
select from ecs_category;
select from ecs_goods,ecs_category;
笛卡儿积会导致数据量成倍增加,为了避免此类问题发生,须要利用内联查询、左联查询、右联查询
b.内联查询
语法:
select 列 from 表1,表2 where 表1.列=表2.列;
select 列 from 表1 inner join 表2 on 表1.列=表2.列;
关联
找关联列方法:
1.列名相同
2.浸染相同
3.主外键关系
查询商品名称是KD876的分类名称
1.剖析列
商品名称
分类名称
2.剖析表
goods_name ecs_goods
cat_name ecs_category
3.关联
select from ecs_goods,ecs_category
where ecs_goods.cat_id=ecs_category.cat_id;
4.过滤
select cat_name from ecs_goods,ecs_category
where ecs_goods.cat_id=ecs_category.cat_id
and goods_name='KD876';
查询分类名称是3G手机的商品名称和分类id
1.剖析列
分类名称
商品名称
分类id
2.剖析表
goods_name ecs_goods
cat_name ecs_category
cat_id ecs_goods ecs_category
3.关联
select from ecs_goods,ecs_category
where ecs_goods.cat_id=ecs_category.cat_id;
4.过滤
select goods_name,cat_id from ecs_goods,ecs_category
where ecs_goods.cat_id=ecs_category.cat_id
and cat_name='3G手机';--有问题
select g.goods_name,c.cat_id from ecs_goods g,ecs_category c
where g.cat_id=c.cat_id
and c.cat_name='3G手机'
查询商品名称是诺基亚开头的商品的商品名称、市场价格、分类名称
select t1.goods_name ,t1.market_price,t2.cat_name
from ecs_goods t1,ecs_category t2
where t1.cat_id=t2.cat_id
and goods_name like '诺基亚%';
查询分类名称是CDMA手机的商品的名称、市场价格
select ecs_goods.goods_name,ecs_goods.market_price from ecs_goods,ecs_category
where ecs_goods.cat_id=ecs_category.cat_id
and ecs_category.cat_name='CDMA手机';
4.jpg
a.select s#,grade from sc where c#='C2';
b.select sname from s where sname like 'D%';
c.
select s.s#,s.sname from s,sc,c
where s.s#=sc.s#
and sc.c#=c.c#
and c.cname='Maths';
d.
select s# from sc where c#='C2' or c#='C4';
1.jpg
a.select from test1 where department='打算机系' and place='北京';
b.update test1 set department='信息学院' where department='打算机系';
c.select t1.no,t1.name,t2.grade,t2.courses from test1 t1,test2 t2
where t1.no=t2.no
and t2.grade>=75;
左联查询、右联查询
create table a1(
a1 int
);
insert into a1 values(1),(2),(3);
create table a2(
a1 int,
a2 char(10)
);
insert into a2 values(1,'a'),(2,'b'),(4,'c');
左联:左表中数据都有,对应右表位置右表显示为空
右联:右表中所有数据都有
SELECT FROM a1 LEFT JOIN a2 ON a1.`a1`=a2.`a1`;
SELECT FROM a1 RIGHT JOIN a2 ON a1.`a1`=a2.`a1`;
子查询
一条SQL语句的实行依赖于其余一条SQL语句的实行结果
查询商品名称为KD876的分类名称是什么?
1.查询ecs_goods商品名称为KD876的cat_id
select cat_id from ecs_goods where goods_name='KD876';
2.查询ecs_category的cat_id为上面查询出来结果的cat_name
select cat_name from ecs_category where cat_id=(select cat_id from ecs_goods where goods_name='KD876');
查询市场价格最高的商品的名字
1.查出表中最高市场价格是多少
select max(market_price) from ecs_goods;
2.查出价格是上面查询出来结果的商品名称是什么?
select goods_name from ecs_goods where market_price=(select max(market_price) from ecs_goods);
补充:
max 最大
min 最小
avg 均匀
sum 求和
count 计数
7.jpg
1.
a.查询c表中知足条件的c#
select c# from c where cn='税收根本';
b.查询sc表中知足c#是上面查询出来结果的s#
select s# from sc where c# in(select c# from c where cn='税收根本');
c.查询s表中知足s#为上面查询出来结果的sn,s#
select sn,s# from s where
s# in(select s# from sc where c#
in(select c# from c where cn='税收根本'))
2.
select s# from sc where c#='C2';
select sn,sd from s where s# in(select s# from sc where c#='C2');
3.
select sn,sd from s where s# in(select s# from sc where c#!='C5');
2.jpg
1.
select a.name from student a,achievement b
where a.id=b.id and b.mark>85;
2.
select count() from achievement where mark>=90;
3.
insert into achievement values((select id from student where name='Robert'),80);
4.
update achievement set mark=87 where id=(select id from student where name='Rose');
5.
delete from achievement where id=(select id from student where name='Betty');
delete from student where name='Betty';
分组查询
按照某种属性进行分类统计
a.分组函数
max
min
avg
sum
count
分组函数一样平常是和分组一起利用,也可以单独利用
查询ecs_goods表中最高市场售价,最低市场售价
select max(market_price),min(market_price) from ecs_goods;
b.分组
语法:
select 列 from 表
where 条件
group by 分组条件
having 分组后过滤条件;
select cat_id from ecs_goods group by cat_id;
select cat_id,goods_name from ecs_goods group by cat_id;--x
select from ecs_goods group by cat_id;--x
查询每种分类id下面有多少种商品,哀求显示分类id,商品数量
select cat_id,count() from ecs_goods group by cat_id;
查询每种商品的最高市场价,哀求显示商品名称和最高市场价格
select goods_name,max(market_price) from ecs_goods group by goods_name;
查询每种商品的数量,哀求显示分类名称,商品数量
select b.cat_name,count() from ecs_goods a,ecs_category b
where a.cat_id=b.cat_id
group by b.cat_name;
末了有什么想跟小编说的可以再下面留言哟~