初始mysql数据库
alter table 表名 convert to character set gbk;
1.概念
1.1 DB database数据库 存数据
2. 数据库分类:
关系型数据库(sql):
mysql,Orcale,Sql Server,DB2,SQLlite
非关系型数据库(NoSQL)not only
Redis,MongDB
3.DBMS(数据库管理系统)处理数据
数据库的管理软件,科学有序维护获取数据
~~ Ctrl+R mspaint 画图工具~~
4.MySQL 简介:
前瑞典MySQL AB公司
后属于Oracle旗下产品
navicat软件使用
查询IP地址:win+R ipconfig
2操作数据库
操作数据库>表>表中数据
mysql不区分大小写、
2.1操作数据库(了解)
创建 create database [if not exists]库名;
删除数据库 drop database [if exists] kuming;
使用数据库 use 库名;-------库名为特殊字符用``票号
查看所有的数据库 show 库名;
数据库的列类型
数值:从小到大
·
create databases kuming;
show databases;
drop database kuming;
2.2 数据库列的类型
数值
- tinyint 十分小的数据 一个字节
- smallint 较小的数据 2个字节
- mediumint 中等大小的数据 三个字节
- int 标准的整数 4个字节 常用的int
- bigint 较大的数据 8个字节
- float 浮点数 8个字节
- double 浮点数 8 个字节
- decimal 字符串形式的浮点数 金融计算一般使用
字符串
- char 字符固定大小 0~255
- **varchar 可变字符串 0~65535 常用String **
- tinyint 微型文本 2^8-1
- text 文本串 2^16 -1
时间日期 Java.util.Date
- data YYYY-MM-DD 日期 格式
- time HH:mm:ss 时间格式
- datatime YYYY-MM-DD HH: mm:ss 最常用的时间格式
- timestamp 时间戳 1970.1.1到现在的毫秒数
- year 年份表示
null
- 没有值 未知
- 不要用null运算
2.3数据库的字段属性(重点)
Unsigned
- 无符号的整数
- 声明该列不能为负数
zerofill
- 0填充的
- 不足的位数,使用0来填充,int(3),5……005
自增
- 通常理解为自增,自动在上一条记录的基础+1 (默认)
- 通常用来设置唯一的主键~ index 必须是整数类型
- 可自定义设置主键自增的起步值和步长
非空 null not null
- 假设设置 not null,如果不给它赋值,就会报错!
- null,如果不填写值,默认就是null
默认
操作表
# 注意点 ,使用英文() 表的名称和字段尽量用``
#字符串使用单引号括起来!
#所有的语句后加 ,----英文
#最后一个不用加
/* comment '名' 注释
auto_increment 自增
default '名' /// default null 默认值
primary key 主键 一般一个表有一个唯一的主键
*/
create table if not exists `stedents`(
`id` int(4) not null auto_increment comment `学号`,
`name` varchar(30) not null default '匿名'
primary key(`id`)
)engine=innodb default charset=utf-8;
create table [if not exists] `表名`(
`字段名` 列类型 [注释][索引][注释],
`字段名` 列类型 [注释][索引][注释],
....
`字段名` 列类型 [注释][索引][注释]
)[表类型][字符集设置][注释]
3.mysql数据管理
3.1外键(了解)
创建:
方式一:创建表时创建
方式二;创建表的时候没有外键
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IXpqBulf-1637144354165)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20211029140955795.png)]
alter table 表 ADD
alter table 'employees'
add constrainf 'FK_departmentid' foreing
key('departmemtid') references 'departments' (departmentid);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4lGGA2P9-1637144354169)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20211029141156892.png)]
4.DQL数据查询
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W4rdCfXg-1637144354171)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20211105210755379.png)]
4.1指定查询字段
语法: select 字段,… from 表名
字段名不见名知意可以起别名(字段名as新名from表名as新表名
select 字段 from表明
查询全部学生:select *from student;
查询指定字段 select ‘字段名’ ,’字段名‘ ,… from student
给字段起别名,也可以给表其别名:select ’Name’ AS 姓名,‘ID’ AS 学号 from student AS 学生表
##函数 拼接字符串concat(a,b)
select concat ('姓名:',Name) AS 新姓名 froms tudent
--发现重复数据,去重 ==distinct==
select distinct 'ID' from employees;
4.2数据库的列(表达式)
语法:select 表达式 from表名
select version() --查询版本
select 299*3-3 as 计算结果 ---用来计算
select @@auto_increment_increment ---咨询自增步长
------学习成绩+1分
select 'studentscores'+1 AS '提分后'from result
4.3 where语句
作用:检索数据中符合条件的值
搜索的条件由一个或者多个表达式组成!结果 布尔值
1.逻辑运算符
运算符 | 语法 | 描述 |
---|---|---|
and && | a and b a&&b | 与 |
or || | a or b a||b | 或 |
not ! | not a ! a | 非 |
--查询收入在两千~3000
select employeesid,'income' from salary
where income>=2000 and income>=3000;
------模糊区间查询
select employeesid,'income' from salary
where income between 2000 and 3000;
-----取反
select employeesid,'income' from salary
where income!=2000;
模糊查询:比较运算符
运算符 | 语法 | 描述 |
---|---|---|
is null | a is null | 如果操作符为null,结果为真 |
is not null | a is not null | 如果操作符不为null,结果为真 |
between | a between b and c | 若a在b和c之间,则结果为真 |
like | a like b | SQL匹配,如果a匹配b,则结果为真 |
in | a in(a1,a2,a3) | 假设a在a1,或者a2…其中的某一个值有,结果为真 |
=====模糊查询=====
select 'employeeid' 'Name' from employees
where Name like '王%'
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oF5erRrj-1637144354174)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20211026220432525.png)]
单引号不要忘写
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4PbZSZAD-1637144354176)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20211026220819770.png)]
====null not null====
--查询note为空的的部门--
select note from departments
where departmentid=''OR departmentid IS NULL
--where 'zifucuan' is null
4.4联表查询join
join( 链接的表) on (判断的条件)连接查询
where等值查询
思路:
-
分析需求,分析查询的字段来自哪些表(连接查询)
-
确定运用哪种连接方式 7种
确定交叉点 (数据相同的)
判断 kc.课程号=xs
----全连接查询----
select distinct kc.课程名,xs_kc.课程号
from kc , xs_kc
where kc.课程名=xs_kc.课程号;
-----join连接----
---1.内连接 笛卡尔积 inner join
---2.
on用于批量,where用于单个
on不会筛选主表信息,
操作 | 描述 |
---|---|
inner join | IF 表中至少有一个匹配,就返回行 |
left join | 即使右表中没有匹配,也会从左表中返回所有的值 |
right join | 即使左表中没有匹配,也会从右表中返回所有的值 (没有–null值) |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DA1wUJEm-1637144354177)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20211027195849404.png)]
from a left join b on(条件)
自连接----自己的表和自己的表链接
核心:一张表拆为两张一样的表 即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hf2ZHRuZ-1637144354178)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20211105091152120.png)]
操作:查询对应子类与父类的关系
--查询父类信息
select a.'categoryid' AS'父栏目', b.'categoryid' AS'子栏目'
from 'category' AS a,'category' AS b
where a.'categoryid' = b.'categoryid' ;--链接条件
4.6子查询
where (值是计算出来的)
本质:在where语句中嵌套一个子查询语句
(由立即外)
where (select* from)
5.mysql函数
5.1常用函数
#数学运算
select ABS(-5) #绝对值
select ceiling(9.8)#向下取整
select floor(98.8)#向上取整
select rand() #返回一个0~1之间的随机数
select sing(10)#判断一个数的符号 0-0 负数返回-1 正数返回1
#字符串函数
select char_length('加油')#字符串长度
select concat('我','是','你')# 拼接字符串
select insert('我like你',2,4,'喜欢')# 查询,从某个位置开始替换某个长度
select lower('Txy')#转成小写字母
select upper('Txy')#转成大写字母
select instr('txy','t')#返回第一出现的子串的索引
select replace('坚持就能成功','坚持','努力')#替换出现的制定字符串
select substr('坚持就能成功',4,3)# 返回指定的字符串(原字符创,截取的位置,截取的长度)
select reverse('清晨我上马')#反转字符串
#查询姓 周 的同学,并将姓改为 zhou 显示在屏幕
select replace (NAME,'周','zhou') from employees
where name like '周%';
#时间 和日期函数!!!!
select current_date() #获得当前日期
select CURDATE() #获得当前日期
select now() #获得当前的时间
select localtime #本地时间
select sysdate() #系统时间
#系统
select system_user()
select user()
select version()
5.2聚合函数
# 聚合函数
#sount()三种 都能统计表中的数据(想查询一个表中有多少记录,用count())
select count(name) from employees;
#count(指定列) 会忽略所有的null值
select count(*) from employees;
#count(*) 不会忽略null值 计算行数
select count(1) from employees;
#count(1) 不会忽略null值,本质 计算行数
select sum(`income`) as 总和 from salary;
复习
顺序很重要
select 去重 要查询的字段
from 表名(注意:表和字段可以区别名)
xxx join 要连接的表 on 等值判断
where (具体的值 or 子查询语句)
group by (通过哪个字段排序的字段名)
Having (过滤分组后的信息,条件和where是一样的,位置不同)
Order By (通过哪个字段排序)[降序/升序]
limit startindex,pagesixe