1. 实现数据持久化
2. 使用完整的管理系统统一管理,易于查询
相关概念DB(数据库): 存储数据的仓库,用于保存数据
DBMS(数据库管理系统):管理操作数据库
常见的数据库管理系统 MySQL.Oracle.DB2.等
SQL(结构化查询语言):用于与数据库交互的语言
特点 1.简单易学
2.几乎所有DBMS都支持SQL
MySQL的使用:MySQL服务的启动与停止:
方式一:直接操作电脑服务端
方式二: 以管理员的身份运行命令操作符
基础语法:1.查看当前所有的数据库
show databases
2.打开指定的库
use 库名
3.查看当前库内所有的表
show tables
4.查看指定库的所有表
show tables from 表名
5.创建表
create table 表名(
列名 数据类型,
列名 数据类型,
列名 数据类型
)
6.查看表的结构
desc 表名
图像化用户界面客户端:SQLyogDQL语句(查询语句):
select 字段名,字段名
from 表名
where 筛选条件 (用于筛选)
having 用到前面查询结果来筛选
group by 字段名 (用于分组)
order by 字段名 asc升序/desc降序 (用于排列顺序)
select *
from 表名 查询指定表的所有数据
可以后接as 别名 或 空格 别名来取别名,字段名和表名都可以取
可以在select后加distinct用于去掉重复项
between and可用于判断是否在之间(包含等于)
employee_id BETWEEN 100 AND 120;
count()计数,常用count(*)来计个数,常和分组合用
SELECT COUNT(*),location_id
FROM departments
GROUP BY location_id;
1. concat(字段名,字段名。。。)用于连接各列
SELECt CONCAt(last_name,first_name) AS 姓名
FROM employees;
PS:加号+只能用于运算,若是非数字加减则会转换成数字若不能转化则按0运算
2. isnull(字段名,替代品)用于判断改项是否为null,如果为null则用替代品替代
SELECt IFNULL(`commission_pct`,0) AS 奖金率
FROM employees;
3. in()判断是否为括号里的一项
WHERe job_id IN('IT_PrOG' , 'aD_VP');
4. like 判断是否为指定字符串,%表示任意多个字符,_表示任意一个字符
WHERe first_name LIKE '%_%';
5. length(字段名)返回指定字段的字节长度
LENGTH(last_name)
字符串类:
ps:字符串下表从0开始
6. upper(字符)变大写 lower (字符)变小写
7. substr(string,下标) 截取下标后的所有字符
substr(string,下标 ,长度) 截取下标后指定长度的字符
8. trim(string1,string2)在string1里去掉string2,但只能去掉两边的
trim(string)则为删除空格
9. lpad(string,长度,string)左填充指定字符到指定长度,但长度更小则会删除
rpal(string,长度,string)为右添加
10. replace(string,string1,string2)将string里的string1换成string2
11. instr(string,string1)在string里找string1并返回索引否则返回0
数字类函数:
12. floor(数字)舍去小数点后的数字取整 ceil(数字)向上取整
13. truncate(数字,位数)保留小数点后几位,不足的补0
14. mod(数字1,数字1)取余,并且只与数字1的正负有关
例如 mod(-10,3)为-1,mod(10,-3)为1
15. round(数字,保留位数)四舍五入
ceil(数字)向上取整
日期类:16. now()显示当前时间
17. year(now())显示当前年 month(now())显示当前月
18. curdate()显示当前日期
19. curtime()显示当前时间
20. str_to_date('2021-9-5' , '%Y-%d-%c)字符串转换成日期
%Y四位数年 %y两位数年
%m两位数月(09,08) %c一位数月(9,8)
%d 日 %i 分
%s 秒 %h 12小时制 %H 24小时制
21. date_format ('2021-2-8','%m月-%d日-%Y年') 日期转字符串
选择类函数:
22. if(判断句,‘选择1’,‘选择2’)若判断句为真返回选择1,若为假则返回选择2
23. case 表达式
when 选择1 then 语句,
when 选择2 then 语句,
...
(else 语句)一定会执行的语句
end;
连接查询:sql92标准:仅仅支持内连接
内连接:
SELECT NAME,boyName FROM boys,beauty
WHERe beauty.boyfriend_id= boys.id;
sql99标准:支持内连接,外连接,交叉连接(推荐*)
select 查询列表
from 表1 别名
【连接类型】 join 表2 别名
on 连接条件
内连接(★):inner
外连接 左外(★):left 【outer】 右外(★):right 【outer】 全外:full【outer】
交叉连接:cross
内连接:
SELECt last_name,department_name
FROM departments d
INNER JOIN employees e ON e.`department_id` = d.`department_id`;
PS:内连接
SELECt e.last_name,m.last_name
FROM employees e
JOIN employees m
ON e.`manager_id`= m.`employee_id`;
外连接:
特点:
1、外连接的查询结果为主表中的所有记录
如果从表中有和它匹配的,则显示匹配的值
如果从表中没有和它匹配的,则显示null
外连接查询结果=内连接结果+主表中有而从表没有的记录
2、左外连接,left join左边的是主表
右外连接,right join右边的是主表
3、左外和右外交换两个表的顺序,可以实现同样的效果
4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的
交叉连接即是笛卡尔乘积
SELECt b.*,g.*
FROM girl g
CROSS JOIN boys b;
子查询:出现在其他语句中的select语句,称为子查询
分页查询:limit 索引,数目(从0开始)
联合查询:union(会自动去重,all表示不去重)
查询语句1
union 【all】
查询语句2
。。。
DML语句:插入:insert
修改:update
删除:delete
insert用法:
方式一:insert into 表名(字段名,字段名。。。) value(值,值。。)
特点:1.字段名和值的类型要一致或兼容
2.如果表的字段可以为null则字段名可以省略
3.字段名都省略的话则默认所有列
方式二:insert into 表名 set 列名=值,列名=值。。。
区别:1.方式一可一次性插入多行
insert into 表名 () value(),(),()。。。
2.方式一支持子查询
INSERT INTO beauty(id,NAME,phone)
SELECT id,boyname,'1234567'
FROM boys
update用法: update 表名 set 列=新值,列=新值。。。where 筛选条件
删除语句:
delete用法:delete from 表名 where 筛选条件
truncate用法:truncate table 表名
区别:1.delete可以加where而truncate不行
2.truncate效率高一点
3.delete删除后自增长列会从断点开始而truncate会从0开始
4.truncate删除没返回值,而delete会返回删除的行数
DDL语言库的管理:
创建库:create database 库名
修改库:alter database 库名 character set 字符集名
删除库:drop database 库名
表的管理:
表的创建:
create table 表名(
列名 列的类型【(长度) 约束】,
列名 列的类型【(长度) 约束】,
。。。
)
表的修改:
1.添加列
alter table 表名 add column 列名 类型
2.修改列的约束或类型
alter table 表名 modify column 列名 新类型【新约束】
3.修改列名
alter table 表名 change column 列名 新列名 类型;
4.删除列
alter table 表名 drop column 列名;
5.修改表名
alter table 表名 rename 【to】 新表名
表的删除
drop table 表名
复制表
create table 表名 like 旧表(只复制类型)
create table 表名
select 查询列表 from 旧表
数据类型:浮点型,整形,字符型,日期型
约束:
1.表级约束
2.列级约束
使用:创建表时
种类:



