1、数据库:
数据库是按照数据结构来组织、存储和管理数据的仓库
2、mysql数据库的命令:
启动数据库: net start mysql;【以管理员方式运行cmd】
关闭数据库:net stop mysql;【以管理员方式运行cmd】
连接数据库:mysql -uroot -p;回车之后输入密码
所有的mysql语句必须以分号结束;
建议关键字大写
(1)查看所有数据库
show databases;
(2)创建新的数据库
create database 数据库名;
(3)使用数据库
use 数据库名;
(4)创建表:
语法:
create table 表名(
字段1 类型,
字段2 类型,
字段3 类型
);
例:
create table student(
Name varchar(50),
Sex varchar(5),
Age int
);
(5)查看数据库中所有的表(先用use 数据库名):
show tables;
(6)删除表
dorp table 表名;
(7)主键
primary key;(**唯一且不为空**)
(8)主键的自动增长
auto_increment;
(9)外键( 还需要声明外键关联哪一个表的哪一个键)
foreign key
(10) mysql语句中的新增
int类型的字段不用单引号引起来,varchar 类型就需要使用单引号引起来
① 默认全部字段的新增(按照创建表时候的字段顺序,每个都要赋值)
insert into 表名 values (所有字段的值);
② 选择字段新增:
insert into 表名(字段1,字段2,...) values (字段1的值,字段2的值...);
③ 批量新增:
insert into 表名(字段1,字段2,...) values (字段1的值,字段2的值,...),(字段1的值,字段2的值,...), (字段1的值,字段2的值,...);
(11)mysql语句中的修改:
语法①:
update 表名 set 字段名 = 要修改的值;
这里要注意:表中所有的字段值都会修改,不能修改单条;
语法②:
update 表名 set 字段名 = 要修改的值 where 条件;
语法③:
update 表名 set 字段名1 = 要修改的值1,字段名2 = 要修改的值2 where 条件;
语法④(适用于多个条件都需要满足的):
update 表名 set 字段名1 = 要修改的值1,字段名2 = 要修改的值2 where 条件1 and 条件2;
语法⑤适用于多个条件满足其中一个的):
update 表名 set 字段名1 = 要修改的值1,字段名2 = 要修改的值2 where 条件1 or 条件2;
(12)mysql语句中的查询:
① 查询表中所有字段
【*】默认显示被查询表中的所有字段
语法:
select * from 表名;
② 查询表中个别字段
语法:
select 字段名1,字段2 from 表名;
③ 满足多条件
语法:
select * from 表名 where 条件1 and 条件2;
④ 满足多条件中的一个
语法:
select * from 表名 where 条件1 or 条件2;
⑤ >,>=,<,<=,!=的使用
语法:
select * from 表名 where 条件1 > 一个值;
select * from 表名 where 条件1 >= 一个值;
select * from 表名 where 条件1 < 一个值;
select * from 表名 where 条件1 <= 一个值;
select * from 表名 where 条件1 != 一个值;
(13)mysql语句中的删除:
① 删除表中的所有数据
语法:
delete from 表名;
②根据条件删除
多条件都满足删除:
delete from 表名 where 条件1 and 条件2;
多条件满足一个删除:
delete from 表名 where 条件1 or 条件2;
**
(15)创建表中的约束:
**
【1】非空约束:not null
作用:限制表中的字段,必须要输入,不能为空;
用法:
CREATE TABLE studentOne(
字段1 类型 约束
);
例:
CREATE TABLE studentOne(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL, -- 非空约束
);
【2】默认值约束:default 值
作用:当添加值时,没有添加该字段时,采用默认值
用法:
CREATE TABLE studentOne(
字段1 类型 约束
);
例:
CREATE TABLE studentOne(
id INT PRIMARY KEY AUTO_INCREMENT,
sex VARCHAR(50) DEFAULT '女', -- 默认约束
);
【3】避免重复的约束:unique
作用:自动检测设置了避免重复值的字符段的值是否重复
用法:
CREATE TABLE studentOne(
字段1 类型 约束
);
例:
CREATE TABLE studentOne(
id INT PRIMARY KEY AUTO_INCREMENT,
idcard VARCHAR(50) UNIQUE, -- 避免重复约束
);
(16)别名:
语法:
【1】select 字段 as '别名' from 表名;
【2】select 字段 '别名' from 表名;
**as可以以省略**
(17)函数:
【1】平均值:avg(所求的字段)
语法:
select avg(所求的字段)from 表名 where 条件;
【2】计算数量:count(字段)或count(*)
语法:
select count(字段名) from 表名 where 条件;
语法:
select count(*) from 表名 where 条件;
差异: count(字段名)根据字段统计,当字段值为NULL时,默认不统计当前数据。
【3】最大: max(字段)
select max(字段名) from 表名;
【4】最小: min(字段)
select min(字段名) from 表名;
【5】求和: sum(字段)
select sum(字段名) from 表名;
(18)模糊查询:
关键字:like
%: %表示任意多个字符
_: _表示任意一个字符
用法:
select * from where 条件
例子:
SELECT * FROM 表名 WHERE 字段 LIKE '周%';-- 查询姓周的
SELECT * FROM 表名 WHERE 字段 LIKE '周_';-- 查询姓周后面跟一个字的
SELECT * FROM 表名 WHERE 字段 LIKE '%周%';-- 查询字段中有周字的
(19)分组:
分组查询:
关键字:group by
【1】没有条件:group by 直接跟在查询语句表名之后
SELECT COUNT(*) AS '别名' FROM 表名 GROUP BY 字段;
【2】有条件:group by 跟在查询语句表名后面
SELECT COUNT(*) AS '别名' FROM 表名 WHERE 条件 GROUP BY 字段;
分组排序:
关键字:order by
语法:order by 字段[asc/desc] ,不写默认使用asc
asc:升序,从小到大
desc:降序,从大到小
例:
SELECT * FROM 表名 ORDER BY 字段;
SELECT * FROM 表名 ORDER BY 字段 DESC;
注意:排序和分组同时都需要的话,分组在前,排序在后;
(20)范围查询
【1】 In: 查询其中符合要求的值
用法:
select * from 表名 where score in (80,90);**查询成绩要么是80要么是90**
【2】 Between and
用法:
select * from 表名 where score Between 80 and 90;查询成绩>=80并且<=90
(21)判断空值:
【1】is null:为空
用法:
SELECT * FROM 表名 WHERE 字段 IS NULL;查询性别为空的人
【2】is not null:不为空
用法:
SELECT * FROM 表名 WHERE 字段 IS NOT NULL;查询性别不为空的人
(22)子查询:
SELECT * FROM class WHERE id = (SELECT classId FROM student WHERE name = '哈哈');
(23)内连接查询:
关键字:inner join
【1】语法:
`select * from 左表 inner join 右表 on 左表.关联字段 = 右表.被关联字段;`
【2】进阶语法:
select * from 左表 as 别名1 inner join 右表 as 别名2 on 别名1.关联字段 = 别名2.被关联字段;
【3】带条件语法:
select * from 左表 as 别名1 inner join 右表 as 别名2 on 别名1.关联字段 = 别名2.被关联字段 where 别名1.字段 = 值;
注意:内连接显示有关联的所有信息,表中关联字段为null的,不显示
(24)外连接:
【1】左外连接:left join
语法:
select * from 左表 left join 右表 on 左表.关联字段 = 右表.被关联字段;
进阶语法:
select * from 左表 as 别名1 left join 右表 as 别名2 on 别名1.关联字段 = 别名2.被关联字段;
带条件语法:
select * from 左表 as 别名1 left join 右表 as 别名2 on 别名1.关联字段 = 别名2.被关联字段 where 别名1.字段 = 值;
注意:左外连接显示left join左边表的所有信息,左边表的关联字段如果为空,那被关联表的字段己null值显示
【2】右外连接:right join
语法:
select * from 左表 right join 右表 on 左表.关联字段 = 右表.被关联字段;
进阶语法:
select * from 左表 as 别名1 right join 右表 as 别名2 on 别名1.关联字段 = 别名2.被关联字段;
带条件语法:
select * from 左表 as 别名1 right join 右表 as 别名2 on 别名1.关联字段 = 别名2.被关联字段 where 别名1.字段 = 值;
注意:右外连接显示right join 右边表的所有信息,左表要是没有关联右表,那左表的数据全部以null显示
**
(25)交叉连接:
**
关键字: cross join
语法1:SELECT * from 表1,表2;
语法2:SELECT * from 表1 cross join 表2;
(26)分页查询:
关键字:limit
SELECT * FROM 表名 LIMIT 0,2;-- 从第一开始,选两条
SELECT * FROM 表名 LIMIT 1;-- 从第一开始,选一条,第一个数字可以省略