MySql教程

mysql基础

本文主要是介绍mysql基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

创建数据库`

CREATE DATABASE python

查看数据库`

show create  DATABASE python

切换数据库

USE  test

查看当前数据库

SELECT DATABASE();

修改数据库

ALTER DATABASE  库名

删除数据库

drop database  python

查看所有数据库

show DATABASES

示例

– 创建完整创建
– UNSIGNED 无符号
– primarykey 主键
– auto_increment 自动增长

create table stus(
  id int UNSIGNED PRIMARY key auto_increment,
	name VARCHAR(20),
	age VARCHAR(20)
);

数据增删改查

新增数据

1.数据值需要和表的字段一一对应(数据个数及数据类型)
2.主键列是自增长,插入时需要占位,通常使用0或者default或者null来进行占位,插入成功后以实际数据为准

增加数据

新增多条数据可以用逗号隔开

INSERT INTO stus VALUE(0,'张三',20)

增加部分数据值

INSERT into stus(name,age)VALUES('李四',30)  

修改数据

UPDATE stus set name='张三五' where id=2;

– 删除数据

delete from stus where  id =3

扩展删除

其他的数据 删除方法(删除所有数据,不重置数据主键字段的计数)

DELETE from  stus  

(截断表)删除数据,保留表结构 (删除所有数据,重置数据主键字段的计数)

truncate TABLE stus  

drop tabel 表名 (删除表,删除表数据和表结构)

 drop TABLE stus

查询数据

条件查询

select * from  students 

查询年龄在大于10的并且来自1班的 (逻辑运算符 and与 or或 not 非)

select * from students where age >10 and class='1班'

补充需求 查询年龄在大于10的不来自1班的

select * from students where not class='1班' and  age >10

not 与 and 和 or(左边两边双边链接) 不同之处在于not 只对自己右侧的条件右作用(单边链接)

select * from students where   age >10 and not class='1班' 

模糊查询 like
示例:查询数据中带有南字的地区

select * from  students where homeown like '%南%' (查询字段中包含“南“的字段)
select * from  students where homeown like '%南' (查询字段中以“南“的字段结尾)
select * from  students where homeown like '_南' (查询字段中只有一个字符的且包含"南"的字段)

查询年龄在 10 和30岁之间的
非连续性 in()
in常用于where表达式中,其作用是查询某个范围内的数据。

select * from  students where age in ('20','18')

连续性的between … and …

select * from  students where age between 10 and 30

注意在MySQL中,只有显示为null的 才为空!其余空白可能是空格/制表符/换行符
判断空 为空 is null 不为空 is not null

select * from students where card is null;

– 查询不为空的卡号
关键字:is not null

select * from students where card is not NULL;

排序
– order by 列名 asc 从小到大排序 升序
– order by 列名 desc 从大到小排序 降序

– 按照年龄从大到小排序,年纪相同时,按照班级排序

select * from  students order by age DESC;
select * from  students order by age DESC,class asc;

默认升序排序为升序 ,asc 可以省略

select * from  students order by age DESC,class ;

– 聚合函数:系统用来统计函数
– 不能在where 子句中使用

– count() 查询记录数
– max() 查询最大值
– min() 查询最小值
– sum() 求和
– avg() 求平均值

学生总数

select COUNT(*) from students

– 注意 统计数据总数,建议使用* 如果使用某一天特定字段。肯定会造成数据总数错误

select COUNT(*) from students

** 最高年龄的学生**

select max(age) from students

最小年龄

select min(age) from students

avg 年龄平均

select avg(age) from students

总数

 select sum(age) from students where homeown like '%南%'

一次性查询

select count(*),max(age),MIN(age) ,avg(age) FROM students

GROUP BY 分组

查询有几个班级
注意:在使用哪个字段进行分组操作,那么只字段该字段可以在* 的位置使用
分组操作和聚合函数配合使用

select COUNT(*)   from students group by class ;
select  class,COUNT(*)   from students group by class ;

– 扩充
– having 后面的条件可以用聚合函数,where 后面不可以

– 注意 where 和having 的区别
– group by 和having 一般下需要配合使用
– group by 后边不推荐使用where 进行条件过滤
– having 后侧可以使用的内容与where 完全一致(比较运算符 逻辑运算符 /模糊运算符 模糊查询 /判断空)
– having 关键字后面允许使用聚合函数

