目录
SQL语句
SQL详细名词和概念
sql详细名词
1.数据库内可以有多个表
2.表的内部主要由键名和键值组成
3.键有主键,外键和普通键三种类型
4.主键唯一且不为空,但可以由两个键合起来作为一个主键,此时两个单独都不是主键,只有一起才是主键,即联合主键
5.外键可以不唯一且为空
6.外键是某个外表的主键表内的具体样子
sno列名 mno cno 1 2 3 1 2 3
建表
语句 作用 create database A 创建数据库 use A 引用数据库 create table AItem 创建图表 创建表的语法结构
create table Aitem{
mno int, 键名 类型
sno int,
primary key (mno), 设置主键
foreign key (sno) references marjor (sno) 设置外键 foreign key (外键名) references 外键的表 (外键)
}
查询
语句 作用 select * from 表名 查询表内所有项 select 键名 或 带键名计算式 as 新列名from 表名 查询局部信息 select distinct 键名 或 带键名计算式 as 新列名from 表名 去重查询 select * from 表名 where 条件1 and 条件2 条件查询 where
1.where后如果有多个条件相与即&&,使用and相连,如果是相或即||,使用or相连
2.where后的条件如果是一个范围可以使用 键名 between 范围头 and 范围尾简洁实现
3.where后的条件如果是在枚举的几个要求中寻找,可以使用键值 in(枚举要求1,枚举要求2...)(本质是或,多个or)
4.where后的条件如果是排除枚举的几个要求后寻找,可以使用键值 not in(枚举要求1,枚举要求2...)(本质是或非,!(1or2))
5.where后如果要实现的效果是查找首字母相同的键值的效果,可以使用通配符%==实现,例如,
select * from stu where sname like 'A%',这里的A%代表的意思是字符A+任意长度的任意字符,
如果要实现的是查找拥有第二个字符的键值可以使用_A%,其中的通配符_可以实现占位的效果,
而查找查找的是只要拥有一部分字符串的键值,前后长度无要求可以使用%A%
6.like和=的区别
like和=的区别 什么情况下 无区别,等价 like后无通配符(%,_) 能用like,不能用= 条件为模糊查询,即有通配符 7.如果查询条件是找null键值的数据,不能使用=❗❗❗❗,只能用a is null的格式
增加
语句
语句 作用 alter table 表名 add constraint fk_表名 foreign key (外键名) reference 外键来源的表名(外键名) 增加外键 alter table 表名 add 键名 类型 增加新键名(列名)
删除
语句 alter table 表名 drop column 键名 删除键名(列名) drop table 表名 删除图表 delete from 表名 where 条件 根据条件删除信息(假如删除的信息涉及到别的表外键的键值,得先置键值为null)
插入
语句 作用 insert into 表名(键名1,键名2) values (对应值1,对应值2) 插入信息(选择键名插入) insert into 表名 values (对应值1,对应值2.....,对应值n) 插入信息(内容得按照键名格式一个个列在values后)
更新(更改)
语句 作用 update 表名 set 键名= 更新的值 where 条件 更新(更改)数据
聚集函数
排序函数,实现升降序,一般位于查询语句的尾部
语句 作用 order by 键名 根据键名升序排列 order by 键名 desc 根据键名降序排列 聚集函数
聚集函数的使用位置一般位于查询语句的
select ==这个地方== from 表名
,用聚集函数包裹原来的键名,如果要去重也必须在函数内写,比如select count (distinct sno) from stu
语句 作用 count(*) 统计一个表多少行 count(键名) 统计一个表里键名的值的个数(不为空) sum(键名) 计算总共 avg(键名) 计算平均 max(键名) 计算最大 min(键名) 计算最小 分组函数
根据某个键名给查询结果分组,一般卸载查询尾部,必须配合聚合函数,可以使用where
语句 作用 select 键名1,聚合函数(键名2) from 表名 group by 键名1 给查询结果分组(分组函数的键名前面必须出现) 注意❗❗❗❗where子句不能用聚集函数作为条件表达式,要使用having,有having就必须前面有group by❗❗❗❗,
❗❗❗❗
情况 使用 语句中有聚集函数,比如sum等 必须group by + having 语句中不包含聚集函数 group by+ where 或单纯where ❗❗❗❗
例如:select sno,AVG(grade) from sc group by sno having AVG(grade) >= 90
多表查询
连接查询
类型 语句结构 主外键连接(等值连接) where 表1.主键 = 表2.相应外键 and 表2.外键 = ==表3.相应主键 查询条件 左外连接 from 表1 left outer join 表2 on 表1.主键 = 表2.相应外键 区别
方式 特点 主外键连接(等值连接) 使用两者主外键连接,适用于不需要保留空数据的方法 左外连接 假如想要保留某个表的数据,则将这个表左外连接到别的表,这样左边的表的数据哪怕不符合连接条件 也会保留,左外连接的条件使用on
嵌套查询
类型 语句结果 不相关嵌套查询 select 键名1 from 表1 where 表1主键 in (select 表一主键 from 表2 where 表2键名1 = ++条件++) 相关嵌套查询 select 键名1 from 表1 where ++条件++ in (select 表2键名1 from 表2 where 表1.主键 = 表2.外键) 区别
方式 特点 不相关嵌套查询 以一个查询获得结果作为条件进行的连接,即子查询不依赖父查询 相关嵌套查询 将连接放在子查询中 例如1.查询选修'20201'学生的姓名sname
主外键连接:select sname from stu where stu.sno = sc.sno and sc.cno = '20201'
不相关嵌套查询: select sname from stu where sno in (select sno from sc where cno = '20201')
相关嵌套查询:select sname from stu where '20201' in (select cno from sc where stu.sno = sc.sno)
❗❗❗❗❗派生表: 创建一个表方便对比之类的操作,select a from b,(select ....)as 派生表(派生表字段1,派生表字段2) where 条件
带有exists
exists更像是一个函数,在exists()中可以写查询语句,而exists会根据查询语句的结果是否存在返回true或false
例如:
查询选修'20201'学生的姓名sname
带有exists:
select sname from stu where exists(select * from sc where sc.cno = "20201" and sc.sno=stu.sno)
集合查询
union 并
例子:查询选修"20201"号课程或"2023"的学生学号
普通 =》
select distinct sno from sc where cno in ('20201','20203')
交 =》
select sno from sc where cno ="20201"
unionselect sno from sc where cno ="20203"
intersect 交
例子:查询年龄是18且mno = 1 的学生学号
普通 =》
select sno from stu where age = 18 and mno = 1
交 =》
select sno from stu where age = 18
intersectselect sno from stu where mno = 1
例子:查询选修"20201"号课程或"2023"的学生学号
普通 =》
select distinct sno from sc where cno ='20201' and cno = '20203'
交 =》
select distinct sno from sc where cno ="20201"
intersectselect distinct sno from sc where cno ="20203"
except 差
例子:查询年龄是18且mno = 1 的学生学号
普通 =》
select sno from stu where age = 18 and mno = 1
差 =》
select sno from stu where age = 18
exceptselect sno from stu where mno != 1
视图
视图是从一个或几个基本表(或视图)导出的表。不同的是,它是一虚表,数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍然存放在原本的基本表中。所以一旦基本表发生变化,从视图中查询的数据也就随之改变。
作用之一:视图更加方便用户的查询
create view 视图名字 as 查询语句
更类似于将查询语句获得的数据的地址进行读取后按照表的方式排列储存,获得一个快捷找到这个表的方式,不用再用复杂查询语句去查询,直接查视图即可
1.视图指向表的数据,表变视图变
2.创建视图的表每个列都必须有列名
存储过程
存储过程是事先经过编译并保存再数据库中的一段sql语句集合,使用时调用即可
框架结构
sqlcreate proc 存储名 @变量1 类型,@变量2.。。。。 as begin select ....... end
调用
sqexec 存储名