数据库学习二sql语言笔记
1. mysql命令使用
# 展示所有数据库 show databases; # 使用某个数据库 use database_name # 选中数据库后,展示所有表 show tables;
2. 创建数据库,并进入数据库
Create database Fizz; Use Fizz;
3.建表
3.1.建表语句
# 建立学生表stu,Fizz为数据库名 # check语句检查列的值 create table Fizz.stu( sno int auto_increment, sname char(15) , ssex char(2) not null, spro char(15) not null, primary key(sno), check(ssex = '男' or ssex = '女') )engine = 'InnoDB';
#建立课程表course
#cpre为外键 create table fizz.course( cno int auto_increment, cname char(20), cpre int, ccredit float, primary key(cno), foreign key(cpre) references fizz.course(cno) )engine ='InnoDB';
3.3.保留字
3.3.1.null 为空
3.3.1.null 为空
3.3.2.auto_increment 自增
3.3.3.default 设置默认值
3.4.引擎
对于相互关联的表必须使用innodb引擎,
要使用全文搜索,使用myisam
对于相互关联的表必须使用innodb引擎,
要使用全文搜索,使用myisam
3.5 外键关联的字段必须拥有索引,可以在建表时使用index函数,也可以create index s on table_name(column)
4.插入数据以便后面操作
单行插入 insert into tabl_name values();按照 列的顺序插入;
insert into tabl_name(column1, column2, column3) values(v1,v2,v3);
insert into tabl_name(column1, column2, column3) values(v1,v2,v3);
多行插入 insert into tabl_name(column1, column2, column3)
values(v1,v2,v3),(v4,v5,v6), (v7,v8,v9);
values(v1,v2,v3),(v4,v5,v6), (v7,v8,v9);
多行插入效率更高
5.删除操作
级联删除
# (10) 删除书号为D001701的书籍信息 # 删除作者,删除书的信息。设涉及到多表删除,建立级联删除。 set foreign_key_checks=0;#解除外键约束 delete bookinfo, authorinfo from bookinfo left join authorinfo on bookinfo.BookID = authorinfo.BookID where bookinfo.BookID = '2';# 连接删除,此 处我们采用外连接,考虑到了可能有的书没有作者。 set foreign_key_checks=1;#开启外键约束
6.更新操作
级联更新
7.查询数据
1. 单表查询:
1.1.select 列 from table_name;
1. 单表查询:
1.1.select 列 from table_name;
2.多表查询
select * from ta1,ta2; 对ta1 ta2做笛卡尔积
select * from ta1,ta2; 对ta1 ta2做笛卡尔积
内连接:select * from 表1 inner join 表2 on 连接条件 或者采用select * from 表1,表2 where 筛选条件。将表1和表2利用外键关联起来。表1中未参与关联的记录将不会被组合在一起。
外连接:select * from 表1 left outer join on 表2,join左边的表1中未参与关联的记录也会被选中。
`select FirstName,LastName,City,State from Person left outer join Address on
Person.PersonId = Address.PersonId;`
外连接:select * from 表1 left outer join on 表2,join左边的表1中未参与关联的记录也会被选中。
`select FirstName,LastName,City,State from Person left outer join Address on
Person.PersonId = Address.PersonId;`
并运算:Union 连接select
嵌套查询:
不相关子查询:外层与内层的查询不关联
相关子查询:内层查询需要外层查询的结果
in 运算:实现交运算
not in 运算:实现差运算
相关子查询:内层要用到外层的查询结果
exists : 内层查询为空,外层不返回结果,内层查询不为空,外层返回结果。
not exists: 内层为空,外层返回结果
除法:一个集合包含另一个集合,exists 实现除法,not exists 小集合 - 大集合,如果大集合包含小集合,那么小集合-大集合一定为空,外层返回
模糊查询:使用like ,通配符 %: 匹配任意个字符任意多次 。 _:匹配英文字符一次
8. 汇总数据
需要 对 表中 数据( 而 不是 实际 数据 本身) 汇总。 因此, 返回 实际 表 数据 是对 时间 和 处理 资源 的 一种 浪费( 更不用说 带宽 了)。 重复 一遍, 实际 想 要的 是 汇总 信息。
聚集函数:
AVG() 返回 某 列或者某行 的 平均值,配合select语句使用
只用于 单个 列 AVG() 只能 用来 确定 特定 数值 列 的 平均值, 而且 列名 必须 作为 函数 参数 给出。 为了 获得 多个 列 的 平均值, 必须 使用 多个 AVG() 函数。 NULL 值 AVG() 函数 忽略 列 值 为 NULL 的 行。
COUNT(*) 返回 某 列 的 行数,count(column):返回column列的行数,null不计入其中。
MAX() 返回 某 列 的 最大值
MIN() 返回 某 列 的 最小值
SUM() 返回 某 列 值 之和
需要 对 表中 数据( 而 不是 实际 数据 本身) 汇总。 因此, 返回 实际 表 数据 是对 时间 和 处理 资源 的 一种 浪费( 更不用说 带宽 了)。 重复 一遍, 实际 想 要的 是 汇总 信息。
聚集函数:
AVG() 返回 某 列或者某行 的 平均值,配合select语句使用
只用于 单个 列 AVG() 只能 用来 确定 特定 数值 列 的 平均值, 而且 列名 必须 作为 函数 参数 给出。 为了 获得 多个 列 的 平均值, 必须 使用 多个 AVG() 函数。 NULL 值 AVG() 函数 忽略 列 值 为 NULL 的 行。
COUNT(*) 返回 某 列 的 行数,count(column):返回column列的行数,null不计入其中。
MAX() 返回 某 列 的 最大值
MIN() 返回 某 列 的 最小值
SUM() 返回 某 列 值 之和