学海无涯,不要过早为自己定界
这篇文字主要是对自己一个前端学习数据库MYSQL的笔记做了一些整理温习!
更为详细的 数据库MYSQL介绍
更好的 数据库MYSQL的入门
这篇文章主要写了
1.数据库MYSQL的可视化操作
2.基本上会遇到的所有SQL语句
我还准备了SQL语句练习库 在下载安装Navicat后,可通过Navicat将它导入数据库,然后对照着我的笔记敲敲学学!
数据库可视化软件------Navicat
数据库里边存放的是表,表与表之间是有关联的,而且可以对表进行相关操作(增,删,改,查);
表格的行代表记录(一条数据)
列代表字段或属性
主键能唯一的代表某一条记录的列(或者叫字段)主键不能重复
外键:表中的某一列的值是别的表的主键的值,该列就叫外键
( 设置外键时要注意2个表的这俩列,必须类型保持一致,且一张表外键的值,必须在另一张表里有)
MySQL常用的俩种表格类型
MyISAM 强调的速度 不支持外键 也不支持事务
InnoDB 稳定性 支持外键 也支持事务!(5.2以上默认InnoDB)
工具创建数据库
选好名字,字符集,最后一个不用管。
Navicat 操作mysql数据库是可视化的,即你对数据库的一些操作都是可见的,十分简单,个人认为,对我们这种初学着十分方便
数据库的导入和导出
数据库命令 (不区分大小写,不能中文)
SELECT、INSERT、 UPDATE 、DELETE
select insert update delete
查询 插入 删除 修改
mysql -uroot -p密码 进入mysql
库的操作
show databases; 查看所有数据库
create database 名字 创建数据库
use 姓名 进入数据库
drop database 名字 删除数据库
表的操作
show tables; 查看所有表格
create table 表名(id int,name varchar(10),age int); 创建表
创建一个姓名(整型)名字(固定10长度字符串类型),年龄(整型)的表格
drop table 名字; 删除表
行的操作
添加记录 []代表可省略;
insert into 表名 values('值1 ','值2 ','值3 '......................)
insert [into] 表名[(列名)] values(值列表); 如果省略了(列名)那么主键的位置必须留下,用空‘’隔开;
删除记录
delete from 表名 [where 条件 ];如果没where则将表中所有记录删除;
这段命令将h5class表中 id为15的记录;
查询记录
select 字段名1,字段名2.../* form 表名[where 条件];
这段代码将查询teacher表中name为侯晋龙的记录的cid和classname;
这段代码将查询teacher表中的所有记录;
select 字段名1 as 别名1,字段名2 as 别名2 ... form 表名[where 条件]; 给字段重命名
自定义字段
列的操作
修改字段
update 表名 set 字段名1=‘值1’,字段名2=‘值2’........... [where 条件 ]; 如果没where则将表中所有该字段的值改变
这段代码将h5class表中所有id>4的记录的cid字段的值改为2;
select查询 之[where条件 ] 同样适用于update更新和delete删除
xsb表
在xsb表中查询所有age>=20的记录; 一定范围
在xsb表中查询所有age不等于20的记录; 不等于 !=
在xsb表中查询所有age不等于20的记录; 不等于 <>
and与
在xsb表中查询所有19<=age<=20的记录的xm和age字段;
闭合区间
在xsb表中查询所有19<=age<=20的记录的xm和age字段;
&&(并且)或 and 或 between.. and..
or或
在xsb表中查询所有szx='计算机系'和szx='信息系'的记录;
倆个区间
在xsb表中查询所有szx='计算机系'和szx='信息系'的记录;
||(或者 )或 or 或 in()
在xsb表中查询所有szx='计算机系'和szx='信息系'的记录;
not取反
在cjb表中查询所有不在80<cj<90的记录;
在cjb表中查询所有不在 80>=cj<=90的记录;
在xsb表中查询所有不属于szx='计算机系'和szx='信息系'的记录;
在xsb表中查询和张海的szx相同的记录; 通过in可将一个查询结果当作另一个查询的条件
通配符
在xsb表中查询xm的第一个字是王的记录的xm,sex,age 模糊查询 like ‘关键字%’
在xsb表中查询xm的第一个字是王的名字总过只有2个字的记录的xm,sex,age ‘- ’一个字符
在xsb表中查询xm的中有一个小字的记录的xm,sex,age ‘%’零个或多
Mysql 限制行数查询
limit m,n m(位置从0开始 不写默认0)n(要显示的条数) 在网页中的分页需要用到这条命令。
没写limit
Mysql 查询排序
(order by 字段名【asc(升序不写默认)/desc(降序)】)
表cjb
查询cj最高的前三个
查询 cj在80到95之间 最高的一个
小结:select */字段名/count(字段名/*) from 表名 where 条件() order by 字段名 [asc/desc] limit [m],n
整合数据
统计
统计记录个数 count(*/字段)
统计总分数 sum(字段)
统计cjb 中课程是c02的总成绩
计算平均数 avg();
计算课程“c01”的学生的考试平均成绩。
select avg(成绩) from 成绩表 where 课程号='c01'
max/min 最大最小
课程号位c02的cj最大值
分组group by
select sex from xsb where group by order by limit 顺序
统计男生女生分别有多少人
先按性别分组然后计算人数
完整版
统计学习每门课程的人数
单独查kch='c01'的课程的人数
查询人数>=3 的课程;先查询人数 再用having对结果过滤
having与where的区别 having对查询结果进行二次过滤 where对表中记录进行过滤
基本书写顺序select */字段名/count(*/字段名 )/sum(字段名 )/mix(字段名 ) from 表名 [where 条件 group by 字段名 having 条件 order by 字段名 limit m,n];
多表查询
--内联接 inner join 只有当表里边的记录满足on条件时才出现在查询结果
select * from 从表 as c inner join 主表 as z on c.外键=z.主键
--左外联接 left join 左边不管满足不满足on条件表里记录都会显示在查询结果,右边表满足显示,不满足显示null
select * from 左边 as c left join 右边 as z on c.外键=z.主键 (最关注的表写在左边);
从cjb和kcb通过俩表中kch关联查询cj>90的的记录中的cj,c.kch(相同的加前缀),kcm
从来倆张表中查出所有李勇的记录
从通过学生表与成绩表的学号(xh)的关联查出李勇的总分数
关联 学生表和成绩表通过xh关联 成绩表和课程表通过kcm关联,然后查询kcm为vb的学生的xm,age,cj,kcm 然后按降序排序