查询当前表第5-10行的所有数据
分页 select * from students limit start ,count
limt 分页;start 起始行号 ;count :数据行数
计算机技术从0开始,因此start 默认的第一条数据应该为0
过度需求:获取前5条数据

select * from students limit 0,4;

注意:如果默认从第一条数据开始获取,则0可以省略

select * from students limit 5

需求

select * from students limit 4,6

扩展根据公式计算显示某页的数据
已知:每页显示m条数据,求:显示第n页的数据
– select * from students limit (n-1)*m,m

示例 每页显示4条数据,求展示2页的数据内容

select * from students limit 4,4

扩展二:分页
需求查询年龄最大的学生信息

SELECT * from students ORDER BY age DESC LIMIT 1

需求查询年龄最大前三位的学生信息

SELECT * from students ORDER BY age DESC LIMIT 3

内连接 innner JOIN
显示效果,两张表中有对应关系的数据都显示出来,没有对应关系的数据均不再显示

select * from goods 
inner join  category on goods.typeld=category.typeId

扩充:给表 起别名(缩短表名利于缩写 2用别名给表创建副本)

select * from goods  go
inner join  category ca on go.typeld=ca.typeId

扩展:内连接的另一种写法(旧式写法)

select *  from goods,category where goods.typeld=category.typeId

左连接
查询所有商品信息,包括商品分类

left joio
注意;如果要保证一张数据表的全部数据都存在,则一定不能选择内连接,
可以选择左连接或者右连接
说明 : 以left join 关键字为界。关键字左侧表为主表(都显示),
而关键字右侧的表为从表(对应内容显示,不对应为null)

select * from goods go
left join category ca on go.typeld=ca.typeId

扩展需求:以分类为主展示所有内容

select * from category ca
left join goods go on ca.typeId=go.typeld

查询所有商品分类及其对应的商品信息
说明 : 以right join 关键字为界。关键字右侧表为主表(都显示),
而关键字右侧的表为从表(对应内容显示,不对应为null)

select * from goods go 
right JOIN category ca on go.typeld=ca.typeId

扩充需求:查询所有商品信息及其对应分类信息

select * from goods go 
right JOIN category ca on go.typeld=ca.typeId

说明 :能够体现左右连接必要性的场景为:至少为三张表进行连接查询
注意: 实际工作中,最多也就三张表连接查询

自关联
前提 1 数据表自由一张 2数据表至少右两个字段之间有种联系
方式 :通过给表起别名的形式,将原本只有一张的数据表变为两张,
然后通过对应字段实现连接查询即可

河南所有的市
使用内连接

SELECT * from  areas a1 
INNER JOIN areas a2 on a1.aid=a2.pid 
where a1.atitle like '%河南省%'

左连接

SELECT * from  areas a1 
left  JOIN areas a2 on a1.aid=a2.pid 
where a1.atitle like '%河南省%'

查询河南省所有的市和区
想要实现三级新政单位显示,需求分别处理省和市及市和区(三表联查)

select * from areas a1 
left join areas a2 on a1.aid=a2.pid
left join areas a3 on a2.aid=a3.pid
where a1.atitle='河南省'

子查询
再一个select 玉娟中,嵌入了另外一个slect 语句,那么嵌入的select 语句称之为子查询语句
子查询是辅助主查询的,要么充当条件,要么充当数据源

查询
查询价格高于平均价格的商品信息
求取平均价

 select avg(price) from goods

说明: 充当子查询的语句需要使用括号括起来(运输优先级最高!)

 SELECT * from goods where price >(select avg(price) from goods)

查询所有来自并喜喜的商品信息,包括商品分类
子查询语句充当数据源

 seleCt * from goods where company='井タタ'
 select * from (select *  from goods go 
 left join category ca on go.typeld=ca.typeId) new  where new.company='井タタ';

注意连接查询的结果中,表和表之间的字段名不能出现重复,否正无法直接使用
解决:将重复字段使用别名加以区分(表名。*:当前所有字段)

  select * from (select go.*,ca.id cid,ca.typeId ctid,ca.cateName  from goods go 
 left join category ca on go.typeld=ca.typeId) new  where new.company='井タタ';
这篇关于mysql基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!